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);
}
}
如果我需要澄清其他任何内容,请告诉我。
答案 0 :(得分:1)
我对此并不乐观,我没有时间尝试,但如果你做row.Parent.FindControl(...)
,它可能会有效。此外,如果您使用as
运算符而不是直接强制转换,则不会出现空引用异常(即您可以检查它):
CheckBox cb = row.Parent.FindControl("ckbox_" + id) as CheckBox;
if (cb != null)
{
// ...
}