📅  最后修改于: 2023-12-03 14:39:42.737000             🧑  作者: Mango
在使用C#的DataGridView控件时,我们经常需要对选中的行进行操作,其中之一就是右键菜单功能,本篇介绍如何实现DataGridView右键菜单功能。
在窗体(Form)上拖入DataGridView控件,并设置其属性为:
AllowUserToAddRows = false //禁止新增行
AllowUserToDeleteRows = false //禁止删除行
SelectionMode = FullRowSelect //整行选择模式
在工具箱中添加ContextMenuStrip(右键菜单)控件,并设置其属性为:
Text = cmsDGV //右键菜单的名称
在DataGridView的鼠标右击事件(MouseDown)中添加以下代码:
if (e.Button == MouseButtons.Right)
{
DataGridView.HitTestInfo hitTestInfo = this.dgv.HitTest(e.X, e.Y);
if (hitTestInfo.Type == DataGridViewHitTestType.Cell)
{
// 设置当前行为选中行
if (!this.dgv.Rows[hitTestInfo.RowIndex].Selected)
{
this.dgv.ClearSelection();
this.dgv.Rows[hitTestInfo.RowIndex].Selected = true;
}
// 弹出右键菜单
this.cmsDGV.Show(this.dgv, e.Location);
}
}
在设计器中双击右键菜单控件,进入其Click事件处理程序,添加以下代码:
private void tsmiDelete_Click(object sender, EventArgs e)
{
// 删除选中行
foreach (DataGridViewRow row in this.dgv.SelectedRows)
{
this.dgv.Rows.Remove(row);
}
}
private void tsmiCopy_Click(object sender, EventArgs e)
{
// 复制选中行
this.dgv.ClipboardCopyMode = DataGridViewClipboardCopyMode.EnableAlwaysIncludeHeaderText;
this.dgv.MultiSelect = true;
foreach (DataGridViewRow row in this.dgv.SelectedRows)
{
row.Selected = false;
}
this.dgv.MultiSelect = false;
}
private void tsmiPaste_Click(object sender, EventArgs e)
{
// 粘贴行
string s = Clipboard.GetText();
string[] lines = s.Split('\n');
int row = this.dgv.CurrentCell.RowIndex;
int column = this.dgv.CurrentCell.ColumnIndex;
foreach (string line in lines)
{
if (row <= this.dgv.Rows.Count - 2)
{
DataGridViewRow dgvRow = this.dgv.Rows[row];
string[] cells = line.Split('\t');
for (int i = 0; i < cells.Length && i + column < dgvRow.Cells.Count; i++)
{
dgvRow.Cells[i + column].Value = cells[i];
}
row++;
}
}
}
其中,tsmiDelete_Click
方法用于删除选中的行,tsmiCopy_Click
方法用于复制选中的行,tsmiPaste_Click
方法用于粘贴行。
本文参考了网上众多资料,其中最为明确的是如何在DataGridView中添加右键菜单 [转]。如有侵权,请来信告知,我将立即删除。