[英]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.