2009-01-03 3 views
10

Есть ли способ сделать свойство datatextfield выпадающего списка в asp.net через C#, состоящий из более чем одного свойства объекта?dropdownlist DataTextField состоит из свойств?

public class MyObject 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public string FunkyValue { get; set; } 
    public int Zip { get; set; } 
} 

protected void Page_Load(object sender, EventArgs e) 
{ 
    List<MyObject> myList = getObjects(); 
    ddList.DataSource = myList; 
    ddList.DataValueField = "Id"; 
    ddList.DataTextField = "Name"; 
    ddList.DataBind(); 
} 

Я хочу, например. не используйте «Имя», но «Имя (Zip)», например.

Несомненно, я могу изменить класс MyObject, но я не хочу этого делать (потому что класс MyObject находится в классе модели и не должен делать то, что мне нужно в пользовательском интерфейсе).

ответ

22

Добавить еще одно свойство к классу MyObject и связываются с этим свойством:

public string DisplayValue 
{ 
get { return string.Format("{0} ({1})", Name, Zip); } 
} 

Или, если вы не можете изменить MyObject, создать объект-оболочку в слой представления (только для отображения). Это также может быть сделано с помощью некоторых LINQ:

List<MyObject> myList = getObjects(); 
ddList.DataSource = (from obj in myList 
        select new 
        { 
         Id = obj.Id, 
         Name = string.Format("{0} ({1})", obj.Name, obj.Zip) 
        }).ToList(); 
ddList.DataValueField = "Id"; 
ddList.DataTextField = "Name"; 
ddList.DataBind(); 

(жаль, что я не Visual Studio доступны, поэтому могут быть ошибки в коде)

4

Я рекомендовал бы читать это: http://martinfowler.com/eaaDev/PresentationModel.html

По существу вы хотите создать класс, который представляет привязку к определенному пользовательскому интерфейсу. Таким образом, вы должны сопоставить свою модель (My Object в вашем примере) с объектом ViewModel и затем связать выпадающий список таким образом. Это крутой способ подумать о разделении проблем.

EDIT: Вот еще одна серия блог на ViewModel: http://blogs.msdn.com/dancre/archive/2006/10/11/datamodel-view-viewmodel-pattern-series.aspx

+0

спасибо, это полезный совет для получения лучшей архитектуры, но вы отлично поняли мой вопрос. :) – karlis

2

BTW, Попробуйте назначая "DataTextField" и "DataValueField", прежде чем назначить DataSource. Это предотвратит срабатывание события «SelectedIndexChanged» во время привязки данных ...

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

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