效果展示
第一行的勾选框整么实现的看上一篇,在灰色处右键不会显示右键菜单
点测试按钮后会跳出弹框,读取右键勾选的数据信息
实现流程
从可视化组件中拖一个ContextMenuStrip 丢到 DatagridView 中
绑定测试按钮点击事件
测试按钮点击事件
private void 测试按钮_Click(object sender, EventArgs e)
{
List<int> list = new List<int>();
//首先进行第一次循环 获取选中的行数
for (int i = 0; i < dgv.Rows.Count; i++)
{
//如果被选中
if ((bool)dgv.Rows[i].Cells[0].EditedFormattedValue == true)
{
list.Add(i);
}
}
//新建 选中长度的数组存放每一行
string[] str = new string[list.Count];
int j = 0;
foreach (int i in list)
{
str[j++] = dgv.Rows[i].Cells[1].Value.ToString() + "@" + dgv.Rows[i].Cells[2].Value.ToString();
}
//输出选中所有行的内容
for (int i = 0; i < str.Length; i++)
{
MessageBox.Show(string.Format("获取的第{0}条为:", i + 1) + str[i]);
}
}
绑定dgv(我的DatagridView 叫dgv)右键点击事件
/// <summary>
/// dgv鼠标右键,焦点改变到当前点击处,并选择改行
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Dgv_CellMouseDown(object sender, DataGridViewCellMouseEventArgs e)
{
if (e.RowIndex >= 0)
{
Console.WriteLine(dgv.Rows[e.RowIndex].Cells[1].Value);
//判断是否右键和是否有数据
if (e.Button == MouseButtons.Right && dgv.Rows[e.RowIndex].Cells[1].Value != null)
{
dgv.ClearSelection();
dgv.Rows[e.RowIndex].Cells[0].Value = 1;
//焦点改变
dgv.CurrentCell = dgv.Rows[e.RowIndex].Cells[e.ColumnIndex];
this.contextMenuStrip1.Show(Control.MousePosition);
}
}
}
如果不考虑是否有数据才显示右键菜单,可以直接在DatagridView 属性中设置如下,但注意如果有此设置,则上述绑定的dgv右键点击事件实现效果不会生效
直接选你的ContextMenuStrip 组件可以在dgv任何位置展示出来
参考文档
datagridview右键选中单元格并获取到焦点
c# winform获取gridview数据
鼠标右键.单击判断.选中行后并弹出右键菜单