DevTrain .NET Developers Home. Das Community Portal für ASP.NET, Visual Basic, C#
 
  Login Status: Hallo   Anmelden  Suche:  
Navigationslinks überspringen
Startseite
Artikel
Blogs
Foren
ClubClub erweitern

 
Ihre Optionen
Save
Mail
Print
Rate
 
Advertising
  ASP konferenz vom 24.-25. Februar 2010 im ehem. IMAX München

 
Navigationslinks überspringen
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:

  • Ein Hidden Field das als Steuerquelle für die verschachtelten Daten dient
  • Eine Datalist die zur Anzeige der Daten dient
  • ein SQL Datasource mit einem Parameter für die Where Bedingung

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.

 


Diskutieren Sie in den Foren

ASP konferenz vom 24.-25. Februar 2010 im ehem. IMAX München