2017-01-12 5 views
0

Ich habe unten Markup-Code in meiner ASPX-Seite.GridView in ASP.NET Repeater Steuerelement

<asp:Repeater ID="rep" runat="server"> 
    <ItemTemplate> 
     <asp:GridView ID="grdVw" runat="server" AutoGenerateColumns="true"> 
     </asp:GridView> 
    </ItemTemplate> 
</asp:Repeater> 

Below C# -Code in meiner aspx.cs Seite

protected void Page_Load(object sender, EventArgs e) 
{ 
    DataSet ds = new DataSet(); 

    for (int i = 0; i < 5; i++) 
    { 
     ds.Tables.Add(getDT()); 
    } 

    rep.DataSource = ds.Tables; 
    rep.DataBind(); 
}  

private DataTable getDT() 
{ 
    DataTable dt = new DataTable(); 
    dt.Columns.Add("One"); 
    dt.Columns.Add("Two"); 
    dt.Columns.Add("Three"); 

    var row = dt.NewRow(); 
    row["One"] = "Value1"; 
    row["Two"] = "Value2"; 
    row["Three"] = "Value3"; 
    dt.Rows.Add(row); 

    return dt; 
} 

Meine Absicht ist, hängt von der Anzahl der Tabellen meines Datensatzes mehrere Gridviews zu haben. Nachdem ich diesen Code ausgeführt habe, sehe ich nichts auf der Seite. Ich weiß nicht, was ich hier falsch mache? Diese

+1

können Sie versuchen, 'grdVw' statt' 'rep' grdVw.DataSource = ds.Tables;' – Eldeniz

+0

Wenn ich versuche, 'grdVw.DataSource = ds.Tables' Ich erhalte Spalten wie: Casesensitive \t IsInitialized, RemotingFormat, DisplayExpression, HasErrors, MinimumCapacity, Tabellenname, Namespace, Präfix, DesignMode –

Antwort

0

ist das, was ich kann Ihnen vorschlagen:

//after these lines 
    rep.DataSource = ds.Tables; 
    rep.DataBind(); 

    //add below lines: 
    int count = 1; 
    foreach (RepeaterItem item in rep.Items) 
    { 
     var grd = item.FindControl("grdVw") as GridView; 
     grd.DataSource = ds.Tables[count - 1]; 
     grd.DataBind(); 
     count++; 
    } 

Hoffnung, das hilft.

0

Sie können das Ereignis OnItemDataBound des Repeaters verwenden.

<asp:Repeater ID="rep" runat="server" OnItemDataBound="rep_ItemDataBound"> 
    <ItemTemplate> 
     <asp:GridView ID="grdVw" runat="server"></asp:GridView> 
    </ItemTemplate> 
</asp:Repeater> 

dann in Code begind die geschachtelte Gridview zu finden und den richtigen Datensatz, um es zu binden.

protected void rep_ItemDataBound(object sender, RepeaterItemEventArgs e) 
{ 
    GridView gv = e.Item.FindControl("grdVw") as GridView; 
    gv.DataSource = ds.Tables[e.Item.ItemIndex]; 
    gv.DataBind(); 
} 
Verwandte Themen