DevTrain

Autor: Hannes Preishuber

Codeless nested Master Detail mit Gridview und Datalist

Verschachtelte Listen Controls sind mit ASP.NET einfach zu verwirklichen. Es gibt auf DevTrain bereits einige Artikel dazu. Nun bin ich aber kein Freund von Source Code und nur "kein Code" ist guter Code. In diesem Sinne beschreibe ich dieses mal, wie man zwei oder mehrere Gridview Controls verschachtelt ohne eine Zeile Code zu schreiben. Alles wird per Deklaration erledigt.

Zunächst möchte ich einmal das Ergebnis vorstellen. Ein Gridview zeigt in der ersten Spalte den Bestellkopf. Die Details pro Bestellung werden rechts daneben nebeneinander dargestellt mittels eines Datalist Control.

Grundsätzlich wird ein Gridview verwendet das zusätzlich ein Templatefield erhält. In dieses Feld kommen drei Bausteine:

Das Ganze sieht dann innerhalb des Templatefields des Gridviews so aus:

<ItemTemplate>
   <asp:HiddenField id="orderid" runat="server" Value='<%#eval("orderid") %>'/>
   <asp:DataList ID="DataList1" runat="server" DataKeyField="OrderID" DataSourceID="DSOrderDetails" RepeatDirection="Horizontal">
   <ItemTemplate>
     ProductID:
   <asp:Label ID="ProductIDLabel" runat="server" Text='<%# Eval("ProductID") %>'></asp:Label><br />
     UnitPrice:
   <asp:Label ID="UnitPriceLabel" runat="server" Text='<%# Eval("UnitPrice") %>'></asp:Label><br />
     Quantity:
   <asp:Label ID="QuantityLabel" runat="server" Text='<%# Eval("Quantity") %>'></asp:Label><br />
     Discount:
   <asp:Label ID="DiscountLabel" runat="server" Text='<%# Eval("Discount") %>'></asp:Label><br />
  <br />
</ItemTemplate>
</asp:DataList>
<asp:SqlDataSource ID="DSOrderDetails" runat="server" ConnectionString="<%$ ConnectionStrings:NorthwindConn %>"
            SelectCommand="SELECT [OrderID], [ProductID], [UnitPrice], [Quantity], [Discount] FROM [Order Details] WHERE ([OrderID] = @OrderID)">
  <SelectParameters>
             <asp:ControlParameter ControlID="orderid" Name="OrderID" PropertyName="Value"
                    Type="Int32" />
            </SelectParameters>
  </asp:SqlDataSource>
</ItemTemplate>

Nur wenn sich ein Control inherhalb des gleichen Templates befindet kann es vom DataSource Control als Controlparameter verwendet werden.

 


Erfasst am: 17.10.2005 - Artikel-URL: http://www.devtrain.de/news.aspx?artnr=961
© Copyright 2003 ppedv AG - http://www.ppedv.de