我的要求:在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;
}
}
}
答案 0 :(得分:0)
您必须设置启用datagridview的多选dataGridView.MultiSelect = true;
答案 1 :(得分:0)
熟悉使用调试器,您将能够找到问题所在。
您正在清除循环中的选择
foreach (DataGridViewRow row in dataGridView1.Rows)
{
}
重新考虑其中的if-else逻辑,你会明白为什么。当您不想时,您正在清除以前的选择。