动态模板控件

时间:2010-10-18 18:30:53

标签: asp.net

On!PostBack动态模板是根据复选框所需的行数创建的。控件ID是chkbox_id。我无法通过以下代码检索动态复选框,并始终抛出NullReferenceException。

循环遍历gridview行之前的代码,然后数据表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  }

    }

在页面加载中定义的复选框:

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

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

1 个答案:

答案 0 :(得分:1)

我对此并不乐观,我没有时间尝试,但如果你做row.Parent.FindControl(...),它可能会有效。此外,如果您使用as运算符而不是直接强制转换,则不会出现空引用异常(即您可以检查它):

CheckBox cb = row.Parent.FindControl("ckbox_" + id) as CheckBox;
if (cb != null)
{
    // ...
}