带有LinqDataSource的DropDownList和一个空选项

时间:2008-11-10 16:11:22

标签: asp.net linq drop-down-menu

是否有一些优雅的方法可以将空选项添加到与LinqDataSource绑定的DropDownList中?

4 个答案:

答案 0 :(得分:8)

以下是如何在列表顶部添加值。它可以是空字符串,也可以是一些文本。

<asp:DropDownList ID="categories" runat="server" AppendDataBoundItems="True" AutoPostBack="True" DataSourceID="categoriesDataSource" DataTextField="CategoryName" DataValueField="CategoryID" EnableViewState="False">
    <asp:ListItem Value="-1">
       -- Choose a Category --
    </asp:ListItem>           
</asp:DropDownList>

确保设置DropDownList的AppendDataBoundItems = True。

答案 1 :(得分:1)

标记:

<asp:DropDownList ID="ddlQualQuestion" runat="server" DataSourceID="sdsQualQuestion" DataTextField="ShortQuestionText" DataValueField="QualificationQuestionKey" AutoPostBack="true" OnSelectedIndexChanged="ddlQualQuestion_SelectedIndexChanged" OnDataBound="ddlQualQuestion_DataBound" />;

代码背后:

protected void ddlQualQuestion_DataBound(object sender, EventArgs e)   
{  
  ddlQualQuestion.Items.Insert(0, new ListItem("", "0"));  
}  

答案 2 :(得分:1)

采取DOK提供的解决方案:

<asp:DropDownList ID="categories" runat="server" AppendDataBoundItems="True" AutoPostBack="True" DataSourceID="categoriesDataSource" DataTextField="CategoryName" DataValueField="CategoryID" EnableViewState="False">
    <asp:ListItem Value="-1">
       -- Choose a Category --
    </asp:ListItem>           
</asp:DropDownList>

另外,如果您不想强制用户进行选择,可以将方法添加到GridView的LinqDataSource中:

OnSelecting="myGridview_Selecting"

像这样添加代码:

protected void myGridview_Selecting(object sender, LinqDataSourceSelectEventArgs e)
{
    if (categories.SelectedValue == "-1")
    {
        e.WhereParameters.Remove("CategoryID");
    }
}

答案 3 :(得分:0)

我在IEnumerable<string>上提供了一个扩展方法,该方法将一个项目添加到列表的开头:

    public static IEnumerable<string> Prepend(this IEnumerable<string> data, string item)
    {
        return new string[] { item == null ? string.Empty : item }.Union(data);
    }

它的linq-y,因为它使用了linq扩展方法Union。它比这样做更清洁:

var result = new string[]{string.Empty}.Union(from x in data select x.ToString());