2016-02-12 1 views
1

У меня есть две сетки, которые содержат кнопку удаления, и я использую RadAjaxManager, который будет запускать запрос ajax от клиента стороне на стороне сервера OnajaxRequest, которые содержат обработчики событий и этот обработчик событий будем называть мое Удалить событие, как показано ниже:Обработать несколько событий удаления из сетки с помощью обработчиков одиночных событий asp.net

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

После этого он будет называть это:

protected void Page_Load(object sender, EventArgs e) 
     { 
      this.RemoveEvent += Remove1_Click; 
      this.RemoveEvent += Remove2_Click; 
      if (!IsPostBack) 
      { 
      } 
     } 

protected void Remove1_Click(object sender, object obj) 
     { 
     } 
protected void Remove2_Click(object sender, object obj) 
     { 
     } 

Проблема здесь как это события вызова, но я просто хочу, чтобы назвать отдельные Удалять события на нажатие Remove 1 и Удалить2.

Может ли кто-нибудь помочь мне с этим?

ответ

1

Вам не нужно, чтобы подписаться на события в вашей code- позади нет необходимости this.RemoveEvent+=. Вместо этого напишите один метод под названием RemoveRecord(buttonId, recordId). Я объяснил этот подход поэтапно, как показано ниже.

  1. Сначала измените разметку на OnClientClick. Обратите внимание, что мы будем передавать идентификатор удаляемой записи, а также идентификатор на стороне сервера кнопки, нажатой на функцию JavaScript DeleteData.

    OnClientClick='<%# Eval("Id", "DeleteData('{0}', 'Remove1'); return false;") %>' 
    
    OnClientClick='<%# Eval("Id", "DeleteData('{0}', 'Remove2'); return false;") %>' 
    
  2. Изменить метод JavaScript Delete. Обратите внимание, что мы теперь передаем идентификатор кнопки на стороне сервера, так что в кодовом замке мы можем легко узнать, какая кнопка была нажата.

    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. 
    } 
    
  3. В коде позади, включает один RemoveRecord метода и нет необходимости создавать обработчик событий, как вы сделали в исходном коде. Поэтому вы должны удалить следующие коды из исходного кода: Remove1_Click и Remove2_Click, а также удалить код в Page_Load, который подписывается на события click.

    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_AjaxRequest в родительской страницы и удалять методы детской страницы, а затем добавьте следующий код в соответствующих местах, указанных в их названиях. Но обратите внимание, что изменения разметки и изменения функций JavaScript, упомянутые выше, также применяются к этому подходу.

В родительской странице (только вне класса)

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

Кроме того, в том же родительской странице изменить метод RadAjaxManager2_AjaxRequest к тому, что дано ниже.

В родительской странице (изменить существующий метод)

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

В ребенке Page (изменить существующие методы)

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 


    } 
} 
+0

На самом деле у меня есть одна страница с ParentPage.cs, и этот Onajaxrequest находится на странице ParentPage.cs.Эта сетка и мои методы Remove1 и Remove2 находится на Abc.aspx, и я унаследовал эту страницу abx.cs от parentPage: public partial class Abc: ParentPage –

+0

Итак, как вызвать этот RemoveRecord с сайта ParentPage.cs? –

+0

Поместите код C# на родительскую страницу, так как метод «RadAjaxManager2_AjaxRequest» находится на родительской странице. Сетка может быть на дочерней странице. – Sunil

1

вы просто просто использовать RadGrid_ItemCommand и передать аргумент команды с дель кнопки и изменить имя команды как для удаления ее пример кода для

<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") 
    { 

    } 

} 
+0

Извините, но я должен использовать существующий код только с radajaxmanager. Так вы можете дать решение в соответствии с этим –

Смежные вопросы