在不按Control键的情况下选择多行

时间:2010-10-12 14:29:19

标签: c# winforms gridview selection

我有一个gridview,我可以通过按控制键选择多行。是否可以在不按下控制键的情况下实现相同目的。

6 个答案:

答案 0 :(得分:5)

由于.net默认操作也会更新slectedrows的{​​{1}},因此您需要有一个数组来保留旧选项:

datagridview

将在DataGridViewRow[] old; 更新(在默认.net操作修改您的选择之前):

CellMouseDown

之后,您可以在private void dataGridView1_CellMouseDown(object sender, DataGridViewCellMouseEventArgs e) { old = new DataGridViewRow[dataGridView1.SelectedRows.Count]; dataGridView1.SelectedRows.CopyTo(old,0); } 中进行更改(因为RowHeaderMouseClick是默认的datagridview RowHeaderSelect)或selectionmode使用CellMouseClick并重新选择旧的选定行:

FullRowSelect

编辑:更好的解决方案:
您需要实施自己的private void dataGridView1_RowHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e) { foreach (DataGridViewRow gr in old) { if (gr == dataGridView1.CurrentRow) { gr.Selected = false; } else { gr.Selected = true; } } } 来自原始版本,并覆盖datagridview& OnCellMouseDown以取消默认的取消选择操作并使其顺利进行。像这样建立一个新的类:

OnCellMouseClick

并在您的Form.Designer.cs中将Using System; Using System.Windows.Forms; public class myDataGridView:DataGridView { protected override void OnCellMouseDown(DataGridViewCellMouseEventArgs e) { //base.OnCellMouseDown(e); this.Rows[e.RowIndex].Selected = !this.Rows[e.RowIndex].Selected; } protected override void OnCellMouseClick(DataGridViewCellMouseEventArgs e) { //base.OnCellMouseClick(e); } } 对象DataGridView(如果这是名称)更改为datagridview1对象......

例如:更改

myDataGridView

private System.Windows.Forms.DataGridView dataGridView1;

并更改

private myDataGridView dataGridView1;

this.dataGridView1=new System.Windows.Forms.DataGridView()

答案 1 :(得分:1)

最简单的方法是在每一行中放置一个复选框,并在标题上添加一个“全选”复选框。

答案 2 :(得分:0)

您需要订阅鼠标点击事件,并通过将Selected属性设置为true来以编程方式选择行。

请记住,如果已经选择了行,则需要将其设置为false,以便用户可以取消选择该行。

答案 3 :(得分:0)

我从来没有这样做过,但是当你按住其中一个按钮的同时移动鼠标时,应该可以使用MouseDown和MouseUp事件来选择光标下的任何行。

答案 4 :(得分:0)

我必须在触摸屏上执行此操作,我只需要单击即可选择多选,而不需要难看的复选框。 为什么过于复杂,只保留一个不是索引

    private List<int> SelectedIndexs { get; set; }

然后在点击它们时从列表中添加或删除它们...... 然后查看datagrid并选择列表中的行。

    private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
    {
        if (SelectedIndexs.Contains(e.RowIndex))
        {
            SelectedIndexs.Remove(e.RowIndex);
        }
        else
        {
            SelectedIndexs.Add(e.RowIndex);
        }

        foreach (DataGridViewRow row in this.dataGridView1.Rows)
        {
            row.Selected = SelectedIndexs.Contains(row.Index);
        }
    }

答案 5 :(得分:0)

我知道这个回复有点晚了,但对所有人来说都是如此。

您可以使用InputSimulator并执行以下操作:

$ docker-compose up logstash