右键单击以选择dataGridView中的行

时间:2013-05-27 02:02:08

标签: c# select datagridview row right-click

我需要在显示ContextMenu之前右键单击dataGridView中的一行,因为contextMenu是row-dependendt。

我试过这个:

 if (e.Button == MouseButtons.Right)
        {

            var hti = dataGrid.HitTest(e.X, e.Y);
            dataGrid.ClearSelection();
            dataGrid.Rows[hti.RowIndex].Selected = true;
        }

或:

private void dataGrid_CellMouseDown(object sender, DataGridViewCellMouseEventArgs e)
    {
        if (e.Button == MouseButtons.Right)
        {
            dataGrid.Rows[e.RowIndex].Selected = true;
            dataGrid.Focus();
        }
    }

这样可行,但是当我尝试读取dataGrid.Rows [CurrentRow.Index]时,我只看到左键单击选中的行而不是右键单击选中的行。

4 个答案:

答案 0 :(得分:26)

尝试像这样设置当前单元格(这将在选择上下文菜单项之前设置CurrentRow的{​​{1}}属性:

DataGridView

答案 1 :(得分:3)

我意识到这个线程已经老了,我只想添加一件事:如果你想能够在多行上选择并执行操作:你可以查看你右键单击的行是否是已经选中了。这样,DataGridview在这方面就像ListView一样。因此,右键单击尚未选择的行:选择此行并打开上下文菜单。右键单击已选择的行只会为您提供上下文菜单,并按预期保留所选行。

 private void dataGridView1_CellMouseDown(object sender, DataGridViewCellMouseEventArgs e)
    {
        if (e.RowIndex != -1 && e.ColumnIndex != -1)
        {
            if (e.Button == MouseButtons.Right)
            {
                DataGridViewRow clickedRow = (sender as DataGridView).Rows[e.RowIndex]; 
                if (!clickedRow.Selected)
                    dataGridView1.CurrentCell = clickedRow.Cells[e.ColumnIndex];

                var mousePosition = dataGridView1.PointToClient(Cursor.Position);

                ContextMenu1.Show(dataGridView1, mousePosition);
            }
        }
    }

答案 2 :(得分:0)

    private void grid_listele_CellMouseDown(object sender, DataGridViewCellMouseEventArgs e)
    {
        if (e.Button == MouseButtons.Right)
        {
            grid_listele.ClearSelection();
            grid_listele[e.ColumnIndex, e.RowIndex].Selected = true;
        }


    }

答案 3 :(得分:0)

 if (e.Button == System.Windows.Forms.MouseButtons.Right)
        {
            var hti = GridView.HitTest(e.X, e.Y);
            GridView.ClearSelection();

            int index = hti.RowIndex;

            if (index >= 0)
            {
                GridView.Rows[hti.RowIndex].Selected = true;
                LockFolder_ContextMenuStrip.Show(Cursor.Position);
            }

        }

这是我猜的准确方法