如何在不按c#中的CTRL键的情况下多选DataGridView行?

时间:2016-03-16 13:18:09

标签: c#

我是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;
            }
        }
    }

1 个答案:

答案 0 :(得分:0)

尝试一下;保持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;
    }
}
相关问题