Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ASP.NET DropDownList-如何处理缺少的值?_Asp.net_Drop Down Menu_Selected - Fatal编程技术网

ASP.NET DropDownList-如何处理缺少的值?

ASP.NET DropDownList-如何处理缺少的值?,asp.net,drop-down-menu,selected,Asp.net,Drop Down Menu,Selected,我在一个SQL表中有一个值列表,用于popluate一个DropDownList,每个项的值都是一个唯一的整数,可见文本是一个字符串(通过SqlDataSource)。数据库中还有第三个字段,它是一个标志,用于指示列表项是否处于活动状态(非活动项不显示在DropDownList中) 下拉列表中所做的选择将作为其整数值(作为构成整个记录的数据集的一部分)而不是文本值存储在数据库中 随着时间的推移,DropDownList中的项目可能会通过将项目标记为非活动来删除。但是,仍然需要打开旧记录,其中可能

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

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

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

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

突然想到的两种方法是:

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

或者

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


这两种方法似乎都不是特别有效,所以我想知道是否有这种方法的最佳实践?

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

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

SELECT * FROM Table WHERE Active = 1
你应该已经有了你的记录和外键值,所以我会把它改成这个

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

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

有许多最佳方法可以做这类事情,我在这里定义了其中的两种,如果您的下拉列表项目数少于200,请使用以下任何一种,比如说下拉列表是属于产品的

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

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


重要提示:如果您的下拉列表中有数以百万计的项目,而不是使用高级搜索技术

我使用活动/非活动标志的原因是(仅举个例子)上周我的下拉列表包括“猫”、“狗”和“鱼”,并且可以使用这些选项中的任何一个保存记录,但从本周起,我不再出售“Fish”,因此我将其标记为非活动,这样它就不会出现在下拉列表中,但我仍然需要能够为我的旧数据引用它(因此保留外键关系)。在我的页面中,DropDownLists是在加载记录之前进行数据绑定的,所以我认为这可能是我出错的地方?只是想一想,可能任何具有Fish外键的记录都是旧数据(即遗留数据),因此您不会真的想对其进行任何更改?那么,为什么不只返回选定的值呢?无论哪种方式,如果你想让它更有效率,我会在记录加载后绑定下拉列表。