簡體   English   中英

如何綁定 ComboBox 以便 displaymember 是源數據表的 2 個字段的 concat?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM