Textbox对象无法使用find控件创建

时间:2015-04-16 11:20:14

标签: asp.net

在我的代码中有一个gridview1。点击编辑按钮获取错误 你调用的对象是空的。我的所有列都是模板fields.id是datakey。我也可以从数据库中获取数据。这里有什么问题。 ?

  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页面。

<asp:TemplateField HeaderText="Name">
                <EditItemTemplate>
                    <asp:TextBox ID="name_TextBox" runat="server" Text='<%# Eval("st_name") %>'></asp:TextBox>
                </EditItemTemplate>
                <ItemTemplate>
                    <asp:Label ID="Label3" runat="server" Text='<%# Eval("st_name") %>'></asp:Label>
                </ItemTemplate>
            </asp:TemplateField>

.
.
.
.
<asp:TemplateField HeaderText="Action">
                <EditItemTemplate>
                    <asp:Button ID="Button3" runat="server" Text="Update" />
                    <asp:Button ID="Button4" runat="server" Text="Cancel" />
                </EditItemTemplate>
                <ItemTemplate>
                    <asp:Button ID="Edit_Button" runat="server" Text="Edit" OnClick="Edit_Button_Click" />
                    <asp:Button ID="Button2" runat="server" Text="Delete" />
                </ItemTemplate>
            </asp:TemplateField>

1 个答案:

答案 0 :(得分:1)

没有您的客户端代码(html),这有点难。

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

您是否忘记将ID="name_TextBox"的文本框放在EditItemTemplate中?

像那样:

   <EditItemTemplate> 
    <asp:TextBox id="name_TextBox"><asp:TextBox>
   </EditItemTemplate>

更新的答案

问题是您无法在Gridview_RowEditing中访问控件。控件将在此事件之后呈现(如果我的内存仍然可靠:这一次我转移到MVC )。 如果您管理此事件,则必须绑定gridview,例如:

 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();
 }
  

如果要访问控件,可以使用 gridView_rowDataBound()事件。