Подтвердить что ты не робот

Список данных ASP.NET ListItem для DropDownList

Я только что наткнулся на эту причудливую вещь, которую я ожидал работать по-другому (логично), но это не так. Это ошибка или "функция"?

Итак, есть DropDownList, который я заполняю в Codebehind списком ListItem. Каждый новый ListItem получает 2 аргумента, которые в соответствии с документацией, предоставляемой intellisense, соответствуют его тексту и значению:

List<ListItem> users = new List<ListItem>();
foreach (SubscriptionUser su in subscriptionDetails.UserList)
{
    users.Add(new ListItem(su.FirstName + " " + su.LastName, su.EmailAddress));
}
ddlPrimaryContact.DataSource = users;
ddlPrimaryContact.DataBind();

Теперь, может ли кто-нибудь объяснить мне, почему привязка данных DropDownList и текст и значение установлены одинаково (текст ListItem) вместо использования ListItem.Text в качестве значения Text и ListItem.Value в качестве значения?

ARGH!! http://www.freeimagehosting.net/uploads/fe65d0e7d5.jpg

Или я делаю что-то неправильно?

4b9b3361

Ответ 1

Привет, когда привязка данных (к чему-либо) вам нужно установить DataTextField и DataValueField вашего DropDownList. В вашем случае вы должны использовать следующий код

List<ListItem> users = new List<ListItem>();
foreach (SubscriptionUser su in subscriptionDetails.UserList)
{
    users.Add(new ListItem(su.FirstName + " " + su.LastName, su.EmailAddress));
}
ddlPrimaryContact.DataTextField = "Text";
ddlPrimaryContact.DataValueField = "Value";
ddlPrimaryContact.DataSource = users;
ddlPrimaryContact.DataBind();

Ответ 2

Вы должны связать свой раскрывающийся список как:

ddlPrimaryContact.DataSource = users;
ddlPrimaryContact.DataTextField = "Value";
ddlPrimaryContact.DataValueField = "Text";
ddlPrimaryContact.DataBind();

Если вы спросите, почему, насколько я знаю, элементы управления привязкой данных берут тексты и значения (если они не поставляются, как указано выше), вызывая метод ToString для каждого элемента в коллекции данных. Поэтому каждый ListItem в вашей коллекции возвращает его свойство Text методом ToString.

Ответ 3

Или, альтернативно, вы можете связать его таким образом. (Предполагая, что вы можете добавить свойство readOnly в SubscriptionUser с именем FullName (которое возвращает su.FirstName + "" + su.LastName)

ddlPrimaryContact.DataSource = subscriptionDetails.UserList;
ddlPrimaryContact.DataBind();

то на странице ASPX поставьте:

<asp:DropDownList id="ddlPrimaryContact" runat="server" DataTextField="FullName" DataValueField="EmailAddress" />

Ответ 4

вы можете также добавить список listitem в раскрывающийся список.

List<ListItem> users = new List<ListItem>();
        for (int count = 0; count < 10; count++)
        {
            ListItem li = new ListItem("List " + count.ToString(), count.ToString());
            ddl.Items.Add(li);
        }

Ответ 5

Есть способ добавить элементы ListItem в DropDownList и иметь .NET, автоматически совместимый с текстом ListItem с текстом DropDownList, а также для значения:

List<ListItem> users = new List<ListItem>();
// fill in list
ddlUsers.Items.AddRange(users.ToArray());