How do I bind a ComboBox so the displaymember is concat of 2 fields of source datatable?
c#, combobox, data-binding
Solution
The calculated column solution is probably the best one. But if you can't alter the data table's schema to add that, you can loop through the table and populate a new collection that will serve as the data source.
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();
Obviously this isn't as performant as binding directly to the DataTable but I wouldn't worry about that unless the table has thousands of rows.
Problem
I'd like to bind a `ComboBox` to a `DataTable` (I cannot alter its original schema) ``` cbo.DataSource = tbldata; cbo.DataTextField = "Name"; cbo.DataValueField = "GUID"; cbo.DataBind(); ``` I want the `ComboBox` show `tbldata.Name + tbldata.Surname`. Of course adding the new name+surname as a field to the `tbldata` just before binding is possible, but I am hoping for a more elegant solution along the lines of (pseudocode) ``` cbo.DataTextField = "Name"; cbo.DataTextField += "Surname"; ```