对于任何提供select
字段且由某个数据源填充的应用程序来说,这都是一个难题:首先,一切正常,但是一旦应用程序老化,某些较旧的条目可能会被删除,从而导致问题是先前的select
字段无法再访问所讨论的实体。
在打开的视图中,选择项指向已删除的数据行将(最佳情况)显示empty string
。
我们以某种方式设计了系统,即删除不是真正的删除操作,而仅仅是删除标志的设置。 (因此,所有信息仍然存在)
但是,将数据绑定与C#一起使用(甚至不使用)时,通用机制仍然无法涵盖最公然的用例(我认为):
对此是否有“方便”的解决方案?
当前,我们为每个数据源使用“代理方法”,如果不在“可用数据”集合中,它将重新加载已删除实体的数据-但是很难相信没有更好的方法来处理这样,因为这个问题几乎适用于所有语言?
答案 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)
我通过创建可用(未删除)项目列表来解决该问题,如果所选项目是已删除项目,则将该项目添加到列表中。
此列表成为我下拉菜单的数据源。