【问题标题】:Nested Repeater Using DataTable Asp.net使用 DataTable Asp.net 的嵌套中继器
【发布时间】:2016-08-11 11:03:01
【问题描述】:

问题是当我使用 dt1 作为 rpt2.DataSource(nested repeater source) 时,程序运行良好,但是当我使用 dt2 作为源(并相应地使 Eval() 更改)时,输出只有 First Repeater。

dt2 的输出=>

1 公羊

2 个处理器

3 显卡

当我对 dt1 进行更改时的输出=>

1 公羊

1

2

3

2 个处理器

1

2

3

3 显卡

1

2

3

<body>
<form id="form1" runat="server">
    <div>
        <asp:Repeater ID="my_repeater1" runat="server" OnItemDataBound="my_repeater1_ItemDataBound">
            <ItemTemplate>
                <asp:Label Text='<%#Eval("ID")%>' ID="my_text1" runat="server" />
                <asp:Label Text='<%#Eval("CATEGORY")%>' ID="my_text2" runat="server" />
                <br />
                <asp:Repeater runat="server" ID="my_repeater2">
                    <ItemTemplate>
                        <asp:Label Text='<%#Eval("ITEMS")%>' ID="lbl1" runat="server" />
                        <br />
                    </ItemTemplate>
                </asp:Repeater>
            </ItemTemplate>
        </asp:Repeater>
    </div>
</form>

public partial class WebForm1 : System.Web.UI.Page
{
    DataTable dt1 = new DataTable();
    DataTable dt2 = new DataTable();
    DataTable dt3 = new DataTable();

    protected void Page_Load(object sender, EventArgs e)
    {

        dt1.Columns.Add("ID");
        dt1.Columns.Add("CATEGORY");
        dt1.Rows.Add("1", "Rams");
        dt1.Rows.Add("2", "Processors");
        dt1.Rows.Add("3", "GraphicCards");
        my_repeater1.DataSource = dt1;
        my_repeater1.DataBind();

        dt2.Columns.Add("ID");
        dt2.Columns.Add("ITEMS");
        dt2.Rows.Add("1", "DDR1");
        dt2.Rows.Add("2", "DDR2");
        dt2.Rows.Add("3", "DDR3");

    }

    protected void my_repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e)
    {
        Repeater rpt2 = (Repeater)e.Item.FindControl("my_repeater2");
        rpt2.DataSource = dt2;
        rpt2.DataBind();

    }
}

【问题讨论】:

  • 所以我才知道,如果我在将行和列分配给所有数据表之后绑定 my_repeater1,那么程序运行正常,所以问题出在序列上,但我不明白为什么序列在这里很重要?

标签: c# asp.net webforms repeater nested-repeater


【解决方案1】:

my_repeater1.DataBind() 被执行时,.NET 将开始构建 my_repeater1。对于添加到 my_repeater1 的每一行,都会调用 my_repeater1_ItemDataBound。并且由于您使用 dt2 作为嵌套中继器的源,您将不会获得任何数据,因为 dt2 尚未填充数据。这仅在 my_repeater1 的构建完成后发生在您的示例中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-29
    • 1970-01-01
    • 2013-01-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多