首页 > 解决方案 > 如果我在一个表单上有多个 datagridviews,我将如何允许一次仅在一个表单上激活行选择?

问题描述

我有两个数据网格视图,它们同时显示两个单独的存储过程,都在同一个表单上。我将他们的“SelectionMode”属性设置为“FullRowSelect”。

但是,我希望在两个 dgv 之间一次只能选择一行。因此,如果有人在 dgv A 上选择了一行,我希望 dgv B 中的选定行取消突出显示或停用。如果有人选择了 dgv B 中的一行,我希望 dgv A 中突出显示的行取消选择或停用。有没有办法基本上分享一个

private void datagridview1_SelectionChanged(object sender, EventArgs e)

在两个单独的数据网格视图之间?我不确定从哪里开始,所以我没有代码示例。对此的任何帮助表示赞赏。谢谢!!

标签: c#.netdatagridview

解决方案


选择时dataGridView1,调用dataGridView2.ClearSelection()

您提到了一个事件处理程序来处理两者,您可以这样做。您可以编写一些代码来查找除您单击的那个之外的所有其他 DataGridView,并清除它们的选择。

private void dataGridView_SelectionChanged(object sender, EventArgs e)
{
    var s = (DataGridView)sender;
    if (s.SelectedRows.Count > 0)
    {
        var otherDataGridViews = this.Controls.OfType<DataGridView>().Except(new[] { s });
        foreach (var dgv in otherDataGridViews)
        {
            dgv.ClearSelection();
        }
    }
}

如果 DataGridViews 在同一个容器内,即相同的表单,而不是在不同的面板等中,这将起作用。

您必须在设计器或设计器代码中指定相同的处理程序,即

// 
// dataGridView1
// 
...
this.dataGridView1.SelectionChanged += new System.EventHandler(this.dataGridView_SelectionChanged);
// 
// dataGridView2
// 
...
this.dataGridView2.SelectionChanged += new System.EventHandler(this.dataGridView_SelectionChanged);

推荐阅读