2012-04-10 105 views
4

在下面的源代碼,我選擇從users集合屬性的一個子集,我需要將其綁定到一個下拉列表:訪問屬性 - C#

var locationDepts = (from u in users select new { u.RcNumber, u.RcName }).Distinct().ToList(); 

if(!locationDepts.Count.Equals(0)) 
{ 
    ddlRCListPerBuilding.DataSource = locationDepts; 
    ddlRCListPerBuilding.DataValueField = "RcNumber"; 

    //Want to format display test "RCNumber - RcName" 
    ddlRCListPerBuilding.DataTextField = string.Format("{0} - {1}", locationDepts.RcNumber, locationDepts.RcName); 

    ddlRCListPerBuilding.DataBind(); 
} 

我想將列表項顯示文本格式化爲匿名類型RcNumber和RcName的組合。如何訪問匿名類型的屬性來指示格式下拉列表項的文本?

回答

6

您可以創建數據源被稱爲一個新的屬性「組合拳」

var locationDepts = (from u in users 
        select new 
        { 
         u.RcNumber, 
         Combined = u.RcNumber + " - " + u.RcName 
        }).Distinct().ToList(); 

if(locationDepts.Count > 0) 
{ 
    ddlRCListPerBuilding.DataSource = locationDepts; 
    ddlRCListPerBuilding.DataValueField = "RcNumber"; 
    ddlRCListPerBuilding.DataTextField = "Combined"; 
    ddlRCListPerBuilding.DataBind(); 
} 
+1

這是迄今爲止最好的答案--DataTextField基本上是一個映射到對象的屬性名稱,因此您不能創建「計算」文本字段值,就像您對string.format所做的那樣 - 它會查找一個名爲「RcNumber - RcName」的屬性名稱。 – RTigger 2012-04-10 20:20:51

4

我只想改變匿名類型包括已格式化值:

var locationDepts = (from u in users select new { u.RcNumber, RcName = String.Format("{0} - {1}", u.RcNumber, u.RcName) }).Distinct().ToList(); 

if(!locationDepts.Count.Equals(0)) 
{ 
    ddlRCListPerBuilding.DataSource = locationDepts; 
    ddlRCListPerBuilding.DataValueField = "RcNumber"; 

    ddlRCListPerBuilding.DataTextField = "RcName"; 

    ddlRCListPerBuilding.DataBind(); 
} 
+0

@Magnus – 2012-04-10 20:23:11

+0

@MikeGoodwin它還是要連接它們(使用String.Format),但多一點代碼,稍慢一些。 – Magnus 2012-04-10 20:27:42

0

你可以使用視圖模型

public class RcFields 
{ 
    public int RcNumber { get; set; } 
    public string RcName { get; set; } 
} 

List<RcFields> locationDepts = (from u in users 
           select new RcFields 
           { 
            u.RcNumber, 
            u.RcName 
           }) 
           .Distinct() 
           .ToList(); 

然後

... locationDepts.RcName ..