DevTrain Startseite SharePoint Camp ? In 5 Tagen zum SharePoint Profi!  
  
  
SUCHEN:  
ARTIKEL ONLINE: 525   

Kategorien
.NET
Datenbanken
Web
XML

Allgemein
Camp
Foren
Events
Persönliche Einstellungen
Registrieren
Prämien Shop
Kontakt
Impressum
Über DevTrain

Autoren


   Autor: Hannes Preishuber Artikel Drucken
        
verschachteltes Master Detail mit Datalist und Gridview

Die üblichen ASP.NET 2.0 Master Detail Beispiele ziegen meist 2 Gridview Controls die nebeneinander platziert werden. Natürlich funktioniert das ganz auch in einander verschachtelt (nested). Dazu nehmen wir eine Datalist die 3 Datensätze nebeneinander darstellt und ein Gridview. Die Daten kommen aus der Northwind Datenbank und stellen die Orders und OrderDetail dar.

Der Kern der Lösung ist das das innenliegende Grid samt SQLDatasource in das Itemtemplate der Datalist platziert werden. Dabei erhält die OrderDetails Datasource einen Parameter um nur die passenden Details von der Datenbank zu holen.

<asp:DataList ID="DataList1" runat="server" DataKeyField="OrderID"
         DataSourceID="DSOrders" OnItemDataBound="DataList1_ItemDataBound" RepeatDirection=Horizontal RepeatColumns=4>
            <ItemTemplate>
                OrderID:
                <asp:Label ID="OrderIDLabel" runat="server" Text='<%# Eval("OrderID") %>'></asp:Label><br />
                CustomerID:
                <asp:Label ID="CustomerIDLabel" runat="server" Text='<%# Eval("CustomerID") %>'>
                </asp:Label><br />
           <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="OrderID,ProductID"
            DataSourceID="DSOrderDetails">
            <Columns>
                <asp:BoundField DataField="OrderID" HeaderText="OrderID" ReadOnly="True" SortExpression="OrderID" />
                <asp:BoundField DataField="Quantity" HeaderText="Quantity" SortExpression="Quantity" />
                <asp:BoundField DataField="ProductID" HeaderText="ProductID" ReadOnly="True" SortExpression="ProductID" />
            </Columns>
        </asp:GridView>
        <asp:SqlDataSource ID="DSOrderDetails" runat="server" ConnectionString="<%$ ConnectionStrings:NorthwindConn %>"
            SelectCommand="SELECT [OrderID], [Quantity], [ProductID] FROM [Order Details] WHERE ([OrderID] = @OrderID)">
            <SelectParameters>
                <asp:Parameter Name="OrderID" Type="Int32" />
            </SelectParameters>
        </asp:SqlDataSource>
               
                <br />
            </ItemTemplate>
        </asp:DataList><asp:SqlDataSource ID="DSOrders" runat="server" ConnectionString="<%$ ConnectionStrings:NorthwindConn %>"
            SelectCommand="SELECT [OrderID], [CustomerID] FROM [Orders]">
</asp:SqlDataSource>

Die Zuordnung des Where Paramters muss dann pro Datensatz der Order Tabelle erfolgen. Dazu bietet sich das Itemdatabound Event der Datalist an. Dort wird die SQLDatasoruce per Findcontrol gefunden, in den passenden Typ gecastet und der Paramter per DefaultValue gesetzt. Die Order ID kommt aus dem Datakeys des Datalist Controls.

Protected Sub DataList1_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DataListItemEventArgs)
        Dim s As SqlDataSource = e.Item.FindControl("DSOrderDetails")
        s.SelectParameters("OrderID").DefaultValue = e.Item.DataItem("OrderID")
End Sub

Dieser Artikel ist Daniel Spaude gewidmet, der genau diese Aufgabenstellung gelöst haben wollte. Hier ist es Daniel!:-)

DevTrain Camp - Schneller zum .NET 3.5 Developer
 
Verwandte Artikel      Verlinkte Dokumente
    Keine verknüpften Dokumente
    Keine Links vorhanden

  Erfasst am: 17.10.2005
  Gültig bis: 15.01.2006
1 Ratings
Bewertung: 100,0%
schlecht    sehr gut  

 
© Copyright 2007 ppedv AG