C#组合框-“已删除的实体”?

时间:2018-11-27 22:25:12

标签: c# database select combobox dropdown

对于任何提供select字段且由某个数据源填充的应用程序来说,这都是一个难题:首先,一切正常,但是一旦应用程序老化,某些较旧的条目可能会被删除,从而导致问题是先前的select字段无法再访问所讨论的实体。

在打开的视图中,选择项指向已删除的数据行将(最佳情况)显示empty string

我们以某种方式设计了系统,即删除不是真正的删除操作,而仅仅是删除标志的设置。 (因此,所有信息仍然存在)

但是,将数据绑定与C#一起使用(甚至不使用)时,通用机制仍然无法涵盖最公然的用例(我认为):

  • 选择字段在创建包含对所涉及实体的引用的新对象时应显示所有未删除的实体。
  • 如果选择字段“天/月/年”,则“选择字段”(以相同的方式填充)应显示“已删除”实体。

对此是否有“方便”的解决方案?

当前,我们为每个数据源使用“代理方法”,如果不在“可用数据”集合中,它将重新加载已删除实体的数据-但是很难相信没有更好的方法来处理这样,因为这个问题几乎适用于所有语言?

2 个答案:

答案 0 :(得分:1)

在规范化的数据库中,您将受到ON DELETE NO ACTION/RESTRICT事件的约束,这将阻止从列表中删除引用的元素。这将迫使您决定对引用行要做什么。

使用手动控制的删除操作,可能已被触发器覆盖。由于没有实现这些功能,因此您只需要做一件事:在呈现UI之前使用选定的选项更新下拉列表。我的方法(在Java中,我不擅长C#):

List<String> options = getNonDeletedWhatever();
if (!options.contains(currentEntity.getWhatever())) {
    options.add(currentEntity.getWhatever());  // This optionally inserts an outdated value
}

或简单地:

Set<String> options = getNonDeletedWhatever();
options.add(currentEntity.getWhatever());      // This optionally inserts an outdated value

答案 1 :(得分:1)

我通过创建可用(未删除)项目列表来解决该问题,如果所选项目是已删除项目,则将该项目添加到列表中。

此列表成为我下拉菜单的数据源。

相关问题