Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Заполнение DropDownlist из строго типизированного списка

Автор вопроса: CommunityОтветов: 6

Я заполняю DropDownList из строго типизированного списка, и это работает нормально. Проблема в том, что я хочу сначала объединить два поля в списке, а затем поместить их в раскрывающийся список, т. Е. Имя + Фамилия. Я попробовал несколько вещей, которые не удались, так что может кто-нибудь помочь этому новичку.

Это пример того, что я делаю.

private List<Customer> _CustomerList = new List<Customer>();

ddlCustomer.DataSource = _CustomerList;
ddlCustomer.DataTextField = "FirstName";
ddlCustomer.DataValueField = "CustomerKey";
ddlCustomer.DataBind();

это работает, но мне нужно первое и последнее вместе, и я не могу манипулировать этими данными в объекте Customer.

  • На самом деле самым простым решением здесь было бы просто создать новое свойство в Customer CompoundName и использовать его для DatatextField. Fiur 04.07.2009
  • stackoverflow.com/questions/1006521/ bendewey 04.07.2009

drop-down-menu

Ответы

Ответ 1 · рейтинг 10 · tvanfosson

Попробуйте использовать перечисление анонимного объекта, созданного на лету.

var _CustomerList = customers.Select( c => new {
                                         Name = c.FirstName + " " + c.LastName,
                                         Key = c.CustomerKey
                                    });


ddlCustomer.DataSource = _CustomerList;
ddlCustomer.DataTextField = "Name";
ddlCustomer.DataValueField = "Key";
ddlCustomer.DataBind();

Возможно, вам придется добавить ToList() после Select, но я думаю, что вы можете привязать к IEnumerable<T>.

P.S. Для этого примера требуется .Net 3.5 Framework

Ответ 2 · Ankit

Вы можете создать свойство в классе Customer, которое объединяет FirstName и LastName, и вы можете использовать это свойство в своем ddlCustomer.DataTextField.

Ответ 3 · Justin Niessner

Мне еще предстоит найти хорошее решение этой проблемы. Я нашел следующий подход для работы лучше всего:

  • Создайте класс-оболочку вокруг Customer (либо наследуйте от Customer, если это возможно, либо создайте совершенно новый класс, который содержит объект Customer и предоставляет дополнительные свойства.

  • Создайте свойство в своем НОВОМ классе, которое объединяет два поля, к которым вы хотите привязать данные.

  • Привяжите раскрывающийся список к списку вашего пользовательского объекта.

Ответ 4 · jean

Чтобы отделить представление пользовательского интерфейса от базового объекта данных, вы можете создать объект-оболочку вокруг Customer, например CustomerForUI, с одним свойством, называемым FullName, а затем поместить список объектов CustomerForUI в пользовательский интерфейс.

Что-то типа:

public class CustomerForUI
{
    private string _FullName;

    public CustomerForUI(Customer c)
    {
       _FullName = c.FirstName + " " + c.LastName;
    }

    public string FullName
    {
       get {return _FullName;}
    }

    public string CustomerKey
    {  ... }
}

и создайте список объектов CustomerForUI с именем _UIList и:

ddlCustomer.DataSource = __UIList;
ddlCustomer.DataTextField = "FullName";
ddlCustomer.DataValueField = "CustomerKey";
ddlCustomer.DataBind();

Ответ 5 · ScottE

Есть ли причина, по которой вы не можете вручную создать элементы списка в раскрывающемся списке? Поскольку вы уже делаете это в коде, я не понимаю, почему бы и нет.

Просто перечислите свой бизнес-объект и используйте:

ddlCustomer.Items.Add(new ListItem("text" , "value"));

где текст - это имя и фамилия, соединенные вместе.

Ответ 6 · Nick DeMayo

Я согласен со Скоттом... это, казалось бы, самый простой способ, и у него будет на один объект меньше, за которым нужно следить.

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы