[英]How do I bind a ComboBox so the displaymember is concat of 2 fields of source datatable?
我想將ComboBox
綁定到DataTable
(我無法更改其原始模式)
cbo.DataSource = tbldata;
cbo.DataTextField = "Name";
cbo.DataValueField = "GUID";
cbo.DataBind();
我想要ComboBox
顯示tbldata.Name + tbldata.Surname
。
當然,在綁定之前將新的姓名+姓氏作為字段添加到tbldata
是可能的,但我希望按照(偽代碼)的方式提供更優雅的解決方案
cbo.DataTextField = "Name";
cbo.DataTextField += "Surname";
計算出的色譜柱解決方案可能是最好的解決方案。 但是,如果您不能更改 data.table 的架構來添加它,您可以遍歷該表並填充一個將用作數據源的新集合。
var dict = new Dictionary<Guid, string>();
foreach (DataRow row in dt.Rows)
{
dict.Add(row["GUID"], row["Name"] + " " + row["Surname"]);
}
cbo.DataSource = dict;
cbo.DataTextField = "Value";
cbo.DataValueField = "Key";
cbo.DataBind();
顯然,這不如直接綁定到 DataTable 那樣高效,但除非表有數千行,否則我不會擔心這一點。
最簡單的方法是使用 Expression 屬性在 DataTable 中創建一個新的計算列:
tbldata.Columns.Add("FullName", typeof(string), "Name + ' ' + Surname");
...
cbo.DataTextField = "FullName";
我會在您的數據 object 上創建一個屬性,然后在 DataTextField 上創建一個屬性 map
數據 Object
public string FullName
{
get { return Name + " " + Surname; }
}
代碼隱藏
cbo.DataSource = tbldata;
cbo.DataTextField = "FullName";
cbo.DataValueField = "GUID";
cbo.DataBind();
或者像這樣實現“格式”事件:
DataRow r = ((DataRowView)e.ListItem).Row;
e.Value = r[ "FirstName" ] + " - " + r[ "LastName" ];
在您的 class 中擁有一個屬性,該屬性是 Name 和 Surname 的 concat。 並將 DataTextField 綁定到此屬性。
如果您將它綁定到 DataTable,您可以向 DataTable 添加一個新列,其值是 Name 和 Surname 的 concat,並將其綁定到組合。
使用 DataColumn 的Expression屬性查看計算列。
您可以注冊組合綁定事件並迭代項目,使用 combobox 項目數據項將每個項目文本設置為所需的字段。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.