簡體   English   中英

如何在datagridview C#中使用shift和Ctrl鍵選擇多行

[英]how select multiple row using shift and Ctrl key in datagridview C#

在此處輸入圖片說明在此處輸入圖片說明 我的要求:在datagridview中,我需要通過單擊行標題來選擇行,並且所選行應保持不變,直到我也將選擇單元格的同時單擊另一個行標題。

我的問題:我無法使用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;
            }
        }
    }

您必須設置為啟用datagridview的multiselect dataGridView.MultiSelect = true;

熟悉使用調試器,您將能夠找出問題所在。

您正在清除循環中的選擇

foreach (DataGridViewRow row in dataGridView1.Rows)
{
}

重新考慮其中的if-else邏輯,您會明白為什么。 如果您不打算這樣做,則正在清除以前的選擇。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM