如何:响应 Windows 窗体 DataGrid 控件中的单击

注释

DataGridView 控件替换并添加 DataGrid 控件的功能;但是,如果选择,则保留 DataGrid 控件以实现后向兼容性和将来使用。 有关详细信息,请参阅 Windows 窗体 DataGridView 控件与 DataGrid 控件之间的区别

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 方法,比如针对 MouseDownClick 事件。

    该方法 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);
    

另请参阅