Zdravím všechny ASP.NET odborníky a obracím se na Vás s dotazem. S ASP.NET začínám a po přečtení několika základních tutoriálů jsem si začal psát jednoduchou evidenci své knihovny. V databázi mám dvě tabulky - autori a knihy. Má představa je taková, že na obrazovce vlevo budu mít přehled autorů a když na některého z autorů kliknu, zobrazí se mi pod ním přehled jeho děl, když kliknu na název knihy, vpravo se zobrazí nějaká anotace. Řeším tu "navigační" část vlevo pomocí dvou zanořených repeaterů, takže se mi zobrazí všichni autoři a pod nimi všechny jejich díla, což je dost nepřehledné a především tento seznam je poměrně dlouhý. Můj kód nyní vypadá takto:
<asp:SqlDataSource ID="sqlAutori" runat="server"
ConnectionString="<%$ ConnectionStrings:ConnectionString %>"
SelectCommand="SELECT * FROM [autori] ORDER BY [jmeno]">
</asp:SqlDataSource>
<asp:Repeater ID="repAutori" runat="server" DataSourceID="sqlAutori">
<HeaderTemplate><ul></HeaderTemplate>
<ItemTemplate>
<li>
<asp:HyperLink ID="hlAutor" runat="server"
navigateurl='~/Default.aspx?autor=<%# Eval("id").ToString()) %>'
Text='<%# Eval("jmeno") %>' />
<asp:Label ID="lblAutor" runat="server"
Visible="False" Text='<%# Eval("id") %>' />
<asp:SqlDataSource ID="sqlKnihy" runat="server"
ConnectionString="<%$ ConnectionStrings:ConnectionString %>"
SelectCommand="SELECT * FROM knihy WHERE autor = @autor) ORDER BY nazev">
<SelectParameters>
<asp:ControlParameter ControlID="lblAutor" Name="autor" PropertyName="Text" Type="Int32" />
</SelectParameters>
</asp:SqlDataSource>
<asp:Repeater ID="repKnihy" runat="server" DataSourceID="sqlKnihy">
<HeaderTemplate><ul></HeaderTemplate>
<ItemTemplate>
<li>
<asp:HyperLink ID="hlNabidka" runat="server"
NavigateUrl='~/Default.aspx?kniha=<%# Eval("id").ToString()) %>'
Text='<%# Eval("nazev") %>' />
</li>
</ItemTemplate>
<FooterTemplate></ul></FooterTemplate>
</asp:Repeater>
</li>
</ItemTemplate>
<FooterTemplate></ul></FooterTemplate>
</asp:Repeater>
Nyní se konečně dostávám k problému - jak to udělat, aby se mi nejprve zobrazil jen seznam autorů a až po kliknutí na autora (otevřu tutéž stránku s parametrem autor = id) a podle hodnoty vyzvednutou z QueryStringu říci repeateru repKnihy, jestli se má zobrazit nebo ne. Původně jsem to chtěl udělat pomocí vlastnosti Visible toho repeateru, kde bych zavolal jednoduchou třídu s parametrem hodnoty aktuálního id autora z nadřazeného repateru a v této třídě ji porovnal s hodntou id autora získanou z QueryStringu a na základě toho vrátil true/false. Ovšem nevím jak tu hodnotu id autora z nadřazeného repateru tam dostat, pokud použiju Eval("id") háže mi to chybu: Databinding methods such as Eval(), XPath(), and Bind() can only be used in the context of a databound control. Poradíte někdo jak na to? Díky Dave
|