DropDownList с LinqDataSource и пустой опцией - PullRequest
5 голосов
/ 10 ноября 2008

Есть ли какой-нибудь элегантный способ добавить пустую опцию в DropDownList, связанный с LinqDataSource?

Ответы [ 4 ]

8 голосов
/ 10 ноября 2008

Вот как добавить значение вверху списка. Это может быть пустая строка или какой-либо текст.

<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 голос
/ 22 января 2013

Принимая решение ДОК при условии:

<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>

Дополнительно, если вы не хотите заставлять пользователя делать выбор, вы можете добавить метод к LinqDataSource вашего GridView:

OnSelecting="myGridview_Selecting"

Добавьте код, подобный этому:

protected void myGridview_Selecting(object sender, LinqDataSourceSelectEventArgs e)
{
    if (categories.SelectedValue == "-1")
    {
        e.WhereParameters.Remove("CategoryID");
    }
}
1 голос
/ 13 августа 2010

Разметка:

<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"));  
}  
0 голосов
/ 10 ноября 2008

Я бы предоставил метод расширения для 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());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...