C# 使用单个事件处理程序asp.net处理网格中的多个删除事件

C# 使用单个事件处理程序asp.net处理网格中的多个删除事件,c#,asp.net,telerik-grid,eventhandler,radajaxmanager,C#,Asp.net,Telerik Grid,Eventhandler,Radajaxmanager,我有两个包含delete按钮的网格,我使用的是RadAjaxManager,它将从客户端向服务器端发出ajax请求,其中包含事件处理程序,该事件处理程序将调用我的delete事件,如下所示: <telerik:RadAjaxManager ID="RadAjaxManager2" runat="server" meta:resourcekey="RadAjaxManager1Resource1" OnAjaxRequest="RadAjaxManager2_AjaxRequest">

我有两个包含delete按钮的网格,我使用的是RadAjaxManager,它将从客户端向服务器端发出ajax请求,其中包含事件处理程序,该事件处理程序将调用我的delete事件,如下所示:

<telerik:RadAjaxManager ID="RadAjaxManager2" runat="server" meta:resourcekey="RadAjaxManager1Resource1" OnAjaxRequest="RadAjaxManager2_AjaxRequest">
                <AjaxSettings>
                    <telerik:AjaxSetting AjaxControlID="RadAjaxManager2">
                        <UpdatedControls>
                            <telerik:AjaxUpdatedControl ControlID="Grid1" />
                            <telerik:AjaxUpdatedControl ControlID="Grid2" />
                        </UpdatedControls>
                    </telerik:AjaxSetting>
                </AjaxSettings>
            </telerik:RadAjaxManager>

 <telerik:RadGrid ID="Grid1" runat="server">
  ---
  ---
  <telerik:GridTemplateColumn HeaderText="Action" UniqueName="Action" HeaderStyle-Width="130px">
                                        <ItemTemplate>
                                     <asp:ImageButton runat="server" ID="Remove1" Text="Delete" OnClientClick='<%# Eval("Id", "javascript:return DeleteData(\"{0}\");") %>' />
                                        </ItemTemplate>
                                    </telerik:GridTemplateColumn>

 <telerik:RadGrid ID="Grid2" runat="server">
  ---
  ---
  <telerik:GridTemplateColumn HeaderText="Action" UniqueName="Action" >
                                        <ItemTemplate>
                                     <asp:ImageButton runat="server" ID="Remove2" Text="Delete" OnClientClick='<%# Eval("Id", "javascript:return DeleteData(\"{0}\");") %>' />
                                        </ItemTemplate>
                                    </telerik:GridTemplateColumn>



 function DeleteData(Id) {
   var ajaxManager = null;
   var action = 'Remove';
   ajaxManager = $find("ctl00_cphMain_RadAjaxManager2");
   var arg = action + "," + Id; //Remove,1(1 indicates id of record to remove from grid)
   ajaxManager.ajaxRequest(arg);This line will fire below method.
  }



public event EventHandler RemoveEvent;
protected void RadAjaxManager2_AjaxRequest(object sender, AjaxRequestEventArgs e)
        {
            var argument = (e.Argument);
            var stringArray = argument.Split(",".ToCharArray());//[0]="Remove",[1]=1
            if (stringArray[0] == "Remove")
            {
                RemoveEvent(stringArray[1], null);
            }
        }

这里的问题是这两个事件都在调用,但我只想在单击Remove1和Remove2按钮时调用单独的删除事件。

您只需使用RadGrid_ItemCommand并使用del button传递命令参数,然后更改这两个事件的命令名remove her的示例代码

<telerik:GridTemplateColumn HeaderText="Actions">
                                        <ItemTemplate>
                                            <asp:ImageButton ID="Button3" Style="width: 14px" Height="14px" ImageUrl="~/Images/Erase.png" runat="server" Text="Delete1" OnClientClick="return confirm('Are you sure you want to delete this item?');" CommandName="Delete1" CommandArgument='<%# Eval("Pid") %>' />
                                            &nbsp &nbsp
 <asp:ImageButton ID="Button3" Style="width: 14px" Height="14px" ImageUrl="~/Images/Erase.png" runat="server" Text="Delete2" OnClientClick="return confirm('Are you sure you want to delete this item?');" CommandName="Delete2" CommandArgument='<%# Eval("Pid") %>' />

                                        </ItemTemplate>
                                    </telerik:GridTemplateColumn>



    protected void RadGrid1_ItemCommand(object sender, GridCommandEventArgs e)
{
    if (e.CommandName == "Delete1")
    {

    }
if (e.CommandName == "Delete2")
    {

    }

}

 
受保护的void RadGrid1_ItemCommand(对象发送方,GridCommandEventArgs e)
{
如果(e.CommandName==“Delete1”)
{
}
如果(e.CommandName==“Delete2”)
{
}
}

您不需要订阅代码隐藏中的事件,即不需要
此.RemoveEvent+=
。而是编写一个名为
removecord(buttonId,recordId)
的方法。我已按如下步骤解释了这种方法

  • 首先更改
    OnClientClick的标记。请注意,我们将把要删除的记录的Id以及正在单击的按钮的服务器端Id传递给JavaScript函数
    DeleteData

    OnClientClick='<%# Eval("Id", "DeleteData('{0}', 'Remove1'); return false;") %>'   
    
    OnClientClick='<%# Eval("Id", "DeleteData('{0}', 'Remove2'); return false;") %>'
    
  • 在代码隐藏中,包括一个
    RemoveRecord
    方法,不需要像在原始代码中那样创建事件处理程序。因此,您应该从原始代码中删除以下方法:
    Remove1\u单击
    Remove2\u单击
    ,并删除订阅单击事件的
    页面中的代码

    protected void RadAjaxManager2_AjaxRequest(object sender, AjaxRequestEventArgs e)
    {
     var stringArray = e.Argument.Split(",".ToCharArray());//[0]="Remove1" or "Remove2",[1]=id of record to delete
     RemoveRecord( stringArray[0], stringArray[1]);
    }
    
    //the method below will delete data
    private void RemoveRecord( buttonId, recordId) 
    {
     if(buttonId== "Remove1")
      {
        //code to delete record with id of recordId
      } 
     else if ( buttonId == "Remove2")
      {
        //code to delete record with id of recordId
      }
    }
    
  • 另一种方法

    如果必须在父页面中添加
    RadAjaxManager2\u AjaxRequest
    ,并在子页面中删除方法,则在标题中提到的适当位置添加以下代码。但请注意,上述方法中提到的标记更改和JavaScript函数更改也适用于此方法

    在家长页面(就在课堂之外)

    此外,在同一父页面中,将方法
    RadAjaxManager2\u AjaxRequest
    更改为下面给出的内容

    在父页面中(更改此现有方法)

    在子页面中(更改现有方法)


    很抱歉,我只能在radajaxmanager中使用现有代码。因此,您能否根据这一点给出解决方案?实际上,我有一个页面是ParentPage.cs,这个Onajaxrequest位于ParentPage.cs页面上。这个网格和我的Remove1和Remove2方法位于Abc.aspx上,我从ParentPage继承了这个abx.cs页面:public partial class Abc:ParentPage那么如何从ParentPage.cs页面调用此RemoveRecord?将C代码放入父页面,因为方法
    RadAjaxManager2\u AjaxRequest
    位于父页面中。网格可以位于子页面上。是。这两种方法都应该在父页面-
    RemoveRecord
    中,也应该在
    RadAjaxManager2_AjaxRequest
    中。但如果将
    RadAjaxManager2_AjaxRequest
    移到子页面,则将所有C代码都放在子页面中。
    function DeleteData(Id, buttonId) {
      var ajaxManager = null;
      ajaxManager = $find("<%=RadAjaxManager2.ClientID%>");
      var arg = buttonId + "," + Id; //Remove1,1 (1 indicates id of record to remove from grid)
      ajaxManager.ajaxRequest(arg);//This line will fire below method.
    }
    
    protected void RadAjaxManager2_AjaxRequest(object sender, AjaxRequestEventArgs e)
    {
     var stringArray = e.Argument.Split(",".ToCharArray());//[0]="Remove1" or "Remove2",[1]=id of record to delete
     RemoveRecord( stringArray[0], stringArray[1]);
    }
    
    //the method below will delete data
    private void RemoveRecord( buttonId, recordId) 
    {
     if(buttonId== "Remove1")
      {
        //code to delete record with id of recordId
      } 
     else if ( buttonId == "Remove2")
      {
        //code to delete record with id of recordId
      }
    }
    
    public class RemoveEventArgs : EventArgs
    {
    public RemoveEventArgs ( string buttonId, string recordId)
    {
       this.ButtonId = buttonId;
       this.RecordId = recordId;
    }
        public string ButtonId {get;set;}
        public string RecordId {get;set;}
    }
    
     protected void RadAjaxManager2_AjaxRequest(object sender, AjaxRequestEventArgs e)
     {
                var stringArray = e.Argument.Split(",".ToCharArray());//[0]="Remove1",[1]=1 OR [0]="Remove2", [1] = 212
                if (stringArray[0] == "Remove1"  || stringArray[0] == "Remove2")
                {
                     if(RemoveEvent!=null) 
                     {
                       RemoveEvent(this, new RemoveEventArgs(stringArray[0], stringArray[1]));
                     }
                }
     }
    
    protected void Remove1_Click(object sender, RemoveEventArgs obj)
      {
        if( obj!=null && obj.ButtonId == "Remove1") 
        {
          string recordId = obj.RecordId;
          //write your code for deleting
    
    
        }
      }
    protected void Remove2_Click(object sender, RemoveEventArgs obj)
     {
      if( obj!=null && obj.ButtonId == "Remove2") 
        {
          string recordId = obj.RecordId;
          //write your code for deleting
    
    
        }
     }