我在 asp.net 中有一个 gridview / datagrid,它有模板列(我不使用数据绑定列)。这些列之一的内部是一个下拉列表。基本上,这个下拉列表的数据源是一个存储我们的活跃用户的查询......由于数据集的大小,我们不想显示所有非活跃用户和活跃用户,因此我们限制为活跃用户。
基本上sql就是这样的:
SELECT EmployeeName FROM Employee WHERE Inactive=0
这很好用,但我有一条记录实际上引用了一个不活跃的员工,这种情况很少发生,但在某些情况下可能会发生这种情况。在页面上使用下拉列表的网格视图之外,我可以通过尝试/捕获异常并重新加载下拉列表来轻松处理此问题,以便它也可以包含非活动员工。
但是在gridview内部我不知道如何“捕捉”这个异常,因为该列只有一个:
SelectedValue ='<%# Eval("EmployeeName") %>'
所以因为页面引用了一个不活跃的员工,我得到了错误:
ddlEmployees' 有一个无效的 SelectedValue,因为它不存在于项目列表中。参数名称:值
说明:执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。
异常详细信息:System.ArgumentOutOfRangeException:“ddlEmployees”有一个无效的 SelectedValue,因为它不存在于项目列表中。参数名称:值
所以我知道为什么会发生这种情况,如果这是gridview之外的下拉列表,我实际上可以解决这个问题,但是因为它在gridview中我不知道如何处理这个?
我需要在 RowDataBound 事件中处理这个吗?或者是否有一些 asp.net 标记只是说如果它的值不好就忽略?就像是:
<asp:DropDownList ID="ddlEmployees" runat="server" SelectedValue='<%# Eval("Employee") == null ? 0 : Eval("Employee") %>'
我什至可以使用三元运算符吗?