C# gridview的findcontrol中的空值,项模板混乱
我有gridview的模板字段,如下所示:C# gridview的findcontrol中的空值,项模板混乱,c#,asp.net,.net,visual-studio-2010,C#,Asp.net,.net,Visual Studio 2010,我有gridview的模板字段,如下所示: <asp:TemplateField ShowHeader="False"> <EditItemTemplate> <asp:TextBox ID="txtEmpName" runat="server"></asp:TextBox> <asp:TextBox ID="txtBonus" runat="server">
<asp:TemplateField ShowHeader="False">
<EditItemTemplate>
<asp:TextBox ID="txtEmpName" runat="server"></asp:TextBox>
<asp:TextBox ID="txtBonus" runat="server"></asp:TextBox>
<asp:TextBox ID="txtID" runat="server"></asp:TextBox>
</EditItemTemplate>
<EditItemTemplate>
<asp:LinkButton ID="LinkButton1" runat="server" CausesValidation="True"
CommandName="Update" Text="Update"></asp:LinkButton>
<asp:LinkButton ID="LinkButton2" runat="server" CausesValidation="False"
CommandName="Cancel" Text="Cancel"></asp:LinkButton>
</EditItemTemplate>
<ItemTemplate>
<asp:LinkButton ID="LinkButton1" runat="server" CausesValidation="False"
CommandName="Edit" Text="Edit"></asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
但每次调试代码时,它都会在txtName
中显示null
值
有什么问题吗
完整事件代码:
protected void gv_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
try
{
TextBox txtUname = (TextBox)gv.Rows[e.RowIndex].FindControl("txtEmpName");
float bonus = float.Parse(gv.DataKeys[e.RowIndex].Values["bonus"].ToString());
try
{
cmd = new SqlCommand("update emp set empName=@eName");
cmd.parameters.AddParametersWithValue("@eName",txtUname.Text);
cmd.ExecuteNonQuery();
}
catch (Exception ex)
{
}
}
catch (Exception ex)
{
}
}
编辑
protected void Page_Load(object sender, EventArgs e)
{
con = new SqlConnection("Data Source=192.168.51.71;Initial Catalog=WebBasedNewSoft;User ID=sa;password=prabhu");
BindGrid();
}
private void BindGrid()
{
try
{
da = new SqlDataAdapter("select * from emp", con);
DataSet ds = new DataSet();
da.Fill(ds);
GridView1.DataSource = ds.Tables[0];
GridView1.DataBind();
}
catch (Exception ex)
{
}
}
protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
int index = GridView1.EditIndex;
GridViewRow row = GridView1.Rows[index];
string eName = ((TextBox)row.Cells[2].Controls[0]).Text.ToString().Trim();
try
{
con.Open();
cmd = new SqlCommand("update emp set empName='"+eName+"'",con);
cmd.ExecuteNonQuery();
con.Close();
}
catch(Exception ex)
{
}
}
protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)
{
GridView1.EditIndex = e.NewEditIndex;
BindGrid();
}
}
参考此
还可以将您的代码放入编辑命令。可能是RowEditing或RowCommand您能显示完整的事件功能吗???@amitsigh是的,当然,请稍等。@amitshigh粘贴了函数请不要使用两个编辑模板使用单个..像这样
但这显示了除了编辑链接按钮之外的文本框我应该做什么来从我按下编辑链接后出现的每个字段的默认文本框中获取值?无。请参阅此代码。您只需设置EditIndex并再次绑定网格,就可以将值放入文本框中。确保已将绑定设置为控件。。。。受保护的无效GridView1_RowEditing(对象发送者,GridViewEditEventArgs e){GridView1.EditIndex=e.NewEditIndex;showgrid();}先生,控件现在正在获取值,但当我在文本框中编辑值并按下更新按钮时,页面会刷新并显示旧值。您是否将更新后的值保存到数据库中?如果是,请重新绑定网格。如果没有,将值更改为您使用的数据源,然后重新绑定网格。先生,请参阅我的编辑,我已经完成了,这是我的完整服务器端代码
protected void Page_Load(object sender, EventArgs e)
{
con = new SqlConnection("Data Source=192.168.51.71;Initial Catalog=WebBasedNewSoft;User ID=sa;password=prabhu");
BindGrid();
}
private void BindGrid()
{
try
{
da = new SqlDataAdapter("select * from emp", con);
DataSet ds = new DataSet();
da.Fill(ds);
GridView1.DataSource = ds.Tables[0];
GridView1.DataBind();
}
catch (Exception ex)
{
}
}
protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
int index = GridView1.EditIndex;
GridViewRow row = GridView1.Rows[index];
string eName = ((TextBox)row.Cells[2].Controls[0]).Text.ToString().Trim();
try
{
con.Open();
cmd = new SqlCommand("update emp set empName='"+eName+"'",con);
cmd.ExecuteNonQuery();
con.Close();
}
catch(Exception ex)
{
}
}
protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)
{
GridView1.EditIndex = e.NewEditIndex;
BindGrid();
}
}