Практическое руководство. Обработка щелчка мыши элементом управления DataGrid в Windows Forms

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

8bwtfykz.alert_note(ru-ru,VS.90).gifПримечание.

Элемент управления DataGridView заменяет элемент управления DataGrid и расширяет его функциональные возможности; однако при необходимости элемент управления DataGrid можно сохранить для обратной совместимости и использования в будущем. Дополнительные сведения см. в разделе Различия элементов управления DataGridView и DataGrid в Windows Forms.

После привязки элемента управления форм Windows DataGrid к базе данных можно отслеживать выбор ячеек пользователем.

Чтобы определить момент выбора пользователем ячейки в элементе управления DataGrid

  • Введите в обработчике событий CurrentCellChanged код для получения нужного результата.

    Private Sub myDataGrid_CurrentCellChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles myDataGrid.CurrentCellChanged
       MessageBox.Show("Col is " & myDataGrid.CurrentCell.ColumnNumber _
          & ", Row is " & myDataGrid.CurrentCell.RowNumber _
          & ", Value is " & myDataGrid.Item(myDataGrid.CurrentCell))
    End Sub
    
    private void myDataGrid_CurrentCellChanged(object sender, 
    System.EventArgs e)
    {
       MessageBox.Show ("Col is " + myDataGrid.CurrentCell.ColumnNumber
          + ", Row is " + myDataGrid.CurrentCell.RowNumber 
          + ", Value is " + myDataGrid[myDataGrid.CurrentCell] );
    }
    

    (Visual C#) Добавьте в конструктор формы следующий код, чтобы зарегистрировать обработчик событий.

    this.myDataGrid.CurrentCellChanged += new
       System.EventHandler(this.myDataGrid_CurrentCellChanged);
    

Чтобы определить область, выбранную в элементе управления DataGrid

  • Вызовите метод HitTest в соответствующем обработке событий, такой как для события MouseDown или Click.

    Метод HitTest возвращает объект DataGrid.HitTestInfo, содержащий строку и столбец области, на которой выполнен щелчок.

    Private Sub myDataGrid_MouseDown(ByVal sender As Object, _
    ByVal e As MouseEventArgs) Handles myDataGrid.MouseDown
       Dim myGrid As DataGrid = CType(sender, DataGrid)
       Dim hti As System.Windows.Forms.DataGrid.HitTestInfo
       hti = myGrid.HitTest(e.X, e.Y)
       Dim message As String = "You clicked "
    
       Select Case hti.Type
          Case System.Windows.Forms.DataGrid.HitTestType.None
             message &= "the background."
          Case System.Windows.Forms.DataGrid.HitTestType.Cell
             message &= "cell at row " & hti.Row & ", col " & hti.Column
          Case System.Windows.Forms.DataGrid.HitTestType.ColumnHeader
             message &= "the column header for column " & hti.Column
          Case System.Windows.Forms.DataGrid.HitTestType.RowHeader
             message &= "the row header for row " & hti.Row
          Case System.Windows.Forms.DataGrid.HitTestType.ColumnResize
             message &= "the column resizer for column " & hti.Column
          Case System.Windows.Forms.DataGrid.HitTestType.RowResize
             message &= "the row resizer for row " & hti.Row
          Case System.Windows.Forms.DataGrid.HitTestType.Caption
             message &= "the caption"
          Case System.Windows.Forms.DataGrid.HitTestType.ParentRows
             message &= "the parent row"
       End Select
    
       Console.WriteLine(message)
    End Sub
    
    private void myDataGrid_MouseDown(object sender, 
    System.Windows.Forms.MouseEventArgs e)
    {
       DataGrid myGrid = (DataGrid) sender;
       System.Windows.Forms.DataGrid.HitTestInfo hti;
       hti = myGrid.HitTest(e.X, e.Y);
       string message = "You clicked ";
    
       switch (hti.Type) 
       {
          case System.Windows.Forms.DataGrid.HitTestType.None :
             message += "the background.";
             break;
          case System.Windows.Forms.DataGrid.HitTestType.Cell :
             message += "cell at row " + hti.Row + ", col " + hti.Column;
             break;
          case System.Windows.Forms.DataGrid.HitTestType.ColumnHeader :
             message += "the column header for column " + hti.Column;
             break;
          case System.Windows.Forms.DataGrid.HitTestType.RowHeader :
             message += "the row header for row " + hti.Row;
             break;
          case System.Windows.Forms.DataGrid.HitTestType.ColumnResize :
             message += "the column resizer for column " + hti.Column;
             break;
          case System.Windows.Forms.DataGrid.HitTestType.RowResize :
             message += "the row resizer for row " + hti.Row;
             break;
          case System.Windows.Forms.DataGrid.HitTestType.Caption :
             message += "the caption";
             break;
          case System.Windows.Forms.DataGrid.HitTestType.ParentRows :
             message += "the parent row";
             break;
          }
    
          Console.WriteLine(message);
    }
    

    (Visual C#) Добавьте в конструктор формы следующий код, чтобы зарегистрировать обработчик событий.

    this.myDataGrid.MouseDown += new
       System.Windows.Forms.MouseEventHandler
       (this.myDataGrid_MouseDown);
    

См. также

Задачи

Практическое руководство. Изменение данных, отображаемых во время выполнения, в элементе управления DataGrid в Windows Forms

Другие ресурсы

Элемент управления DataGrid (Windows Forms)