Right click to select row in dataGridView

前端 未结 4 2110
一个人的身影
一个人的身影 2020-12-29 10:31

I need to select a row in dataGridView with right click before ContextMenu shown because contextMenu is row-dependendt.

I\'ve tried this:

 if (e.Butt         


        
相关标签:
4条回答
  • 2020-12-29 11:04

    Try setting the current cell like this (this will set the CurrentRow property of the DataGridView before the context menu item is selected):

        private void dataGridView1_CellMouseDown(object sender, DataGridViewCellMouseEventArgs e)
        {
            var dataGrid = (DataGridView) sender;
            if (e.Button == MouseButtons.Right && e.RowIndex != -1)
            {
                var row = dataGrid.Rows[e.RowIndex];
                dataGrid.CurrentCell = row.Cells[e.ColumnIndex == -1 ? 1 : e.ColumnIndex];
                row.Selected = true;
                dataGrid.Focus();
            }
        }
    
    0 讨论(0)
  • 2020-12-29 11:10
        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;
            }
    
    
        }
    
    0 讨论(0)
  • 2020-12-29 11:15

    I realize this thread is old, I just wanted to add one thing: If you want to be able to select, and perform the action, on multiple rows: you can check to see if the row you are right-clicking is already selected. This way the DataGridview behaves likes a ListView in this regard. So right clicking on a row not already selected: selects this row and open the context menu. Right clicking on a row already selected just gives you the context menu and keep the selected rows as expected.

     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);
                }
            }
        }
    
    0 讨论(0)
  • 2020-12-29 11:17
     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);
                }
    
            }
    

    This is Accurate Method i Guess

    0 讨论(0)
提交回复
热议问题