Asp.net 动态模板控件

Asp.net 动态模板控件,asp.net,Asp.net,加油!回发动态模板是根据复选框所需的行数创建的。控件id是chkbox_id。我无法通过以下代码检索动态复选框,并且总是抛出NullReferenceException 前面的代码在gridview行中循环,然后datatable dt引用可能的动态列数 for (int i = 0; i < dt.Rows.Count; i++) { string id = dt.Rows[i]["id"].ToString(); CheckBox cb

加油!回发动态模板是根据复选框所需的行数创建的。控件id是chkbox_id。我无法通过以下代码检索动态复选框,并且总是抛出NullReferenceException

前面的代码在gridview行中循环,然后datatable dt引用可能的动态列数

    for (int i = 0; i < dt.Rows.Count; i++)
    {
        string id = dt.Rows[i]["id"].ToString();

        CheckBox cb = (CheckBox)row.FindControl("ckbox_" + id);
        if (cb.Checked)
        { // do things  }

    }

如果我需要澄清任何其他问题,请告诉我。

我对此没有把握,我没有时间尝试,但如果您执行
行.Parent.FindControl(…)
,它可能会起作用。此外,如果使用
as
运算符而不是直接强制转换,则不会出现空引用异常(即,您可以检查它):


你能展示你定义复选框的代码吗?如果我错了,请纠正我,但经过进一步研究,FindControl似乎无法在母版页中工作…我感谢你的帮助。这不起作用,因为找不到控件。我通过在模板项中使用复选框列表解决了这个问题。
if (!Page.IsPostBack)
{
    foreach (DataRow dRow in dt.Rows)
    {
        TemplateField ckhColumn = new TemplateField();
        ckhColumn.HeaderTemplate = new GridViewTemplate(ListItemType.Header, dRow["name"].ToString());
        ckhColumn.ItemTemplate = new GridViewTemplate(ListItemType.Item, "ckbox_" + dRow["id"].ToString());
        gvProductPriceList.Columns.Add(ckhColumn);
    }           
}
CheckBox cb = row.Parent.FindControl("ckbox_" + id) as CheckBox;
if (cb != null)
{
    // ...
}