2013-04-06 2 views
0

ı были предназначены для создания динамической панели управления с помощью webusercontrol, delegate и ADO. Даже я написал делегата для удаления и редактирования ı, столкнувшись с «GridView« GridView1 », с запущенным событием RowDeleting, которое не обрабатывалось». Может кто-нибудь мне помочь PLS здесь мои кодыGridView 'GridView1' выпустил событие RowDeleting, которое не было обработано, но есть событие

protected void Page_Load(object sender, EventArgs e) 
    { 
     GridView1.DataSource = this.DataSource; 
     GridView1.DataBind(); 
     GridView1.DataKeyNames = new string[] { this.DataKeyNames }; 

    } 

    public object DataSource { get; set; } 
    public string DataKeyNames { get; set; } 

    public event GridHander RowDeleting; 
    public event GridHander RowSawing; 


    protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e) 
    { 
     GridViewRow gvr = ((LinkButton)e.CommandSource).Parent.Parent as GridViewRow; 
     int rowIndex = gvr.RowIndex; 
     object id = GridView1.DataKeys[rowIndex].Value; 

     switch (e.CommandName) 
     { 
      case "Edit": 
       GridView1.EditIndex = rowIndex; 
       break; 

      case "Delete": 
       if (RowDeleting != null) 
       { 
        GridEventArgs args = new GridEventArgs() 
        { 
         row=gvr, 
         id=id, 
         rowIndex=rowIndex 
        }; 
        RowDeleting.Invoke(e.CommandSource, args); 
       } 
       break; 

      case"Save": 
       if (RowSawing != null) 
       { 
        GridEventArgs args = new GridEventArgs() 
        { 
         row = gvr, 
         id = id, 
         rowIndex = rowIndex 
        }; 
        RowSawing.Invoke(e.CommandSource, args); 

       } 
       GridView1.EditIndex = -1; 
       break; 

      case "Cancel": 
       GridView1.EditIndex = -1; 
       break; 

      default: 
       break; 
     } 
    } 
} 

// Мой Webform

ublic partial class CategoryControlPanel : System.Web.UI.Page 
{ 
    CategoryResposite _categoryResposite=new CategoryResposite(); 

    protected void Page_Load(object sender, EventArgs e) 
    { 
     ControlPanel.DataSource = _categoryResposite.ListCategories(); 
     ControlPanel.RowDeleting += ControlPanel_RowDeleting; 
     ControlPanel.RowSawing += ControlPanel_RowSawing; 
    } 

    void ControlPanel_RowSawing(object sender, GridEventArgs e) 
    { 
     throw new NotImplementedException(); 
    } 

    void ControlPanel_RowDeleting(object sender, GridEventArgs e) 
    { 
     _categoryResposite.DeleteCategories(Convert.ToInt32(e.id)); 
    } 
+0

Где в вашем коде вы настройки обработчика событий для 'GridView1.RowDeleting'? Я этого не вижу. Я вижу, что вы устанавливаете обработчик для 'ControlPanel.RowDeleting', является ли ControlPanel ссылкой на' GridView1'? Если да, то уверены ли вы, что ссылка правильная? – Snixtor

ответ

-1

Try добавление охранется сигнатур методов.

1

Код, который вы опубликовали, является неполным (отсутствует код файла aspx), из вашего описания проблемы звучит так, как будто вы не назначили событие RowDeleting для GridView1.

Внутри отверстия GridView тега в файле ASPX добавить назначение следующим образом:

<asp:gridview ID="..." runat="server" ... OnRowDeleting="<name of event handler>" ...> 

Если ControlPanel_RowDeleting обработчик событий предназначен для обработки при удалении из GridView действия затем вставить его в качестве имени обработчика события. Убедитесь, что вы повторно привязываете gridview после удаления, чтобы изменения отображались при обратной передаче.

protected void ControlPanel_RowDeleting(object sender, GridViewDeleteEventArgs e) 
{ 
    // cancel the automatic delete action 
    e.Cancel = true; 

    // do the delete 
    _categoryResposite.DeleteCategories(Convert.ToInt32(e.id)); 

    // complete delete action 
    GridView1.DataBind(); 
} 
0

Одна из хороших вещей о GridView является то, что она обеспечивает встроенный CommandField кнопок, что позволяет нам выполнять определенные действия, такие как редактирование, обновление, удаление и выбрать из GridView данных.

Чтобы добавить эти команды поля, указанные в GridView вы можете выполнить следующие несколько шагов ниже: 1. Переключитесь Design View 2. Щелкните правой кнопкой мыши на GridView и Select -> Показать смарт-тег -> Добавить новые столбцы 3. В поле выбора списка CommandField 4. Проверьте параметры «Удалить и изменить/обновить», затем «ОК»

Как вы можете видеть, в последнем столбце GridView автоматически добавляются элементы редактирования и удаления. Теперь мы можем начать писать наши коды для редактирования и обновления информации в GridView.

Для выполнения редактирования и обновления в GridView нам необходимо использовать три события (GridView_RowEditing, GridView_RowCancelingEdit, GridView_RowUpdating). Для тех, кто не знает о том, как генерировать события в GridView вы можете выполнить следующие действия:

  1. Переключение в режим конструктора в Visual Studio Designer
  2. Нажмите на GridView
  3. Перейдите к GridView панели свойств а затем перейти к Свойства событий
  4. Оттуда вы сможете найти список событий, в том числе и эти три события, упомянутые выше
  5. двойной щелчок на том, что для создания обработчика событий для вас
0

Вы пытаетесь с именем команды Удалить для вашей кнопки удаления. Таким образом, gridview создает строку, автоматически удаляющую событие ...

Вы должны изменить аргумент команды из Удалить к чему-то другому, как Delete_Product или все, что вы хотите ...