2009-01-03 24 views
10

有沒有辦法通過c#組成一個對象的多個屬性的asp.net中的dropdownlist的datatextfield屬性?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類在模型類中,不應該做什麼我需要在UI中)。

回答

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

實質上,您希望創建一個表示綁定到特定UI的類。所以你會將你的模型(在你的例子中是My Object)映射到ViewModel對象,然後用這種方式綁定下拉列表。思考分離問題是一種很酷的方式。

編輯:這裏是視圖模型的另一個博客系列:http://blogs.msdn.com/dancre/archive/2006/10/11/datamodel-view-viewmodel-pattern-series.aspx

+0

謝謝你,這是獲得更好架構的有用提示,但你完全理解我的問題。 :) – karlis 2009-01-03 19:55:51

2

BTW, 嘗試分配「DataTextField」和「DataValueField」您指定的數據源之前。這樣做可以防止在數據綁定時觸發「SelectedIndexChanged」事件...

相關問題