How do I bind a ComboBox so the displaymember is concat of 2 fields of source datatable?

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.

Leave a Comment