[英]One deselected row always get inserted to Database along with selected rows from 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.