使用DataTable的嵌套中继器

时间:2015-02-26 02:30:24

标签: c# datatable repeater asprepeater

我无法使用数据表正确绑定我的子中继器(lvTwo)。它总是抛出NullReferenceException。在调试模式下,我的数据表看起来很好,有什么想法吗?

HTML代码:

<asp:Repeater ID="lvOne" runat="server" OnItemDataBound="lvOne_ItemDataBound">
    <ItemTemplate>
        <div>
            I am the one.
        </div>
        <asp:Repeater ID="lvTwo" runat="server">
            <ItemTemplate>
                I am the two.
            </ItemTemplate>
        </asp:Repeater>
    </ItemTemplate>
</asp:Repeater>

代码隐藏(dtTable绑定到lvOne,dtTable2绑定到lvTwo):

protected void Page_Load(object sender, EventArgs e)
    {
        DataTable dtTable = new DataTable();
        dtTable.TableName = "T1";
        dtTable.Columns.Add("ProjectName");

        DataRow dr = dtTable.NewRow();
        dr["ProjectName"] = "ThreeSixFive";
        dtTable.Rows.Add(dr);

        if (!Page.IsPostBack)
        {
            lvOne.DataSource = dtTable;
            lvOne.DataBind();
        }
    }


protected void lvOne_ItemDataBound(object sender, RepeaterItemEventArgs e)
    {
        DataTable dtTable2 = new DataTable();
        dtTable2.TableName = "T2";
        dtTable2.Columns.Add("C");

        DataRow dr = dtTable2.NewRow();
        dr["C"] = "ThreeSixFive";
        dtTable2.Rows.Add(dr);

        if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
        {
            if (dtTable2 != null)
            {
                lvTwo.DataSource = dtTable2;
                lvTwo.DataBind();
            }
        }
    }`

1 个答案:

答案 0 :(得分:0)

罪魁祸首是由于未被识别的lvTwo控件。由于控件在设计器文件中注册,因此能够编译,而我需要使用ff:

var lvTwo = (ListView) e.Item.FindControl("lvTwo");