繁体   English   中英

DataGridView始终选择一行

[英]DataGridView that always has one row selected

我正在使用DGV显示带有文本标题的图像列表作为选项列表。 它们必须始终是列表中的唯一选择。 我无法找到一种方法来阻止用户通过按住Control键单击所选行来清除选择。

我失踪的设计师有没有可以做到这一点的财产?

如果我必须覆盖鼠标单击事件中的行为,还有其他方法可以清除当前需要覆盖的选择吗?

我能采取的第三种方法是否比我的第二种想法更简单?

最简单的方法是捕获SelectionChanged事件并检查用户是否取消选择所有行。 如果是,请重新选择以前选择的行。 从本质上讲,你正在拦截他们的行动并重新选择。 像这样的东西(代码未经测试但你会得到这个想法):

    DataGridViewRow last_selected_row;
    private void dgv_SelectionChanged(object sender, EventArgs e)
    {
            if (dgv.SelectedRows.Count == 0) 
                    last_selected_row.Selected = true;
            else
                    last_selected_row = dgv.SelectedRows[0];
    }

根据您的应用程序,最好存储行索引而不是对行本身的引用。 还要确保初始化last_selected_row并在删除任何行时更新它。

挂钩SelectionChanged事件的任何其他控件都需要安全地处理没有选择任何行的情况,以防它们在切换回事件之前触发。 他们可以立即返回,知道SelectionChanged会暂时再次发射,这是安全的。

您还可以继承DataGridView并覆盖OnSelectionChanged方法。 然后,您可以在事件触发之前重新选择最后选择的行(当您调用base.OnSelectionChanged时它将触发)。

只需处理datagridview的DataBindingComplete事件,如下所示:

private void datagridview1_DataBindingComplete(System.Object sender, System.Windows.Forms.DataGridViewBindingCompleteEventArgs e)

{
datagridview1.ClearSelection();
}

DGV获得了一个名为multiselect的属性,如果将其设置为false,则一次只能选择一个单元格/行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM