1

我有一个 GridView 控件,并且启用了编辑功能。

我的编辑和更新按钮都是 LinkBut​​tons,如下所示:

<asp:LinkButton ID="buttonEdit" runat="server" Text="Edit" CausesValidation="false"
                            CommandName="Edit" />

<asp:LinkButton ID="buttonUpdate" runat="server" CausesValidation="True"
                            CommandName="Update" Text="Update" ValidationGroup="Edit" />

当用户单击编辑按钮时,其中一列有一个允许编辑记录的文本框:

<EditItemTemplate>
    <asp:TextBox ID="textBoxEdit" runat="server" Text='<%#Eval("Name") %>' />
    <asp:Label ID="labelEditWarning" CssClass="error" runat="server" Text="Name already exists" Visible="false" />
</EditItemTemplate>

当用户单击更新链接按钮时,网格的 RowCommand 事件会触发。在这里,我想对数据库中的现有记录进行验证。如果验证失败,那么如何阻止网格的 RowUpdating 事件触发但似乎没有办法做到这一点!?

protected void gridName_RowCommand(object sender, GridViewCommandEventArgs e)
{
    if (e.CommandName.Equals("Edit"))
    {
        //Perform validation & cancel update if the validation fails.
    }
}

protected void gridName_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
     //Update my record. But I don't want this to fire if my validation fails in 
     //the row command event.
}

任何人都可以帮忙吗?

我正在使用 ASP.Net 4.0

提前致谢。

4

3 回答 3

1

将“buttonUpdate”上的 CommandName 从“Update”更改为“rename”。这将停止触发 RowUpdating 事件。然后,您可以在 RowCommand 事件中添加一些代码来处理记录的验证和更新,例如

protected void gridName_RowCommand(object sender, GridViewCommandEventArgs e)
{
    if (e.CommandName.Equals("rename"))
    {
        if(validation == true)
        {
          DatabaseDataContext data = new DatabaseDataContext();

          string rowID = e.CommandArguement.ToString();
          var rowToUpdate = data.TableOne.Where(d => d.ID.ToString() == rowID);
          rowToUpdate.Name = newName;

          data.SubmitChanges();
        }
        else
        {
          //Set error label
        }
    }
}

您还需要将 Button 的 CommandArguement 更改为:

<asp:LinkButton ID="buttonUpdate" runat="server" CausesValidation="True"
                        CommandName="Update" CommandArguement='<%# Eval("ID") %>' Text="Update" ValidationGroup="Edit" />
于 2012-09-04T12:36:53.680 回答
0

您可以在 gv_RowCommand 事件中更新

示例代码:

protected void gridName_RowCommand(object sender, GridViewCommandEventArgs e)
{
    if (e.CommandName=="Edit")
    {
        //Perform validation & cancel update if the validation fails.
    }

   if(your validtaion successconditon flag set true)
    {    
       if (e.CommandName == "Update")
       {
       }
    }
}
于 2012-09-04T11:33:50.667 回答
0

您还可以使用 GridViewUpdateEventArg 的 Cancel 属性取消更新。

例如

   protected void GridView_RowUpdating(object sender, GridViewUpdateEventArgs e)
    {
      // Your validation logic goes here...

     // If validation logic fails...
     e.Cancel = true;


    }
于 2013-08-03T05:21:55.310 回答