Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 为什么GridView行更新事件不捕获textbox的新值?_Asp.net_.net_Gridview - Fatal编程技术网

Asp.net 为什么GridView行更新事件不捕获textbox的新值?

Asp.net 为什么GridView行更新事件不捕获textbox的新值?,asp.net,.net,gridview,Asp.net,.net,Gridview,我使用的是gridview。当我点击编辑按钮时,更新和取消按钮出现。 在修改来自EditItemTemplate的textbox中的值时,新值不会显示在事件处理程序RowUpdate()中,而是显示页面呈现时显示的值。如何从这些文本框中获取新值并继续? 这是代码 <asp:GridView ID="GridView1" runat="server" AutoGenerateEditButton="true" AutoGenerateColumns="false" Auto

我使用的是gridview。当我点击编辑按钮时,更新和取消按钮出现。 在修改来自EditItemTemplate的textbox中的值时,新值不会显示在事件处理程序RowUpdate()中,而是显示页面呈现时显示的值。如何从这些文本框中获取新值并继续? 这是代码

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

受保护的无效GridView1_行编辑(对象发送方,GridViewEditEventArgs e)
{
GridView1.EditIndex=e.NewEditIndex;
}
受保护的无效GridView1_行更新(对象发送方,GridViewUpdateEventArgs e)
{
TextBox text=(TextBox)GridView1.Rows[e.RowIndex].FindControl(“txtName”);
}

您应该在此处使用双向绑定。即绑定而不是评估:

<asp:TextBox ID="txtId" runat="server" Text='<%# Bind("id") %>'></asp:TextBox>

以下是我的代码:

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");
    }
受保护的无效页面加载(对象发送方,事件参数e)
{
DataTable=新的DataTable();
表.列.添加(“数据”);
对于(int i=0;i<20;i++)
table.Rows.Add(新对象[]{i});
GridView1.DataSource=表格;
如果(!IsPostBack)//请尝试以下操作


TextBox text=(TextBox)GridView1.Rows[e.EditIndex].FindControl(“txtName”);
如果您编写了在页面加载中绑定网格的代码,请确保它包含在
If(!IsPostBack)

我希望它确实有帮助

这最终对我有用

protected void MyGridView_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
    string value = e.NewValues[0].ToString();
    // ...
}

我跟随柏拉图,这是工作

if(!IsPostBack)
放在
数据绑定()之前,

并插入
GridView1.DataBind()
GridView1.EditIndex=e.NewEditIndex;
GridView1\u RowEditing

没有。我尝试了这个。它没有帮助。我仍然得到渲染的值而不是修改的值。Net 4.:)…我已经尝试了很多次,现在我像这样被困了大约12个小时。我想知道出了什么问题。只是好奇地想知道e是什么我想我确实做错了,因为你在每次加载页面时都调用绑定。这应该只做一次。检查我发布的代码,它在这里工作正常。此外,应该使用绑定表达式。@柏拉图让我们知道我也遇到了同样的问题。.编辑:你们中有人解决了这个问题吗。?如果(!IsPostBack)BindDataGrid()用于提供旧值,而不是在RowUpdate事件期间提供旧值的更新值,而不是在RowUpdate事件期间提供更新值