在我的代码中有一个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>
答案 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()事件。