积极答复者
GridView动态生成模板列,在后台用FindControl找不到该列所含控件

问题
-
动态生成模板列代码:
TemplateField templateField = new TemplateField();
templateField.HeaderTemplate = new chkHeader(gridView.ID);
templateField.ItemTemplate = new chkItem();
gridView.Columns.Add(templateField);项模板定义:
public class chkItem : Control, ITemplate
{#region ITemplate 成员
public void InstantiateIn(Control container)
{
CheckBox chk = new CheckBox();
chk.ID = "chkItem";
container.Controls.Add(chk);
}#endregion
}后台FindControl代码:
for (int i = 0; i < GridView.Rows.Count; i++)
{
GridViewRow gridViewRow = GridView.Rows[i];
if (gridViewRow.RowType == DataControlRowType.DataRow)
{
//取出这一行的复选框,如果复选框选中,删除这一行
Control control = gridViewRow.Cells[0].FindControl("chkItem");......
答案
全部回复
-
你好!
模板列中的控件在绑定完成后,模板列中的 ID 会按它在 GridView 中的层次结构重新生成,如:GridView1$ctl03$TextBox2。所以你使用 FindControl 找不到。
你上述的代码应该放到 RowDataBound 事件中。
如下:
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) { if (e.Row.RowType == DataControlRowType.DataRow) { TextBox c = (TextBox)e.Row.FindControl("txtName"); } }
知识改变命运,奋斗成就人生!- 已标记为答案 KeFang Chen 2010年4月14日 3:35
- 取消答案标记 m s 2010年4月14日 8:00