ASP.NET Repeater控件中的GridView

时间:2017-01-12 05:00:57

标签: c# asp.net gridview

我的ASPX页面中有以下标记代码。

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

在我的ASPX.CS页面下面的C#代码

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

我的目的是让多个网格视图取决于我的数据集的表数。运行此代码后,我在页面上看不到任何内容。我不知道我在这里做错了什么?

2 个答案:

答案 0 :(得分: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++;
    }

希望这有帮助。

答案 1 :(得分:0)

您可以使用Repeater的OnItemDataBound事件。

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

然后在代码中找到嵌套的GridView并将正确的DataSet绑定到它。

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