Dropdownlist Datasource и добавление дополнительного элемента из C # - PullRequest
3 голосов
/ 01 июля 2011

У меня есть DropDownList, который связан с DataSource на странице aspx. Мне нужно добавить еще один элемент, когда страница загружена.

Мой код:

<asp:LabelDropDownList ID="ddlVisualTemplate" runat="server" LabelText="Visual Template:"      DataSourceID="VisualTemplateDataSource" DataTextField="Name" DataValueField="Id" AutoPostBack="true" OnSelectedIndexChanged="ddlVisualTemplate_SelectedIndexChanged"/>                         

<asp:EntityDataSource ID="VisualTemplateDataSource" runat="server" 
     ConnectionString="name=Entities" 
     DefaultContainerName="Entities" EnableFlattening="False" 
     EntitySetName="tbEmailVisualTemplates">

И я пытаюсь добавить к нему дополнительный предмет:

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            ddlVisualTemplate.Items.Add(new ListItem("None", string.Empty));
        }
    }

Если я отлаживаю код, он проходит через него. Но когда страница отображается, раскрывающийся список не содержит "None".

Ответы [ 5 ]

12 голосов
/ 17 декабря 2012

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

Вы можете добавить значение «Нет», «Выбрать значение» и т. Д. В конструкторе (или в коде) ипредотвратить DataBind от перезаписи, установив AppendDataBoundItems="true".Это заставит DataBind добавлять, а не очищать.

Например, см. Сообщение Скотта Гатри ListControl.AppendDataBoundItems Свойство в ASP.NET 2.0 .

10 голосов
/ 01 июля 2011

Скорее всего, потому что вы добавляете элемент до DataBind(). Если вы хотите добавить элемент с

ddlVisualTemplate.Items.Add()

тогда вы должны сделать это после выпадающий список привязан.

Если вы посмотрите на http://msdn.microsoft.com/en-us/library/ms178472.aspx, тогда DataBind выполняется в PreRenderComplete. Таким образом, вы должны добавить элемент в какое-то событие, которое происходит после PreRenderComplete. Или вы можете сделать это на событии ddlVisualTemplate.DataBound.

6 голосов
/ 01 июля 2011

Вы можете легко это исправить, установив источник данных программно:

ddlVisualTemplate.DataSource = VisualTemplateDataSource;
ddlVisualTemplate.DataBind();

ddlVisualTemplate.Items.Add(new ListItem("None", string.Empty));

Кстати, эти элементы управления источниками данных, по моему мнению, неправильные в asp.net.Мне не нравится идея определения источника данных и предоставления контроля над соединениями БД со страницей aspx.Для лучшего способа сделать это просто просмотрите информацию о сессиях для каждого запроса, разделите задачи и n-уровневые приложения.

Обновление: вместо «VisualTemplateDataSource» вы можете напрямую вызывать данные.Я не знаю EF, но это может быть так: «DataContext.tbEmailVisualTemplates».Вы должны установить свой datacontext.И тогда вы сможете избавиться от элемента управления источником данных.

1 голос
/ 03 августа 2016

Используйте это для добавления элемента в связанный выпадающий список с индексом 0

ddlTicketType.Items.Insert(0, new ListItem("All", "0"));
0 голосов
/ 20 сентября 2011

Это исправило это для меня, но это ставит значение в конце.

protected void ddlTest_PreRender(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        ddlTest.Items.Add(new ListItem("All", string.Empty));
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...