关于asp.net:Textbox对象无法使用find控件创建

Textbox object is not able to create using find control

本问题已经有最佳答案,请猛点这里访问。

在我的代码中有一个GridView1。单击"编辑"按钮时出错对象引用未设置为对象的实例。我的所有列都是模板字段。ID是数据键。我也能从数据库中获取数据。这里怎么了。?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
  protected void Edit_Button_Click(object sender, EventArgs e)
    {
        GridViewRow gr = (GridViewRow)((Button)sender).NamingContainer;
        int id = Convert.ToInt32(GridView1.DataKeys[gr.RowIndex].Value);

        cmd = new SqlCommand("select * from students where id = '"+id+"'",con);
        SqlDataAdapter da = new SqlDataAdapter(cmd);
        DataTable dt = new DataTable();
        da.Fill(dt);

        TextBox name = (TextBox)GridView1.Rows[gr.RowIndex].FindControl("name_TextBox");



        name.Text ="bhavin";
}

这是我的ASPX页面。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
                <EditItemTemplate>
                    '></asp:TextBox>
                </EditItemTemplate>
                <ItemTemplate>
                    '></asp:Label>
                </ItemTemplate>
            </asp:TemplateField>

.
.
.
.

                <EditItemTemplate>
                   
                   
                </EditItemTemplate>
                <ItemTemplate>
                   
                   
                </ItemTemplate>
            </asp:TemplateField>


没有客户端代码(HTML),这有点困难。

但正如您所说,您使用模板化列。

你没有忘记把你的文本框和ID="name_TextBox"放在EditItemTemplate中吗?

像这样:

1
2
3
   <EditItemTemplate>
   
   </EditItemTemplate>

更新答案

问题是您无法访问GridView"行编辑"中的控件。控件将在此事件之后呈现(如果我的内存仍然可靠:这样的时间我移到了MVC)。如果管理此事件,则必须绑定GridView,例如:

1
2
3
4
5
6
7
8
 protected void YourGridView_PageIndexChanging(object sender, GridViewPageEventArgs e)
 {
   //you tell Gridview which row gonna be editing :
   YourGridView.PageIndex = e.NewPageIndex;
   //then you Bind data to the GridView (as you bind data as you did on load for instance)
   YourGridView.DataSource = YourDataSetOrDataTable
   YourGridView.DataBind();
 }

If you want to access a control, you can use gridView_rowDataBound() event instead.