停止从ASP.Net中的GridView_RowCommand触发GridView_RowUpdating

时间:2012-09-04 10:19:45

标签: asp.net gridview rowcommand

我有一个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

提前致谢。

3 个答案:

答案 0 :(得分: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" />

答案 1 :(得分: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")
       {
       }
    }
}

答案 2 :(得分:0)

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

e.g。

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

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


    }