C#:使用快捷菜單(ContextMenuStrip)刪除DataGridView控件指定行

工做中遇到一個場景:在DataGridView上單擊鼠標右鍵彈出快捷菜單,在快捷菜單內須要有「刪除本行」、「清空數據」等按鈕,因而我就本身實現了一個:
c#

實現步驟以下:
code

步驟1,創建一個C#下的Windows窗體應用程序,取名DgvMenuStripTestorm

步驟2,主窗體內的控件只有一個名爲dgvTest的DataGridView,對這個DataGridView啓用添加、啓用編輯、啓用刪除,並設置其在父容器中停靠事件

步驟3,爲這個DataGridView添加MouseClick事件,代碼以下:ip

/// <summary>
/// DataGridView鼠標單擊事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void dgvTest_MouseClick(object sender, MouseEventArgs e)
{
    //當前操做的DataGridView
    DataGridView dgv = sender as DataGridView;

    //當前鼠標位置的行列信息
    int col = dgv.HitTest(e.X, e.Y).ColumnIndex;
    int row = dgv.HitTest(e.X, e.Y).RowIndex;

    //右鍵彈出菜單
    if (e.Button == System.Windows.Forms.MouseButtons.Right)
    {
        //容許用戶添加行時,最後一行爲未實際添加的行,所以不需考慮彈出菜單
        if (row < 0 || (dgv.AllowUserToAddRows && row == dgv.Rows.Count - 1))
        {
            return;
        }
        else
        {
            //取消選中當前全部選中的行和單元格
            for (int i = 0; i < dgv.Rows.Count; i++)
            {
                dgv.Rows[i].Selected = false;
                for (int j = 0; j < dgv.Columns.Count; j++)
                {
                    dgv.Rows[i].Cells[j].Selected = false;
                }
            }
            //選中當前鼠標所在的行
            dgv.Rows[row].Selected = true;
        }

        //創建快捷菜單
        ContextMenuStrip contextMenuStrip = new ContextMenuStrip();

        ////功能
        //contextMenuStrip.Items.Add("功能1");
        //contextMenuStrip.Items.Add("功能2");
        //contextMenuStrip.Items.Add("功能3");

        ////分隔線
        //contextMenuStrip.Items.Add(new ToolStripSeparator());

        //刪除當前行
        ToolStripMenuItem tsmiRemoveCurrentRow = new ToolStripMenuItem("刪除本行");
        tsmiRemoveCurrentRow.Click += (obj, arg) =>
        {
            dgv.Rows.RemoveAt(row);
        };
        contextMenuStrip.Items.Add(tsmiRemoveCurrentRow);

        //清空全部數據
        ToolStripMenuItem tsmiRemoveAll = new ToolStripMenuItem("清空數據");
        tsmiRemoveAll.Click += (obj, arg) =>
        {
            dgv.Rows.Clear();
        };
        contextMenuStrip.Items.Add(tsmiRemoveAll);

        contextMenuStrip.Show(dgv, new Point(e.X, e.Y));
    }
}

END
it

相關文章
相關標籤/搜索