2016-12-30 61 views
2

我與VB.Net和ASP.net工作列表中顯示的對象屬性,但是C#代碼也歡迎。如何在下拉在VB.Net/C#和ASP.NET

我的客戶名單,客戶的屬性有:

-clientid
-FullName

的樣本數據:

-clientid:1
-FullName:約翰活頁夾

-clientid:2
-FullName:莉婭·布朗

而且我的協議 「lstAgreements」 列表,它們的屬性是:

-AgreementID
-clientid
- 日期

的樣本數據:

AGREEMENTID:5
客戶端ID: 2
Date:12/30/16

AgreementID:7
ClientID:1
Date:12/29/16

「客戶」和「協議」是具有現有關係的實體類:一個客戶可以有許多協議。

我可以檢索所有的協議:

Dim lstAgreements As List(Of Agreement) =GetAllAgreements() 

及協議類有一個屬性來獲取客戶對象:

lstAgreements(0).ClientObject.FullName 

然後,我可以填充下拉與「lstAgreements名單「

myDropDownList.DataSource = lstAgreements 
myDropDownList.DataValueField = "AgreementID" 
myDropDownList.DataTextField = "ClientID" 
myDropDownList.DataBind() 

我的問題是,如何在t中顯示」ClientFullName「而不是」ClientID「他下降列表?

我想這個代碼,但它不工作:

myDropDownList.DataSource = lstAgreements 
myDropDownList.DataValueField = "AgreementID" 
myDropDownList.DataTextField = "ClientObject.FullName" 
myDropDownList.DataBind() 

我注意到,在DataList控件使用「ClientObject.FullName」它工作正常,但在下拉列表事實並非如此。

有什麼建議嗎?

在此先感謝

回答

3

你可以遍歷LST協議,而不是使用一個數據源/數據綁定,並創建自己的列表項?

foreach (Agreement a in lstAgreements) 
{ 
    myDropDownList.Items.Add(new ListItem(a.ClientObject.FullName, a.AgreementId)) 
} 

或使用LINQ從客戶端列表中,如果你沒有全名法一致返回全名設置你的全名。

+0

您的解決方案有效,非常感謝您! – pepe

0

你爲什麼不只是用它是這樣的:

myDropDownList.DataTextField = "FullName"; 

更新

Obviously , Agreement does not contain a property with the name 'FullName'. it has -AgreementID -ClientID -Date properties.

我會建議使用LINQ以檢索數據時,你需要多個列表(C#):

public class CustomList 
{ 
    public string FullName { get; set; } 
    public int AgreementID{ get; set; } 
} 

var Custom = from i in listofClients 
      from j in listofAgreements 
      Where i.ClientID == j.ClientID 
      select new CustomList{ 
        FullName = i.FullName , 
        AgreementID = j.AgreementID 
      }.ToList(); 

現在你可以使用Custom綁定到您的DropDownList

myDropDownList.DataSource = Custom ; 
myDropDownList.DataValueField = "AgreementID"; 
myDropDownList.DataTextField = "FullName"; 
myDropDownList.DataBind(); 
+0

我沒有,但我有一個錯誤:數據綁定:協議」不包含與名稱的屬性‘全名’。 – pepe

+0

我要用'C#'代碼更新我的問題。 – Null

+0

@pepe檢查更新。 – Null

0

根據您的控件(儘管我認爲這是一個默認行爲),您也可以通過覆蓋對象的ToString()方法來實現此目的。通常,這會給出它的類型的字符串表示形式,但是如果將返回值更改爲所需的屬性,那將是ToString()的值。如果您隨後綁定到IEnumerable lstAgreements之類的東西,那麼您甚至不需要進行屬性搜索。下拉列表項的值將是對象,文本將是它的ToString()輸出。

僞:

prop int AgreementID 
prop int ClientID 
prop DateTime Date 
prop ClientObject CO; 

public IEnumerable<Agreement> GetAllAgreements()... 

public override string ToString() 
{ 
    return this.CO.FullName; 
} 


----------- 
mydropdown.DataSource = GetAllAgreements(); Databind();