Раскрывающийся список привязки данных - начальное значение - PullRequest
28 голосов
/ 06 февраля 2009

Как установить начальное значение раскрывающегося списка с привязкой к данным в ASP.NET?

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

Ответы [ 8 ]

64 голосов
/ 06 февраля 2009

Я думаю, что вы хотите сделать это:

<asp:DropDownList ID="DropDownList1" runat="server" AppendDataBoundItems="true">
    <asp:ListItem Text="--Select One--" Value="" />   
</asp:DropDownList>

Убедитесь, что для "AppendDataBoundItems" установлено значение true , иначе вы очистите элемент списка "--Выберите один--", когда будете связывать свои данные.

Если для свойства «AutoPostBack» раскрывающегося списка установлено значение true , вам также необходимо установить для свойства «CausesValidation» значение true , а затем использовать «RequiredFieldValidator» чтобы убедиться, что опция --Select One-- не вызывает обратную передачу.

<asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ControlToValidate="DropDownList1"></asp:RequiredFieldValidator>
11 голосов
/ 13 августа 2010

Я знаю, что это старо, но сочетание этих идей приводит к очень элегантному решению:

Сохраните все настройки свойств по умолчанию для DropDownList (AppendDataBoundItems = false, элементы пустые). Затем обработайте событие DataBound следующим образом:

protected void dropdown_DataBound(object sender, EventArgs e)
{
    DropDownList list = sender as DropDownList;
    if (list != null)
        list.Items.Insert(0, "--Select One--");
}

Замедление в торте состоит в том, что этот один обработчик может быть общим для любого количества объектов DropDownList или даже помещен в служебную библиотеку общего назначения для всех ваших проектов.

2 голосов
/ 29 мая 2009

Я знаю, что у этого уже есть выбранный ответ - но я хотел бросить свои два цента. У меня есть выпадающий список с привязкой к данным:

<asp:DropDownList 
  id="country" 
  runat="server" 
  CssClass="selectOne" 
  DataSourceID="country_code" 
  DataTextField="Name" 
  DataValueField="CountryCode_PK"
></asp:DropDownList>
<asp:SqlDataSource 
  id="country_code" 
  runat="server" 
  ConnectionString="<%$ ConnectionStrings:DBConnectionString %>"
  SelectCommand="SELECT CountryCode_PK, CountryCode_PK + ' - ' + Name AS N'Name' FROM TBL_Country ORDER BY CountryCode_PK"
></asp:SqlDataSource>

В коде у меня есть это - (который выбирает Соединенные Штаты по умолчанию):

if (this.IsPostBack)
{
  //handle posted data
}
else 
{
  country.SelectedValue = "US";
}

Страница изначально загружается на основе значения 'US', а не пытается беспокоиться о selectedIndex (что, если в таблицу данных добавлен другой элемент - я не хочу перекодировать)

2 голосов
/ 06 февраля 2009

Что я делаю, это устанавливаю свойство text раскрывающегося списка ПОСЛЕ того, как я связываю его с данными. Примерно так:

   protected void LoadPersonComboBox()
    {
        var p = new PeopleBLL();

        rcmbboxEditPerson.DataSource = p.GetPeople();
        rcmbboxEditPerson.DataBind();
        rcmbboxEditPerson.Text = "Please select an existing person to edit...";
    }

Это делает видимое начальное видимое значение этого раскрывающегося списка, но на самом деле не является частью раскрывающегося списка, и при этом оно не выбирается.

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

привет друг, в этом случае вы можете использовать

AppendDataBound="true"

и после этого используйте элемент списка. например ,:

<asp:DropDownList ID="DropDownList1" runat="server" AppendDataBoundItems="true">
    <asp:ListItem Text="--Select One--" Value="" />   
</asp:DropDownList>

но проблема в том, что после второго выбора данные добавляются со старыми данными.

1 голос
/ 05 февраля 2011

Чтобы выбрать значение из выпадающего списка, используйте индекс как этот:

если у нас есть

<asp:DropDownList ID="DropDownList1" runat="server" AppendDataBoundItems="true"></asp:DropDownList>

вы бы использовали:

DropDownList1.Items[DropDownList1.SelectedIndex].Value

это вернет значение для выбранного индекса.

0 голосов
/ 05 августа 2016
dropdownlist.Items.Insert(0, new Listitem("--Select One--", "0");
0 голосов
/ 06 февраля 2009

Добавьте элемент и установите для его свойства «Выбранное» значение true. Возможно, вы также захотите установить для свойства «appenddatabounditems» значение true, чтобы ваше начальное значение не удалялось при привязке к данным.

Если вы говорите об установке начального значения в элементах, связанных с данными, то подключитесь к событию ondatabound и установите, какой индекс вы хотите выбрать = true, вы захотите обернуть его в «если не page.isPostBack, то…» .. "хотя

Protected Sub DepartmentDropDownList_DataBound(ByVal sender As Object, ByVal e As    System.EventArgs) Handles DepartmentDropDownList.DataBound
    If Not Page.IsPostBack Then
        DepartmentDropDownList.SelectedValue = "somevalue"
    End If
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...