更新事件未获取新值

本文关键字:新值 获取 事件 更新 | 更新日期: 2023-09-27 18:19:40

我的更新命令有问题。它找到了文本框控件,但没有输入新的值,我不知道为什么。我已经做了一些教程,我还没走多远。在我的Update事件中有一个名为Pages的类,它会更新文本,如果我手动添加文本值,它就会起作用。问题是从我的文本框中访问最新更新的文本。

    <asp:GridView ID="CustomGridView1" runat="server" AutoGenerateColumns="false" DataKeyNames="Name" AutoGenerateSelectButton="true"
    ShowHeaderWhenEmpty="True" ShowFooter="true" AutoGenerateEditButton="true" OnDataBound="CustomGridView_DataBound"
    OnRowEditing="CustomGridView_CancelEditCommand" OnRowCommand="CustomGridView1_RowCommand" 
    OnLoad="CustomGridView1_Load" OnRowUpdated="CustomGridView1_RowUpdated" OnRowUpdating="CustomGridView1_RowUpdating" OnRowCancelingEdit="CustomGridView1_RowCancelingEdit"
     ShowHeader="true">
            <Columns>
        <asp:TemplateField HeaderText="Page Name" HeaderStyle-HorizontalAlign="Left">
            <ItemTemplate>
                <%# Eval("Name") %>
            </ItemTemplate>
            <EditItemTemplate>
                <asp:TextBox ID="Name" runat="server" Text='<%# Bind("Name") %>'></asp:TextBox>
            </EditItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText="Path" HeaderStyle-HorizontalAlign="Left">
            <ItemTemplate>
                <%# Eval("Path") %>
            </ItemTemplate>
            <EditItemTemplate>                    
                <asp:TextBox ID="Path" runat="server" Text='<%# Bind("Path") %>'></asp:TextBox>
            </EditItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText="Route Value" HeaderStyle-HorizontalAlign="Left">
            <ItemTemplate>
                <%# Eval("RouteValue") %>
            </ItemTemplate>
            <EditItemTemplate>
                <asp:TextBox ID="RouteValue" runat="server" Text='<%# Bind("RouteValue") %>'></asp:TextBox>
            </EditItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText="RegExp" HeaderStyle-HorizontalAlign="Left">
            <ItemTemplate>
                <%# Eval("RegExp") %>
            </ItemTemplate>
            <EditItemTemplate>
                <asp:TextBox ID="RegExp" runat="server" Text='<%# Bind("RegExp") %>'></asp:TextBox>
            </EditItemTemplate>
        </asp:TemplateField>
    </Columns>        
</asp:GridView>

这里的这一部分没有触发,我更喜欢答案中的RowUpdated方法。我的Updated Event没有触发是有原因的吗

protected void CustomGridView1_RowUpdated(object sender, GridViewUpdatedEventArgs e)
{
    if (e.Exception == null && e.AffectedRows == 1)
    {
        Pages pages = new Pages();
        SystemPage SySPage = new SystemPage();
        SySPage.Name = e.NewValues[0].ToString();
        SySPage.Path = e.NewValues[1].ToString();
        SySPage.RouteValue = e.NewValues[2].ToString();
        SySPage.RegExp = e.NewValues[3].ToString();
        pages.Update(SySPage, xmlFile);
        CustomGridView1.EditIndex = -1;
        BindData();
    }
}
protected void CustomGridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
    for (int i = 0; i < CustomGridView1.Columns.Count - 1; i++)
    {
        DataControlFieldCell cell = CustomGridView1.Rows[CustomGridView1.EditIndex].Cells[i] as DataControlFieldCell;
        CustomGridView1.Columns[i].ExtractValuesFromCell(e.Keys, cell, DataControlRowState.Edit, false);
    }
    Pages pages = new Pages();
    SystemPage SysPage = new SystemPage();
    SysPage.Name = e.NewValues[0].ToString();
    SysPage.Path = e.NewValues[1].ToString();
    SysPage.RouteValue = e.NewValues[2].ToString();
    SysPage.RegExp = e.NewValues[3].ToString();
    pages.Update(SysPage, xmlFile);
    lblInsert.Text = e.NewValues[3].ToString();
    CustomGridView1.EditIndex = -1;
    BindData();
}

更新事件未获取新值

要在更新后获得值,您应该处理GridViews RowUpdated事件http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.gridview.rowupdated.aspx而不是RowUpdating。

<asp:GridView OnRowUpdated="GridViewUpdatedEventHandler" />

编辑GridView中的更新字段由GridViewUpdatedEventArgs中的属性NewValues公开,该属性作为RowUpdated事件的参数公开。

按要求编码我无法测试此代码,因为我不在开发电脑附近。将以下方法添加到代码文件中,并将GridViewsOnRowUpdated属性设置为指向该方法。

protected void CustomGridView1_RowUpdated(object sender, GridViewUpdatedEventArgs e)
    {
        if ((e.Exception == null) && (e.AffectedRows == 1))
        {
            Pages pages = new Pages();
            SystemPage SysPage = new SystemPage();
            SysPage.Name = e.NewValues[0].ToString();
            SysPage.Path = e.NewValues[1].ToString();
            SysPage.RouteValue = e.NewValues[2].ToString(); ;
            SysPage.RegExp = e.NewValues[3].ToString(); ;
            pages.Update(SysPage, xmlFile);
            CustomGridView1.EditIndex = -1;
            BindData();
        }
        else
            // TO DO: ALERT the user the update errored
    }