SelectedValue无效......我知道为什么,但我不知道如何处理它?

时间:2013-09-10 02:15:39

标签: c# asp.net gridview webforms

我在asp.net中有一个gridview / datagrid,它有模板列(我不使用数据绑定列)。 其中一列中有一个下拉列表。基本上这个下拉列表的数据源是一个存储我们活动用户的查询...我们不希望显示所有非活动用户和活动用户,因为数据集的大小因此我们限制为活动用户。

基本上sql是这样的:

SELECT EmployeeName FROM Employee WHERE Inactive=0

这样可以正常工作,但我有一条实际上引用了非活动员工的记录,这种情况很少发生,但有时会出现这种情况。在网格视图之外使用页面上的下拉列表,我可以通过尝试/捕获异常并重新下载下拉列表来轻松处理此问题,以便它也可以包含非活动员工。

但是在gridview内部,我不知道如何“捕获”这个异常,因为该列只有一个:

SelectedValue ='<%# Eval("EmployeeName") %>'

因为该页面引用了一个非活动的员工,我收到错误:

  

ddlEmployees'有一个无效的SelectedValue,因为它没有   存在于项目列表中。参数名称:值

     

描述:执行期间发生了未处理的异常   当前的网络请求。请查看堆栈跟踪了解更多信息   有关错误的信息以及它在代码中的起源。

     

异常详细信息:System.ArgumentOutOfRangeException:'ddlEmployees'   具有一个无效的SelectedValue,因为它不存在   物品清单。参数名称:值

所以我知道为什么会发生这种情况,如果这是gridview之外的下拉列表,我实际上可以解决这个问题,但是因为它在gridview中我不知道如何处理它?<​​/ p>

我是否需要在RowDataBound事件中处理此问题?或者是否有一些asp.net标记只是说如果它的值不好就会忽略?类似的东西:

<asp:DropDownList ID="ddlEmployees" runat="server" SelectedValue='<%# Eval("Employee") == null ? 0 : Eval("Employee") %>'

我甚至可以使用三元运算符吗?

2 个答案:

答案 0 :(得分:1)

将此项用于您的下拉列表。我假设EmployeeName在这里是一个列,让我们假设它可以有空值。 [提供正确的列名]

SelectedValue='<%#String.IsNullOrEmpty(Convert.ToString(Bind("EmployeeName")))
                                                 ? "0" : Bind("EmployeeName") %>'

此外,您可以在Sql语句本身中执行此操作:

SELECT IsNull(EmployeeName,0) AS EmployeeName FROM Employees

答案 1 :(得分:1)

从aspx.Define数据源和数据库中的下拉列表中删除所选值,如下面的代码所示。希望它能帮到你..

 try
             {

                 if (e.Row.RowType == DataControlRowType.Header)
                 {
                     DropDownList ddl = (DropDownList)e.Row.FindControl("ddlSorting");
                     SqlDataAdapter da = new SqlDataAdapter("SELECT ID,EmployeeName FROM Employee WHERE Inactive=0", con);
                     DataSet ds = new DataSet();
                     da.Fill(ds);
                     ddl.DataSource = ds.Tables[0];
                     ddl.DataTextField = "EmployeeName";
                     ddl.DataValueField = "ID";
                     ddl.DataBind();
                 }
             }
             catch (Exception ex)
             {
                             }