0

我在 SQL 表中有一个值列表,用于填充 DropDownList,具有唯一的整数作为每个项目的值和字符串作为可见文本(通过 SqlDataSource)。数据库中还有第三个字段,它是一个标志,指示列表项是否处于活动状态(非活动项目不会显示在 DropDownList 中)

在下拉列表中所做的选择作为整数值(作为构成整个记录的数据集的一部分)存储在数据库中,而不是文本值。

随着时间的推移,可以通过将 DropDownList 中的项目标记为非活动来移除这些项目。但是,仍然需要打开旧记录,这些记录可能有一个现在不活动的项目作为其数据的一部分......

我的问题是,确保旧记录下拉列表中包含缺失值的最佳方法是什么?

想到的两种方法是:

仅使用当前活动的项目填充 DropDownList 并在加载记录时捕获应用程序尝试选择不存在的值时,返回到数据库以查看它应该是什么(文本值)并手动添加它进入下拉菜单。

或者...

使用所有列表项(活动和非活动)填充 DropDownList,加载记录,然后以编程方式删除所有非活动项(对现在选择的任何项执行)。

这些似乎都不是特别有效,所以我想知道这种事情是否有最佳实践?

4

2 回答 2

1

有很多最佳方法来做这类事情,我在这里定义了其中的几个,如果您的下拉列表项目数少于 200,请使用以下任何一种,假设下拉列表是产品

1)
      i) 加载下拉列表中的所有产品记录,并通过设置visible=false
隐藏不活动的      记录 i) 当您加载用户记录时,如果其可见则查找其下拉列表值而不是选择它并享受,如果不是可见而不是通过设置其属性visible=true使其可见并选择它并在标志中设置其索引或 id 以在您/用户执行所需的操作后再次 更改其可见性( visible=false )。

2)
      i) 仅加载下拉列表中的活动产品
记录      ii) 在加载用户记录时,还使用​​sql 中的联接加载其产品详细信息(名称、id、inactive_status) 。iii)如果项目处于非活动状态,则      签入该用户记录,然后将其记录添加到下拉列表中,因为您现在拥有其所有详细信息以及用户详细信息记录,否则只需选择它。

重要提示:如果您的下拉列表中有数百万个项目,则使用ADVANCE SEARCH技术

于 2012-05-04T12:12:00.780 回答
0

我要做的第一件事是质疑您的业务逻辑 - 如果某个项目在其他地方的活动行中用作外键,您是否能够使该项目处于非活动状态?如果你让它不活动,它不应该删除所有外键吗?

要回答你的问题,虽然我会采用第二个想法的变体,但在页面中进行过滤可能比直接使用 SQL 慢,所以我猜你现在有这样的东西来填充下拉列表

SELECT * FROM Table WHERE Active = 1

你应该已经有了你的记录和外键值,所以我会把它改成这个

SELECT * FROM Table WHERE Active = 1 OR PrimaryKey = [YourForeignKey]

然后您将始终拥有选定的项目,但也应该相当有效。

于 2012-05-04T11:41:00.083 回答