如何在datagridview C#中使用shift和Ctrl键选择多行

时间:2015-01-29 06:07:49

标签: c# datagridview

enter image description here enter image description here我的要求:在datagridview中我需要通过单击行标题来选择行,并且选中的行应保持不变,直到我将同时单击另一行标题,同时我也应该选择单元格。 / p>

我的问题:我无法使用Shift和Ctrl键选择多行。

我的代码:

    List< DataGridViewRow> selectedRows = new List< DataGridViewRow>();

    void selectRows()
    {
        dataGridView1.SuspendLayout();
        foreach (DataGridViewRow r in dataGridView1.Rows)
        {
            r.Selected = selectedRows.Contains(r);
        }
        dataGridView1.ResumeLayout();
    }

    private void dataGridView1_RowHeaderMouseClick(object sender,DataGridViewCellMouseEventArgs e)
    {
        DataGridViewRow clickedRow = dataGridView1.CurrentRow;

        if (selectedRows.Contains(clickedRow))
        {
            selectedRows.Remove(clickedRow);
        }
        else
        {
            selectedRows.Add(clickedRow);
        }
        selectRows();

        foreach (DataGridViewRow row in dataGridView1.Rows)
        {
            if ((row.Index != e.RowIndex) && !row.Selected)
            {
                row.DefaultCellStyle.BackColor = Color.White;
            }
            else
            {
                selectedRows.Remove(clickedRow);
                row.Selected = true;
                row.DefaultCellStyle.BackColor = Color.Blue;
            }
        }
    }

    private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
    {
        foreach (DataGridViewRow row in dataGridView1.Rows)
        {
            if (row.DefaultCellStyle.BackColor == Color.Blue)
            {
                row.Selected = true;
            }
        }
    }

2 个答案:

答案 0 :(得分:0)

您必须设置启用datagridview的多选dataGridView.MultiSelect = true;

答案 1 :(得分:0)

熟悉使用调试器,您将能够找到问题所在。

您正在清除循环中的选择

foreach (DataGridViewRow row in dataGridView1.Rows)
{
}

重新考虑其中的if-else逻辑,你会明白为什么。当您不想时,您正在清除以前的选择。