Я заполняю DropDownList из строго типизированного списка, и это работает нормально. Проблема в том, что я хочу сначала объединить два поля в списке, а затем поместить их в раскрывающийся список, т. Е. Имя + Фамилия. Я попробовал несколько вещей, которые не удались, так что может кто-нибудь помочь этому новичку.
Это пример того, что я делаю.
private List<Customer> _CustomerList = new List<Customer>();
ddlCustomer.DataSource = _CustomerList;
ddlCustomer.DataTextField = "FirstName";
ddlCustomer.DataValueField = "CustomerKey";
ddlCustomer.DataBind();
это работает, но мне нужно первое и последнее вместе, и я не могу манипулировать этими данными в объекте Customer.
Ответ 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
Ответ 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
Я согласен со Скоттом... это, казалось бы, самый простой способ, и у него будет на один объект меньше, за которым нужно следить.