📜  c# datagridview 选择行右键 - C# (1)

📅  最后修改于: 2023-12-03 14:39:42.737000             🧑  作者: Mango

C# DataGridView 选择行右键

在使用C#的DataGridView控件时,我们经常需要对选中的行进行操作,其中之一就是右键菜单功能,本篇介绍如何实现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中添加右键菜单 [转]。如有侵权,请来信告知,我将立即删除。