【问题标题】:SelectedValue is invalid...I know why but I dont know how to handle it?SelectedValue 无效...我知道为什么但我不知道如何处理?
【发布时间】:2013-09-13 14:55:33
【问题描述】:

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

基本上sql就是这个效果:

SELECT EmployeeName FROM Employee WHERE Inactive=0

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

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

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

所以因为页面引用了一个不活跃的员工,我得到了错误:

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

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

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

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

我需要在 RowDataBound 事件中处理这个吗?或者是否有一些 asp.net 标记只是说如果它的值不好就忽略?比如:

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

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

【问题讨论】:

  • 你能用你如何绑定 DropDownList 的代码更新问题吗?

标签: c# asp.net gridview webforms


【解决方案1】:

从 aspx 的下拉列表中删除选定的值。定义数据源和数据成员,如下面的代码。希望对您有所帮助..

 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)
             {
                             }

【讨论】:

    【解决方案2】:

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

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

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

    SELECT IsNull(EmployeeName,0) AS EmployeeName FROM Employees
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-05-05
      • 2012-09-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多