动态绑定模板列后根据ID找不到控件?

taoyuming 2017-08-15 11:18:31
GridView里动态绑定模板列,如下:
TemplateField tf = new TemplateField();
tf.HeaderText = "选择";
tf.ItemTemplate = new MyTemplate("CheckBox", "gvcbIsConfirm", "");//MyTemplate是自定义模板,第一个参数是控件类型,第二个是控件ID,第三个是默认值
gv.Columns.Add(tf);//gv是我的GridView

MyTemplate如下:
public class MyTemplate : ITemplate
{
private string strControlType;
private string strControlID;
private string strDefaultValue;
public MyTemplate(string strControlType, string strControlID, string strDefaultValue)
{
this.strControlType = strControlType;
this.strControlID = strControlID;
this.strDefaultValue = strDefaultValue;
}
public void InstantiateIn(Control ctlContainer)
{
switch (strControlType)
{
case "CheckBox":
CheckBox cb = new CheckBox();
cb.ID = strControlID;
cb.Checked = false;
ctlContainer.Controls.Add(cb);
break;
case "TextBox":
TextBox txt = new TextBox();
txt.ID = strControlID;
txt.Text = strDefaultValue;
txt.Width = Unit.Pixel(100);
ctlContainer.Controls.Add(txt);
break;
}
}
}

绑定完毕后,我在后续操作中,获取不到CheckBox,
for (int i = 0; i < gv.Rows.Count; i++)
{
CheckBox cb = (CheckBox)gv.Rows[i].FindControl("gvcbIsConfirm");
if (cb.Checked)//cb一直是null
{
//...
}
}

请问哪里有问题,谢谢大家。
...全文
177 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
taoyuming 2017-08-16
  • 打赏
  • 举报
回复
在页面重写OnInit事件,问题解决了,谢谢。
taoyuming 2017-08-16
  • 打赏
  • 举报
回复
引用 9 楼 hanjun0612 的回复:
[quote=引用 8 楼 taoyuming 的回复:] [quote=引用 7 楼 hanjun0612 的回复:] 应该是调用 gridview.rows[0]. findcontrol方法。 http://blog.csdn.net/qdzx2008/article/details/4558388
我感觉是我点击按钮获取ID时,原本动态加载的模板列被刷新没了,所以找不到。[/quote] 那点击按钮的事件中应该还没刷新。 只有完成了事件,然后页面 postback了。才会刷新[/quote] 但是我点击按钮时,在单击事件中,确实找不到我要的控件。这个问题纠结我一天了。。
正怒月神 版主 2017-08-16
  • 打赏
  • 举报
回复
引用 8 楼 taoyuming 的回复:
[quote=引用 7 楼 hanjun0612 的回复:] 应该是调用 gridview.rows[0]. findcontrol方法。 http://blog.csdn.net/qdzx2008/article/details/4558388
我感觉是我点击按钮获取ID时,原本动态加载的模板列被刷新没了,所以找不到。[/quote] 那点击按钮的事件中应该还没刷新。 只有完成了事件,然后页面 postback了。才会刷新
taoyuming 2017-08-16
  • 打赏
  • 举报
回复
引用 7 楼 hanjun0612 的回复:
应该是调用 gridview.rows[0]. findcontrol方法。 http://blog.csdn.net/qdzx2008/article/details/4558388
我感觉是我点击按钮获取ID时,原本动态加载的模板列被刷新没了,所以找不到。
正怒月神 版主 2017-08-16
  • 打赏
  • 举报
回复
应该是调用 gridview.rows[0]. findcontrol方法。 http://blog.csdn.net/qdzx2008/article/details/4558388
taoyuming 2017-08-16
  • 打赏
  • 举报
回复
引用 5 楼 shoppo0505 的回复:
[quote=引用 2 楼 taoyuming 的回复:] [quote=引用 1 楼 shoppo0505 的回复:] 你先要找TemplateField ,再找里面的checkbox
还麻烦您提供一下示例代码,谢谢。[/quote] 你先要在gv.Rows[i]里面找到TemplateField ,再在TemplateField 里面找你要的checkbox。
引用 4 楼 taoyuming 的回复:
[quote=引用 3 楼 shoppo0505 的回复:] [quote=引用 2 楼 taoyuming 的回复:] [quote=引用 1 楼 shoppo0505 的回复:] 你先要找TemplateField ,再找里面的checkbox
还麻烦您提供一下示例代码,谢谢。[/quote] 你先要在gv.Rows[i]里面找到TemplateField ,再在TemplateField 里面找你要的checkbox。[/quote] 不太熟悉找TemplateField 的写法。[/quote] TemplateField 也是控件阿,就按照普通控件的查找方法来找就可以了。 有ID,就按照ID找,没有ID就foreach controls,如果是TemplateField 就在这个TemplateField 里面再找checkbox[/quote] foreach (Control ctl in gv.Rows[i].Controls) { if (ctl is TemplateField) { } } 这样找了一遍,没找到TemplateField
shoppo0505 2017-08-16
  • 打赏
  • 举报
回复
引用 2 楼 taoyuming 的回复:
[quote=引用 1 楼 shoppo0505 的回复:] 你先要找TemplateField ,再找里面的checkbox
还麻烦您提供一下示例代码,谢谢。[/quote] 你先要在gv.Rows[i]里面找到TemplateField ,再在TemplateField 里面找你要的checkbox。
引用 4 楼 taoyuming 的回复:
[quote=引用 3 楼 shoppo0505 的回复:] [quote=引用 2 楼 taoyuming 的回复:] [quote=引用 1 楼 shoppo0505 的回复:] 你先要找TemplateField ,再找里面的checkbox
还麻烦您提供一下示例代码,谢谢。[/quote] 你先要在gv.Rows[i]里面找到TemplateField ,再在TemplateField 里面找你要的checkbox。[/quote] 不太熟悉找TemplateField 的写法。[/quote] TemplateField 也是控件阿,就按照普通控件的查找方法来找就可以了。 有ID,就按照ID找,没有ID就foreach controls,如果是TemplateField 就在这个TemplateField 里面再找checkbox
taoyuming 2017-08-16
  • 打赏
  • 举报
回复
引用 3 楼 shoppo0505 的回复:
[quote=引用 2 楼 taoyuming 的回复:] [quote=引用 1 楼 shoppo0505 的回复:] 你先要找TemplateField ,再找里面的checkbox
还麻烦您提供一下示例代码,谢谢。[/quote] 你先要在gv.Rows[i]里面找到TemplateField ,再在TemplateField 里面找你要的checkbox。[/quote] 不太熟悉找TemplateField 的写法。
shoppo0505 2017-08-16
  • 打赏
  • 举报
回复
引用 2 楼 taoyuming 的回复:
[quote=引用 1 楼 shoppo0505 的回复:] 你先要找TemplateField ,再找里面的checkbox
还麻烦您提供一下示例代码,谢谢。[/quote] 你先要在gv.Rows[i]里面找到TemplateField ,再在TemplateField 里面找你要的checkbox。
taoyuming 2017-08-16
  • 打赏
  • 举报
回复
引用 1 楼 shoppo0505 的回复:
你先要找TemplateField ,再找里面的checkbox
还麻烦您提供一下示例代码,谢谢。
shoppo0505 2017-08-16
  • 打赏
  • 举报
回复
你先要找TemplateField ,再找里面的checkbox

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧