如何绑定到一个下拉列表中没有价值(How to bind to a dropdown list wi

2019-10-30 01:54发布

我已经写了一些代码,做一个GridView的批量更新。 在我的模板领域的GridView的一个具有下降downlist:

<asp:DropDownList ID="DDLCategories" runat="server" 
  DataSourceID="odsCategories" DataTextField="txtCategory" 
  DataValueField="intCategoryID" SelectedValue='<%# Bind("intCategoryID") %>'>
  <asp:ListItem Text="Please Select an item" Value ="-1"></asp:ListItem>
</asp:DropDownList>

在我的数据库我有800条记录。 但是只有极少数的已分配“intCategoryID”的价值。 其余的都是NULL。

批量更新的全部原因是更新所有的“intCategoryID”字段和分配类别ID给每个记录。

因为不是所有的OD“intCategoryID”已分配的值,我得到一个错误,当我尝试渲染页面。 下拉列表失败。 这里是信息:

'DDLCategories' has a SelectedValue which is invalid because it does not exist in the list of items.
Parameter name: value 

有没有一种方法,我可以将空类别有“-1”我在下拉列表中创建一个值的列表项? 也就是说,如果“intCategoryID” ISNULL则有“请选择一个项目”选择,否则选择选择的值。

Answer 1:

看看这篇文章 。 它覆盖了DDL和失踪的SelectedValue检查装订方法。 您可能需要如果你不使用一个FormView修改它,但我想你会得到一个良好的开端与该职位。



Answer 2:

我试图给你指给我看的代码转换,但我仍然只有新的C#和ASP.NET为此我有一些错误。

你所指出的代码是指一个FormView,但是我特林将其更改为一个gridview。

这是我到目前为止的代码:

protected void GridView1_PreRender(object sender, EventArgs e)
    {
        DataRowView rowView = (DataRowView)(GridView1.DataItem);
        if ((rowView != null) &&
            ((DropDownList)(GridView1.FindControl("DDLCategories")).Items.FindByValue(rowView["intCategoryID"].ToString()) != null));
        {
            (DropDownList)(GridView1.FindControl("DDLCategories")).SelectedValue = rowView["Category"].ToString();
        }
    }



protected void GridView1_RowUpdated(object sender, GridViewUpdatedEventArgs e)
{
    e.NewValues["intCategoryID"] = (DropDownList)(GridView1.FindControl("DDLCategories")).SelectedValue;
}

能否请您指出,当我产生错误。



Answer 3:

最简单的办法就是让AppendDataBoundItems并添加对应于一个空的INTEM。 它可能具有的“-1”或其他任何价值,你是不是在你的列表值的价值。 现在,所有你需要做的就是让有条件的约束力:

(Eval("intCategoryID") != null && Eval("intCategoryID").ToString().Length>0) ? Eval("intCategoryID").ToString() : "-1"


Answer 4:

为了解决这个问题,你可以创建自定义的DropDownList服务器控件。

using System.Web.UI.WebControls;

namespace CustomNamespace
{
    // Dropdownlist which does not throw an exception if SelectedValue does not exist
    public class CustomDropdownList : DropDownList
    {
        protected override void PerformDataBinding(System.Collections.IEnumerable dataSource)
        {
            try
            {
                base.PerformDataBinding(dataSource);
            }
            catch (System.ArgumentOutOfRangeException)
            {
            }
        }
    }
}

然后,使用自定义下拉列表的aspx页面上代替。 如果你的项目被称为“CustomProject”,添加这个在aspx文件的第二行:

<%@ Register assembly="CustomProject" namespace="CustomNamespace" tagprefix="custom" %>

然后替换为自定义的所有下拉列表标签实例:

<custom:CustomDropdownList ID="ddlId" runat="server" SelectedValue='<%# Bind("column") %>' DataSourceID="dataSourceDropdown" DataTextField="field" DataValueField="value" />


文章来源: How to bind to a dropdown list with no value