c# - 如果我在一个表单上有多个 datagridviews,我将如何允许一次仅在一个表单上激活行选择?
问题描述
我有两个数据网格视图,它们同时显示两个单独的存储过程,都在同一个表单上。我将他们的“SelectionMode”属性设置为“FullRowSelect”。
但是,我希望在两个 dgv 之间一次只能选择一行。因此,如果有人在 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();
}
}
}
如果 DataGridViews 在同一个容器内,即相同的表单,而不是在不同的面板等中,这将起作用。
您必须在设计器或设计器代码中指定相同的处理程序,即
//
// dataGridView1
//
...
this.dataGridView1.SelectionChanged += new System.EventHandler(this.dataGridView_SelectionChanged);
//
// dataGridView2
//
...
this.dataGridView2.SelectionChanged += new System.EventHandler(this.dataGridView_SelectionChanged);
推荐阅读
- javascript - 有没有办法避免嵌套的 switch 语句
- ocaml - 为什么 Num 的有理数打印为
? - python - How to detect records that appear on a larger interval than the specified one?
- selenium-webdriver - 如何在 webdriverio 中使用重新运行服务?
- c# - 如何比较两个列表的相同值
- python - 在熊猫中爆炸具有相同嵌套键的行
- json - 角度:无法读取未定义的属性“x”
- typescript - 如果 keyof 则推断函数签名
- javascript - 如何修复拖放测验?
- mqtt - 如何在没有应用名称的情况下将直接命令从 Google Home 发送到自定义智能设备?