Поделиться через


Практическое руководство. Ответ на события кнопок в элементе управления GridView

Обновлен: Ноябрь 2007

При нажатии кнопки в элементе управления GridView возникает событие RowCommand. Элемент управления GridView имеет встроенные функциональные возможности для таких операций, как редактирование, удаление и разбиение по страницам. Можно также добавлять кнопки и использовать событие RowCommand для добавления пользовательских функций к элементу управления.

Добавить пользовательские функции к элементу управления GridView можно следующими способами:

Можно использовать свойство CommandName аргумента события для идентификации функции кнопки в методе обработки события. При работе с объектами ButtonField или TemplateField можно также использовать свойство CommandArgument для идентификации текущей строки. При использовании объекта ButtonField свойство CommandArgument автоматически настраивается на индекс строки. При использовании объекта TemplateField свойство CommandArgument не настраивается автоматически элементом управления. В таком случае, если необходимо определить индекс строки в обработчике событий, можно настроить свойство кнопки CommandArgument на индекс строки, используя выражение привязки данных.

Ответ на события кнопок в элементе управления GridView

  1. Задайте для свойства CommandName кнопки строку, описывающую ее функциональность, например, "Print" или "Copy".

  2. При использовании объекта TemplateField и при необходимости доступа к индексу строки в методе обработчика событий, задайте для свойства CommandArgument кнопки выражение, определяющее текущую строку.

    В следующем примере показано, как можно задать для свойства CommandArgument кнопки в столбце TemplateField индекс текущей строки. В примере столбец содержит элемент управления Button, отображающий корзину для покупок.

    <asp:TemplateField>
      <ItemTemplate>
        <asp:Button ID="AddButton" runat="server" 
          CommandName="AddToCart" 
          CommandArgument="<%# CType(Container,GridViewRow).RowIndex %>"
          Text="Add to Cart" />
      </ItemTemplate> 
    </asp:TemplateField>
    
    <asp:TemplateField>
      <ItemTemplate>
        <asp:Button ID="AddButton" runat="server" 
          CommandName="AddToCart" 
          CommandArgument="<%# ((GridViewRow) Container).RowIndex %>"
          Text="Add to Cart" />
      </ItemTemplate> 
    </asp:TemplateField>
    
  3. Создайте метод для события RowCommand элемента управления GridView. В методе выполните следующее:

    1. Изучите свойство CommandName объекта аргумента события, чтобы увидеть переданную строку.

    2. Извлеките индекс строки, содержащей кнопку, используя при необходимости свойство CommandArgument.

    3. Выполните необходимые действия, соответствующие нажатой кнопке.

    В следующем примере показана реакция на нажатие кнопки в элементе управления GridView. В этом примере кнопка в столбце TemplateField отправляет команду "AddToCart". Обработчик событий RowCommand определяет, какая кнопка была нажата. Если это кнопка с корзиной для покупок, код осуществляет соответствующие действия.

    Protected Sub GridView1_RowCommand(ByVal sender As Object, _
      ByVal e As System.Web.UI.WebControls.GridViewCommandEventArgs)
      If (e.CommandName = "AddToCart") Then
        ' Retrieve the row index stored in the CommandArgument property.
        Dim index As Integer = Convert.ToInt32(e.CommandArgument)
    
        ' Retrieve the row that contains the button 
        ' from the Rows collection.
        Dim row As GridViewRow = GridView1.Rows(index)
    
        ' Add code here to add the item to the shopping cart.
    
      End If
    End Sub
    
    protected void GridView1_RowCommand(object sender, 
      GridViewCommandEventArgs e)
    {
      if (e.CommandName == "AddToCart")
      {
        // Retrieve the row index stored in the 
        // CommandArgument property.
        int index = Convert.ToInt32(e.CommandArgument);
    
        // Retrieve the row that contains the button 
        // from the Rows collection.
        GridViewRow row = GridView1.Rows[index];
    
        // Add code here to add the item to the shopping cart.
      }
    
      }
    

    Пример, в котором используется класс ButtonField, можно найти в документации по событию GridView.RowCommand.

См. также

Задачи

Пошаговое руководство. Отклик на события Button в элементах DataList или Repeater

Ссылки

Общие сведения о серверном веб-элементе управления GridView