2017-01-12 43 views
0

我在ASPX頁面中有下面的標記代碼。ASP.NET中的GridView中繼器控件

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

下面的C#代碼在我ASPX.CS頁

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; 
} 

我的目的是讓多個GridView的取決於我的數據集的表的數量。運行這段代碼後,我在頁面上看不到任何內容。我不知道我在這裏做什麼錯了嗎?

+1

你可以試試',而不是''rep' = grdVw.DataSource ds.Tables grdVw';' – Eldeniz

+0

如果我嘗試'grdVw.DataSource = ds.Tables'我喜歡把自己列:區分大小寫\t將IsInitialized, RemotingFormat,DisplayExpression,HasErrors,MinimumCapacity,TableName,命名空間,前綴,DesignMode –

回答

0

這是我可以建議你:

//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++; 
    } 

希望這有助於。

0

您可以使用Repeater的OnItemDataBound事件。

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

然後在代碼begind找到嵌套GridView和正確的數據集綁定到它。

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(); 
}