本文介绍了为什么GridView的RowUpdating事件无法捕捉文本框的新的价值观?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用一个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 :文本框>
 

下面是链接到文件:

数据绑定防爆pressions概述

下面是我的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事件无法捕捉文本框的新的价值观?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

11-01 13:04