我在SQL表中有一个值列表,用于弹出DropDownList,具有唯一的Integer作为每个项的值,String作为可见文本(通过SqlDataSource)。数据库中还有第三个字段,它是一个标志,用于指示列表项是否处于活动状态(DropDownList中未显示非活动项)
在下拉列表中进行的选择作为整数值存储在数据库中(作为构成整个记录的数据集的一部分),而不是文本值。
随着时间的推移,可以通过将项目标记为非活动来删除DropDownList中的项目。但是,仍然需要打开旧记录,这些记录可能有一个现在不活动的项目作为其数据的一部分......
我的问题是,确保旧记录下拉列表中包含缺失值的最佳方法是什么?
要想到的两种方法是:
仅使用当前活动项填充DropDownList,并在加载记录时捕获应用程序尝试选择不存在的值时,返回数据库以查看它应该是什么(文本值)和手动将其添加到下拉列表中。
...或
使用所有列表项(包括活动和非活动)填充DropDownList,加载记录,然后以编程方式删除所有非活动项(对于现在选择的任何项都是execpt)。
这些都不是特别有效,所以我想知道这种事情是否有最好的做法?
答案 0 :(得分:1)
有很多最佳方式可以做这类事情,我在这里定义了几个,如果您的下拉列表项数量少于200,请使用以下任意一项,让我们说下拉列表是产品强>
1)
i)在下拉列表中加载所有产品记录,并通过设置 visible = false 隐藏不活动的记录
i)当你加载一个用户记录而不是查找它的下拉列表值时,如果它可见而不是选择并欣赏,如果它不可见而不是通过设置其属性使其可见 visible = true 并选择它并在标志中设置其索引或ID,以便在执行/ users用户操作后再次更改其可见性( visible = false )。
2)
i)仅在下拉列表中加载活动产品记录
ii)加载用户记录时还会加载其产品详细信息(名称,ID, inactive_status)在sql中使用连接。
iii)签入该用户记录如果项目处于非活动状态,然后在下拉列表中添加其记录,因为您现在拥有所有详细信息,其中包含用户详细信息记录其他选择它。
重要提示:如果您下拉列表中的项目数百万而不是使用 ADVANCE SEARCH 技术
答案 1 :(得分:0)
我要做的第一件事就是质疑你的业务逻辑 - 如果一个项目被用作其他地方的活动行中的外键,你是否能够使一个项目处于非活动状态?如果你不使用它也不会删除所有外键吗?
要回答你的问题,虽然我会考虑第二个想法的变体,但在页面中过滤可能比直接使用SQL慢,所以我想你现在有类似的东西来填充下拉列表
SELECT * FROM Table WHERE Active = 1
您应该已经拥有了您的记录和外键值,因此我将其更改为此
SELECT * FROM Table WHERE Active = 1 OR PrimaryKey = [YourForeignKey]
然后,您将始终拥有所选项目,但也应该相当有效。