2009-07-04 1 views
1

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

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

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

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

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

+1

На самом деле самым простым решением здесь было бы просто создать новое свойство в Customer CompoundName и использовать его для DatatextField. – Fiur

+0

http://stackoverflow.com/questions/1006521/how-do-i-bind-a-combo-so-the-displaymember-is-concat-of-2-fields-of-source-datata – bendewey

ответ

0

Вы можете создать свойство в классе Customer, который конкатенировать ПгвЬЫате и LastName, и вы можете использовать это свойство в вашем ddlCustomer.DataTextField

+0

Он говорит в сообщение, что он не может maniuplate данные в объекте Customer (я предполагаю, что у него нет возможности добавить новое свойство) –

0

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

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

  • Создать свойство в новый класс, который сцепляет два поля, которые вы хотите, чтобы привязка.

  • Bind выпадающий список в список вашего пользовательского объекта.

10

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

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

+0

Не нужно добавлять ToList(), потому что он будет перечисляться после привязки –

+0

Вот что я подумал, но единственные примеры, которые я смог найти на MSDN, связанный с IList, Список , Сборник и т. Д. – tvanfosson

+0

Спасибо, тванфоссон ... прошу простить мое невежество (я «из фона сценария asp) var doesn Кажется, что это ключевое слово в C#, если бы я использовал объект здесь? и клиенты. Выберите, хотите ли вы обратиться к объекту моего клиента напрямую или к списку, который возвращается? padawan –

0

Чтобы отделить представление пользовательского интерфейса от базового объекта данных, вы можете создать объект-оболочку вокруг Клиента, например 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(); 
0

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

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

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

где текст является первым и фамилия сцепляются вместе.

0

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

 Смежные вопросы

  • Нет связанных вопросов^_^