How to: Respond to Clicks in the Windows Forms DataGrid Control
Note |
---|
The DataGridView control replaces and adds functionality to the DataGrid control; however, the DataGrid control is retained for both backward compatibility and future use, if you choose. For more information, see Differences Between the Windows Forms DataGridView and DataGrid Controls. |
After the Windows Forms DataGrid is connected to a database, you can monitor which cell the user clicked.
To detect when the user of the DataGrid selects a different cell
In the CurrentCellChanged event handler, write code to respond appropriately.
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#) Place the following code in the form's constructor to register the event handler.
this.myDataGrid.CurrentCellChanged += new System.EventHandler(this.myDataGrid_CurrentCellChanged);
To determine which part of the DataGrid the user clicked
Call the HitTest method in an appropriate event handler, such as for the MouseDown or Click event.
The HitTest method returns a HitTestInfo object that contains the row and column of a clicked area.
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#) Place the following code in the form's constructor to register the event handler.
this.myDataGrid.MouseDown += new System.Windows.Forms.MouseEventHandler (this.myDataGrid_MouseDown);
See Also
Tasks
How to: Change Displayed Data at Run Time in the Windows Forms DataGrid Control