Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 带有LinqDataSource和空选项的DropDownList_Asp.net_Linq_Drop Down Menu - Fatal编程技术网

Asp.net 带有LinqDataSource和空选项的DropDownList

Asp.net 带有LinqDataSource和空选项的DropDownList,asp.net,linq,drop-down-menu,Asp.net,Linq,Drop Down Menu,是否有一些优雅的方法可以将空选项添加到与LinqDataSource绑定的DropDownList中?下面介绍如何在列表顶部添加值。它可以是空字符串,也可以是一些文本 <asp:DropDownList ID="categories" runat="server" AppendDataBoundItems="True" AutoPostBack="True" DataSourceID="categoriesDataSource" DataTextField="CategoryName" D

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

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

<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

我会在
IEnumerable
上提供一个扩展方法,在列表开头添加一个项目:

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

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

以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>
添加代码,如下所示:

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

为清晰起见,为什么不将该建议添加到示例代码中?谢谢您的建议,Keltex。我认为我的原始版本强调了必须更改属性这一点,但显然没有。事实证明,只要将AppendDataBoundItems设置为true,就会在开头添加一个空选项。比如说它是默认存在的还是什么。如果我添加一个asp:ListItem,我将得到两个空选项。无论如何,你的解决方案很酷,谢谢。
<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>
OnSelecting="myGridview_Selecting"
protected void myGridview_Selecting(object sender, LinqDataSourceSelectEventArgs e)
{
    if (categories.SelectedValue == "-1")
    {
        e.WhereParameters.Remove("CategoryID");
    }
}