我是C#的新手,正在使用Windows窗体。
我在表单上有一个DataGridView控件,我需要允许用户在不按CTRL键且不使用复选框列的情况下多选行。我已经启用了mutli-select属性。
我知道这是在Here上重复的问题,但是我尝试了第一个答案(Bolu答案),并且可以工作,但是每次选择一行时datagridvied都会刷新并轻拂。
我想尝试“编辑:更好的解决方案”(在相同的答案中,它对我来说太复杂了,我不理解这些步骤。
我的问题:当我选择一行时,如何摆脱轻拂/刷新过程并使它平滑? (如下所示的代码),我也很高兴收到任何新的解决方案。请帮助我,谢谢
DataGridViewRow[] old;
private void dataGridView1_CellMouseDown(object sender, DataGridViewCellMouseEventArgs e)
{
old = new DataGridViewRow[dataGridView1.SelectedRows.Count];
dataGridView1.SelectedRows.CopyTo(old, 0);
}
private void dataGridView1_CellMouseClick(object sender, DataGridViewCellMouseEventArgs e)
{
foreach (DataGridViewRow gr in old)
{
if (gr == dataGridView1.CurrentRow)
{
gr.Selected = false;
}
else
{
gr.Selected = true;
}
}
}
尝试一下;保持datagridview
(在我的情况下为dgvTopics
)多选true
:
private void dgvTopics_CellMouseDown(object sender, DataGridViewCellMouseEventArgs e)
{
if (dgvTopics.Rows[e.RowIndex].Selected == true)
dgvTopics.Rows[e.RowIndex].ErrorText = "U";
else
dgvTopics.Rows[e.RowIndex].ErrorText = "S";
}
private void dgvTopics_CellMouseUp(object sender, DataGridViewCellMouseEventArgs e)
{
foreach (DataGridViewRow dgvr in dgvTopics.Rows)
{
if(dgvr.ErrorText == "S")
dgvr.Selected = true;
else
dgvr.Selected = false;
}
}