问题描述
我使用一个GridView。当我点击编辑按钮,更新和取消按钮出现。经修改它们来自EditItemTemplate中的文本框中的值,新值不显示在事件处理程序rowupdating(),而不是我得到当网页被渲染中出现的值。我如何抓住这些文本框的新值,并进一步进行?这里是code。
< ASP:GridView控件ID =GridView1=服务器AutoGenerateEditButton属性=真的AutoGenerateColumns =假
AutoGenerateDeleteButton =真onrowediting =GridView1_RowEditing
onrowupdating =GridView1_RowUpdating>
<列>
< ASP:的TemplateField>
<的ItemTemplate>
< ASP:标签ID =lblId=服务器文本='<%#的eval(ID)%>'>< / ASP:标签>
< / ItemTemplate中>
< EditItemTemplate中>
< ASP:文本框ID =txtId=服务器文本='<%#的eval(ID)%>'>< / ASP:文本框>
< / EditItemTemplate中>
< / ASP:的TemplateField>
< ASP:的TemplateField>
<的ItemTemplate>
< ASP:标签ID =lblName=服务器文本='<%#的eval(cpuname)%>'>< / ASP:标签>
< / ItemTemplate中>
< EditItemTemplate中>
< ASP:文本框ID =改为txtName=服务器文本='<%#的eval(cpuname)%>'>< / ASP:文本框>
< / EditItemTemplate中>
< / ASP:的TemplateField>
< ASP:的TemplateField>
<的ItemTemplate>
< ASP:标签ID =lblStatus=服务器文本='<%#的eval(状态)%>'>< / ASP:标签>
< / ItemTemplate中>
< EditItemTemplate中>
< ASP:文本框ID =txtStatus=服务器文本='<%#的eval(状态)%>'>< / ASP:文本框>
< / EditItemTemplate中>
< / ASP:的TemplateField>
< /列>
< / ASP:GridView控件>
保护无效GridView1_RowEditing(对象发件人,GridViewEditEventArgs E)
{
GridView1.EditIndex = e.NewEditIndex;
}
保护无效GridView1_RowUpdating(对象发件人,GridViewUpdateEventArgs E)
{
文本框文本=(文本框)GridView1.Rows [e.RowIndex] .FindControl(改为txtName);
}
您应该使用这两种方式结合在这里。即绑定,而不是评估和演示:
< ASP:文本框ID =txtId=服务器文本='<%#绑定(ID)%>'>< / ASP :文本框>
下面是链接到文件:
下面是我的code背后:
保护无效的Page_Load(对象发件人,EventArgs的)
{
数据表表=新的DataTable();
table.Columns.Add(数据);
的for(int i = 0;我小于20;我++)
table.Rows.Add(新对象[] {I});
GridView1.DataSource =表;
如果//&LT(的IsPostBack!);<<<<<<<<<<<
GridView1.DataBind();
}
保护无效GridView1_RowEditing(对象发件人,GridViewEditEventArgs E)
{
GridView1.EditIndex = e.NewEditIndex;
GridView1.DataBind();
}
保护无效GridView1_RowUpdating(对象发件人,GridViewUpdateEventArgs E)
{
文本框文本=(文本框)GridView1.Rows [e.RowIndex] .FindControl(txtId);
}
I am using a gridview. When I click on the edit button the update and cancel button appear.Upon modifying the values in textbox which come from EditItemTemplate , the new values dont show in the event handler rowupdating(), instead I get the values which appear when the page was rendered. How do I grab the new values from these textboxes and proceed further?Here is the code.
<asp:GridView ID="GridView1" runat="server" AutoGenerateEditButton="true" AutoGenerateColumns="false"
AutoGenerateDeleteButton="true" onrowediting="GridView1_RowEditing"
onrowupdating="GridView1_RowUpdating">
<Columns>
<asp:TemplateField>
<ItemTemplate>
<asp:Label ID="lblId" runat="server" Text='<%# Eval("id") %>'></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="txtId" runat="server" Text='<%# Eval("id") %>'></asp:TextBox>
</EditItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
<ItemTemplate>
<asp:Label ID="lblName" runat="server" Text='<%# Eval("cpuname") %>'></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="txtName" runat="server" Text='<%# Eval("cpuname") %>'></asp:TextBox>
</EditItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
<ItemTemplate>
<asp:Label ID="lblStatus" runat="server" Text='<%# Eval("status") %>'></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="txtStatus" runat="server" Text='<%# Eval("status") %>'></asp:TextBox>
</EditItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)
{
GridView1.EditIndex = e.NewEditIndex;
}
protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
TextBox text = (TextBox)GridView1.Rows[e.RowIndex].FindControl("txtName");
}
You should use the two way binding here. I.e. Bind instead of Eval:
<asp:TextBox ID="txtId" runat="server" Text='<%# Bind("id") %>'></asp:TextBox>
Here is the link to documentation:
Data-Binding Expressions Overview
Here is my code behind:
protected void Page_Load(object sender, EventArgs e)
{
DataTable table = new DataTable();
table.Columns.Add("Data");
for(int i = 0; i < 20; i++)
table.Rows.Add(new object[] { i });
GridView1.DataSource = table;
if(!IsPostBack) // <<<<<<<<<<<<
GridView1.DataBind();
}
protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)
{
GridView1.EditIndex = e.NewEditIndex;
GridView1.DataBind();
}
protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
TextBox text = (TextBox)GridView1.Rows[e.RowIndex].FindControl("txtId");
}
这篇关于为什么GridView的RowUpdating事件无法捕捉文本框的新的价值观?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!