如果我在一个表单上有多个数据网格视图,我将如何允许行选择一次只在一个上处于活动状态?

If I have multiple datagridviews on one form, how would I allow a row selection to be active on only one at a time?

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

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

private void datagridview1_SelectionChanged(object sender, EventArgs e)

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

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();
        }
    }
}

如果 DataGridView 位于同一个容器内,即相同的表单,而不是在不同的面板等中,这将有效。

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

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