DataGridView 的右键菜单(ContextMenuStrip)

简介:
DataGridView, DataGridViewColumn, DataGridViewRow, DataGridViewCell   ContextMenuStrip  属性。可以通过设定  ContextMenuStrip  对象来控制  DataGridView  的右键菜单的显示。  DataGridViewColumn   ContextMenuStrip  属性设定了   除了列头以外的单元格的右键菜单。  DataGridViewRow   ContextMenuStrip  属性设定了除了行头以外的单元格的右键菜单。 DataGridViewCell    ContextMenuStrip  属性设定了指定单元格的右键菜单。

 

[VB.NET]
' DataGridView   ContextMenuStrip  设定
DataGridView1.ContextMenuStrip =  Me .ContextMenuStrip1

列的  ContextMenuStrip  设定
DataGridView1.Columns(0).ContextMenuStrip =  Me .ContextMenuStrip2
列头的  ContextMenuStrip  设定
DataGridView1.Columns(0).HeaderCell.ContextMenuStrip =  Me .ContextMenuStrip2

行的  ContextMenuStrip  设定
DataGridView1.Rows(0).ContextMenuStrip =  Me .ContextMenuStrip3

单元格的  ContextMenuStrip  设定
DataGridView1(0, 0).ContextMenuStrip =  Me .ContextMenuStrip4

 

[C#]
// DataGridView   ContextMenuStrip  设定
DataGridView1.ContextMenuStrip =  this .ContextMenuStrip1;

//  列的  ContextMenuStrip  设定
DataGridView1.Columns[0].ContextMenuStrip =  this .ContextMenuStrip2;
//  列头的  ContextMenuStrip  设定
DataGridView1.Columns[0].HeaderCell.ContextMenuStrip =  this .ContextMenuStrip2;

//  行的  ContextMenuStrip  设定
DataGridView1.Rows[0].ContextMenuStrip =  this .ContextMenuStrip3;

//  单元格的  ContextMenuStrip  设定
DataGridView1[0, 0].ContextMenuStrip =  this .ContextMenuStrip4;

对于单元格上的右键菜单的设定,优先顺序是: Cell > Row > Column > DataGridView

 CellContextMenuStripNeededRowContextMenuStripNeeded 事件

利用 CellContextMenuStripNeeded 事件可以设定单元格的右键菜单,尤其但需要右键菜单根据单元格值的变化而变化的时候。比起使用循环遍历,使用该事件来设定右键菜单的效率更高。但是,在DataGridView使用了DataSource绑定而且是VirtualMode的时候,该事件将不被引发。

 

[VB.NET]
'   CellContextMenuStripNeeded 事件处理方法
Private   Sub  DataGridView1_CellContextMenuStripNeeded( _
        
ByVal  sender  As   Object , _
        
ByVal  e  As  DataGridViewCellContextMenuStripNeededEventArgs) _
        
Handles  DataGridView1.CellContextMenuStripNeeded
    
Dim  dgv  As  DataGridView =  CType (sender, DataGridView)
    
If  e.RowIndex < 0  Then
        
'  列头的 ContextMenuStrip 设定
        e.ContextMenuStrip =  Me .ContextMenuStrip1
    
ElseIf  e.ColumnIndex < 0  Then
        
'  行头的 ContextMenuStrip 设定
        e.ContextMenuStrip =  Me .ContextMenuStrip2
    
ElseIf   TypeOf  (dgv(e.ColumnIndex, e.RowIndex).Value)  Is   Integer   Then
        
'  如果单元格值是整数时
        e.ContextMenuStrip =  Me .ContextMenuStrip3
    
End   If
End Sub

 

[C#]
//   CellContextMenuStripNeeded 事件处理方法
private   void  DataGridView1_CellContextMenuStripNeeded( object  sender,
    DataGridViewCellContextMenuStripNeededEventArgs e)
{
    DataGridView dgv = (DataGridView)sender;
    
if  (e.RowIndex < 0)
    {
        
//  列头的 ContextMenuStrip 设定
        e.ContextMenuStrip =  this .ContextMenuStrip1;
    }
    
else   if  (e.ColumnIndex < 0)
    {
        
//  行头的 ContextMenuStrip 设定
        e.ContextMenuStrip =  this .ContextMenuStrip2;
    }
    
else   if  (dgv[e.ColumnIndex, e.RowIndex].Value  is   int )
    {
        
//  如果单元格值是整数时
        e.ContextMenuStrip =  this .ContextMenuStrip3;
    }
}

同样,可以通过  RowContextMenuStripNeeded  事件来设定行的右键菜单。

[VB.NET]
'   RowContextMenuStripNeeded 事件处理方法
Private   Sub  DataGridView1_RowContextMenuStripNeeded( _
        
ByVal  sender  As   Object , _
        
ByVal  e  As  DataGridViewRowContextMenuStripNeededEventArgs) _
        
Handles  DataGridView1.RowContextMenuStripNeeded
    
Dim  dgv  As  DataGridView =  CType (sender, DataGridView)
    
'  当 "Column1" 列是 Bool 型且为 True 时、设定其的 ContextMenuStrip
     Dim  boolVal  As   Object  = dgv("Column1", e.RowIndex).Value
    Console.WriteLine(boolVal)
    
If   TypeOf  boolVal  Is   Boolean   AndAlso   CBool (boolVal)  Then
        e.ContextMenuStrip = 
Me .ContextMenuStrip1
    
End   If
End Sub

 

[C#]
//   RowContextMenuStripNeeded 事件处理方法
private   void  DataGridView1_RowContextMenuStripNeeded( object  sender,
    DataGridViewRowContextMenuStripNeededEventArgs e)
{
    DataGridView dgv = (DataGridView)sender;
    
//  当 "Column1" 列是 Bool 型且为 True 时、设定其的 ContextMenuStrip
     object  boolVal = dgv["Column1", e.RowIndex].Value;
    Console.WriteLine(boolVal);
    
if  (boolVal  is   bool  && ( bool )boolVal)
    {
        e.ContextMenuStrip = 
this .ContextMenuStrip1;
    }
}


CellContextMenuStripNeeded
 事件处理方法的参数中、「 e.ColumnIndex=-1 」表示行头、「 e.RowIndex=-1 」表示列头。 RowContextMenuStripNeeded 则不存在「 e.RowIndex=-1 」的情况。




本文转自 qianshao 51CTO博客,原文链接:http://blog.51cto.com/qianshao/201791,如需转载请自行联系原作者

目录
相关文章
|
1月前
|
存储 缓存 C#
46.c#:datagridview控件
46.c#:datagridview控件
18 1
|
2月前
Datagridview 显示当前选中行
Datagridview 显示当前选中行
23 0
|
10月前
Datagrid添加右键菜单
Datagrid添加右键菜单
48 0
C#编程-23:删除datagridview中选中的多行
C#编程-23:删除datagridview中选中的多行
227 0
|
C#
wpf datagrid设置右键菜单打开时选中项的背景色
原文:wpf datagrid设置右键菜单打开时选中项的背景色 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/huangli321456/article/details/53929433 ...
1395 0
|
C#
C# DataGridview控件自动下拉到最后一行
有时候使用DataGridView难免会在最后插入一条数据,如果插入的数据超过滚动条显示的行数,那么默认情况下不会显示到最后一行。增加以下代码一直将滚动条拉倒最低。 this.dataGridView1.
2352 0