ASP.NET - 在下拉列表的顶部添加空白项

136
为什么下拉框没有显示我的空白选项?这是我的代码:
drpList.Items.Add(New ListItem("", ""))

With drpList
    .DataSource = myController.GetList(userid)
    .DataTextField = "Name"
    .DataValueField = "ID"
    .DataBind()
End With

编辑 - 我正在绑定到一个泛型列表,这可能是罪魁祸首吗?


1
这与以下相关:https://dev59.com/NXNA5IYBdhLWcg3wYMx- - mcfea
10个回答

285

数据绑定后:

drpList.Items.Insert(0, new ListItem(String.Empty, String.Empty));
drpList.SelectedIndex = 0;

或者,您可以实例化一个ListItem,将其Selected属性设置为true,然后像上面那样将其插入到drpList中。 - nikodaemus
3
这可能有助于寻找如何使用sqlDataSource数据的人。在我的案例中,我还需要添加“drpList.AppendDataBoundItems = true;”来将其绑定到Page_Load方法中的当前数据。 - sabastienfyrre

34

您可以使用 AppendDataBoundItems=true 来轻松添加:

<asp:DropDownList ID="drpList" AppendDataBoundItems="true" runat="server">
    <asp:ListItem Text="" Value="" />
</asp:DropDownList>

1
VS不喜欢<br/>标签,而我在没有它的情况下也能正常工作。这是一个非常干净的选项,我不知道为什么它没有更多的投票。 - Tony L.
运行得非常好,感谢设计时的解决方案。 - DataCat Robin
3
请勿忘记设置Selected="true"。 - Fandango68

25
数据绑定发生在您添加空白列表项之后,它会替换原有内容,因此您需要在控制器中将空白项添加到列表的开头,或在数据绑定之后添加。
编辑:
经过快速搜索,从ASP.Net 2.0开始,有一个名为“AppendDataBoundItems”的属性可以设置为true,以便追加数据绑定项。
详情请参见:http://imar.spaanjaars.com/QuickDocId.aspx?quickdoc=281 或。

http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.listcontrol.appenddatabounditems.aspx


4
你需要注意的一点是,在每次回发后通过追加相同的数据来使下拉列表增长。请改进此问题。 - Keith Sirmons
空白项是不存在的,还是存在但只是未被选择? - Whisk
如果您在.aspx标记中有空白的,则可以在代码后端绑定,这将起作用。 - John Sheehan

13

我认为更好的方法是先插入空项,然后像你一直在做的那样绑定数据。但是你需要设置列表控件的AppendDataBoundItems属性。

我们使用以下方法将任何数据源绑定到任何列表控件...

public static void BindList(ListControl list, IEnumerable datasource, string valueName, string textName)
{
    list.Items.Clear();
    list.Items.Add("", "");
    list.AppendDataBoundItems = true;
    list.DataValueField = valueName;
    list.DataTextField = textName;
    list.DataSource = datasource;
    list.DataBind();
}

9
就像“Whisk”所说的那样,“AppendDataBoundItems”属性是关键。
protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        DropDownList1.AppendDataBoundItems = true;
        DropDownList1.Items.Insert(0, new ListItem(String.Empty, String.Empty));
        DropDownList1.SelectedIndex = 0;
    }
}

感谢“Whisk”。

5

完成数据绑定后,添加以下内容:

Dim liFirst As New ListItem("", "")
drpList.Items.Insert(0, liFirst)

3
看起来您正在添加一个空项,然后进行数据绑定,这会清空列表;尝试在数据绑定后插入空项。

当我这样做时,空白行会出现在底部。 - Saif Khan
你可以指定要插入的索引。看看JasonS的解决方案。 - AndyG
如果那不起作用,就将空白行插入到您的数据源中,然后进行数据绑定。 - Steven A. Lowe

3

简单的

最后

ddlProducer.Items.Insert(0, "");

1

ddlCategory.DataSource = ds;
ddlCategory.DataTextField = "CatName";
ddlCategory.DataValueField = "CatID";

Method 1:

ddlCategory.Items.Add(new ListItem("--请选择--", "-1"));
ddlCategory.AppendDataBoundItems = true;
ddlCategory.SelectedIndex = -1;

ddlCategory.DataBind();

Method 2:
ddlCategory.Items.Insert(0, new ListItem("-- 请选择 --", "0")); (测试通过)

0

你也可以将空白选择与具有内容的选择合并为一个联合:

select '' value, '' name
union
select value, name from mytable

回顾过去,除非作为替代方案,否则我不会推荐使用这种方法。我喜欢事件的灵活性(OnDataBound="mydropdown_DataBound"),但在我的当前情况下,我采用(AppendDataBoundItems="true")是为了简单起见。 - BitsAndBytes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接