DataGridViewRowContextMenuStripNeededEventArgs Class
Assembly: System.Windows.Forms (in system.windows.forms.dll)
'Declaration Public Class DataGridViewRowContextMenuStripNeededEventArgs Inherits EventArgs 'Usage Dim instance As DataGridViewRowContextMenuStripNeededEventArgs
public class DataGridViewRowContextMenuStripNeededEventArgs extends EventArgs
public class DataGridViewRowContextMenuStripNeededEventArgs extends EventArgs
The RowContextMenuStripNeeded event occurs only when the DataGridView control DataSource property is set or its VirtualMode property is true. Handling the RowContextMenuStripNeeded event is useful when you want to display a shortcut menu determined by a row's current state or the values it contains.
When you handle the RowContextMenuStripNeeded event, the shortcut menu that you specify in the handler is shown whenever the user right-clicks a row unless the CellContextMenuStripNeeded event overrides the shortcut menu for the specific cell that was clicked.
The RowContextMenuStripNeeded event also occurs whenever the value of the DataGridViewRow.ContextMenuStrip property is retrieved, either programmatically or when the user right-clicks a row.
You can use the RowIndex property to determine the state of a row or the values it contains, and use this information to change or modify the ContextMenuStrip property. This property is initialized with the value of the row ContextMenuStrip property, which the event value overrides.
Handle the RowContextMenuStripNeeded event when working with large amounts of data to avoid the performance penalties of setting the row ContextMenuStrip value for multiple rows. For more information, see Best Practices for Scaling the Windows Forms DataGridView Control.
For more information about handling events, see Consuming Events.
The following code example handles the RowContextMenuStripNeeded event to provide a ContextMenuStrip based on the title of the employee. In this example, there are two shortcut menus, one for managers and one for all other employees.
Imports System Imports System.Data Imports System.Data.SqlClient Imports System.Drawing Imports System.Windows.Forms Class Form1 Inherits Form Private WithEvents dataGridView1 As New DataGridView() Private WithEvents employeeMenuStrip As New ContextMenuStrip() Private WithEvents managerMenuStrip As New ContextMenuStrip() Private WithEvents toolStripMenuItem1 As New ToolStripMenuItem() Private WithEvents toolStripMenuItem2 As New ToolStripMenuItem() Private WithEvents toolStripMenuItem3 As New ToolStripMenuItem() Private contextMenuRowIndex As Integer Public Sub New() Me.Size = New Size(700, 300) Me.Controls.Add(dataGridView1) toolStripMenuItem1.Text = "View Employee Sales Report" toolStripMenuItem2.Text = "View Team Sales Report" toolStripMenuItem3.Text = "View Company Sales Team Ranking Report" With employeeMenuStrip .Items.Add(toolStripMenuItem1) End With With managerMenuStrip .Items.Add(toolStripMenuItem2) .Items.Add(toolStripMenuItem3) End With PopulateDataGridView() End Sub ' Establish the main entry point for the application. <STAThreadAttribute()> _ Public Shared Sub Main() Application.Run(New Form1()) End Sub Private Sub PopulateDataGridView() With dataGridView1 .Dock = DockStyle.Fill .AllowUserToAddRows = False .MultiSelect = False .ReadOnly = True .AllowUserToDeleteRows = False End With Dim query As String query = "SELECT e1.*, e2.FirstName + ' ' + e2.LastName AS Manager " query &= "FROM employees AS e1 LEFT JOIN employees AS e2 " query &= "ON e1.ReportsTo = e2.EmployeeID" ' Connect to the database Dim sqlConnection1 As New SqlConnection( _ "Integrated Security=SSPI;Persist Security Info=False;" & _ "Initial Catalog=Northwind;Data Source=localhost") Dim sqlDataAdapter1 As New SqlDataAdapter(query, _ sqlConnection1) Dim dataTable1 As New System.Data.DataTable() dataTable1.Locale = System.Globalization.CultureInfo.InvariantCulture sqlDataAdapter1.Fill(dataTable1) dataGridView1.DataSource = dataTable1 End Sub Private Sub dataGridView1_DataBindingComplete(ByVal sender As Object, _ ByVal e As DataGridViewBindingCompleteEventArgs) _ Handles dataGridView1.DataBindingComplete ' Hide some of the columns. With dataGridView1 .Columns("EmployeeID").Visible = False .Columns("Address").Visible = False .Columns("TitleOfCourtesy").Visible = False .Columns("BirthDate").Visible = False .Columns("HireDate").Visible = False .Columns("PostalCode").Visible = False .Columns("Photo").Visible = False .Columns("Notes").Visible = False .Columns("ReportsTo").Visible = False .Columns("PhotoPath").Visible = False End With ' Disable sorting for the DataGridView. Dim i As DataGridViewColumn For Each i In dataGridView1.Columns i.SortMode = DataGridViewColumnSortMode.NotSortable Next i dataGridView1.AutoResizeColumns() End Sub Public Sub dataGridView1_RowContextMenuStripNeeded( _ ByVal sender As Object, _ ByVal e As DataGridViewRowContextMenuStripNeededEventArgs) _ Handles dataGridView1.RowContextMenuStripNeeded Dim dataGridViewRow1 As DataGridViewRow = _ dataGridView1.Rows(e.RowIndex) toolStripMenuItem1.Enabled = True ' Show the appropriate ContextMenuStrip based on the employees title. If dataGridViewRow1.Cells("Title").Value.ToString() = _ "Sales Manager" OrElse _ dataGridViewRow1.Cells("Title").Value.ToString() = _ "Vice President, Sales" Then e.ContextMenuStrip = managerMenuStrip Else e.ContextMenuStrip = employeeMenuStrip End If contextMenuRowIndex = e.RowIndex End Sub Public Sub dataGridView1_CellToolTipTextNeeded(ByVal sender As Object, _ ByVal e As DataGridViewCellToolTipTextNeededEventArgs) _ Handles dataGridView1.CellToolTipTextNeeded Dim newLine As String = Environment.NewLine If e.RowIndex > -1 Then Dim dataGridViewRow1 As DataGridViewRow = _ dataGridView1.Rows(e.RowIndex) ' Add the employee's ID to the ToolTipText. e.ToolTipText = String.Format("EmployeeID {0}: {1}", _ dataGridViewRow1.Cells("EmployeeID").Value.ToString(), _ newLine) ' Add the employee's name to the ToolTipText. e.ToolTipText += String.Format("{0} {1} {2} {3}", _ dataGridViewRow1.Cells("TitleOfCourtesy").Value.ToString(), _ dataGridViewRow1.Cells("FirstName").Value.ToString(), _ dataGridViewRow1.Cells("LastName").Value.ToString(), _ newLine) ' Add the employee's title to the ToolTipText. e.ToolTipText += String.Format("{0}{1}{2}", _ dataGridViewRow1.Cells("Title").Value.ToString(), _ newLine, newLine) ' Add the employee's contact information to the ToolTipText. e.ToolTipText += String.Format("{0}{1}{2}, ", _ dataGridViewRow1.Cells("Address").Value.ToString(), newLine, _ dataGridViewRow1.Cells("City").Value.ToString()) If Not String.IsNullOrEmpty( _ dataGridViewRow1.Cells("Region").Value.ToString()) e.ToolTipText += String.Format("{0}, ", _ dataGridViewRow1.Cells("Region").Value.ToString()) End If e.ToolTipText += String.Format("{0}, {1}{2}{3} EXT:{4}{5}{6}", _ dataGridViewRow1.Cells("Country").Value.ToString(), _ dataGridViewRow1.Cells("PostalCode").Value.ToString(), _ newLine, _ dataGridViewRow1.Cells("HomePhone").Value.ToString(), _ dataGridViewRow1.Cells("Extension").Value.ToString(), _ newLine, newLine) ' Add employee information to the ToolTipText. Dim HireDate As DateTime = _ CType(dataGridViewRow1.Cells("HireDate").Value, DateTime) e.ToolTipText += _ String.Format("Employee since: {0}/{1}/{2}{3}Manager: {4}", _ HireDate.Month.ToString(), HireDate.Day.ToString(), _ HireDate.Year.ToString(), newLine, _ dataGridViewRow1.Cells("Manager").Value.ToString()) End If End Sub Public Sub toolStripMenuItem1_Click(ByVal sender As Object, _ ByVal e As EventArgs) Handles toolStripMenuItem1.Click Dim dataGridViewRow1 As DataGridViewRow = _ dataGridView1.Rows(contextMenuRowIndex) MessageBox.Show(String.Format( _ "Sales Report for {0} {1}:{2}{3}Reporting Not Implemented", _ dataGridViewRow1.Cells("FirstName").Value.ToString(), _ dataGridViewRow1.Cells("LastName").Value.ToString(), _ Environment.NewLine, Environment.NewLine)) End Sub Public Sub toolStripMenuItem2_Click(ByVal sender As Object, _ ByVal e As EventArgs) Handles toolStripMenuItem2.Click Dim dataGridViewRow1 As DataGridViewRow = _ dataGridView1.Rows(contextMenuRowIndex) MessageBox.Show(String.Format( _ "Sales Report for {0} {1}:{2}{3}Reporting Not Implemented", _ dataGridViewRow1.Cells("FirstName").Value.ToString(), _ dataGridViewRow1.Cells("LastName").Value.ToString(), _ Environment.NewLine, Environment.NewLine)) End Sub Public Sub toolStripMenuItem3_Click(ByVal sender As Object, _ ByVal e As EventArgs) Handles toolStripMenuItem3.Click Dim dataGridViewRow1 As DataGridViewRow = _ dataGridView1.Rows(contextMenuRowIndex) MessageBox.Show(String.Format( _ "Company Sales Ranking Report:{0}{1}Reporting not implemented.", _ Environment.NewLine, Environment.NewLine)) End Sub End Class
Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile for Pocket PC, Windows Mobile for Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
The .NET Framework does not support all versions of every platform. For a list of the supported versions, see System Requirements.
Reference
DataGridViewRowContextMenuStripNeededEventArgs MembersSystem.Windows.Forms Namespace
ContextMenuStrip
ContextMenuStrip Class
DataGridView Class
DataGridView.RowContextMenuStripNeeded Event
DataGridView.DataSource Property
DataGridView.VirtualMode Property
DataGridView.OnRowContextMenuStripNeeded
DataGridViewRowContextMenuStripNeededEventHandler
DataGridViewRow.ContextMenuStrip Property