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),这有点困难。
但正如您所说,您使用模板化列。
你没有忘记把你的文本框和
像这样:
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.