ComboBox 預設只能透過 DisplayMember 顯示單一屬性。若需同時顯示多個欄位(如「姓名 - 性別 - 生日 - 薪資」),無法直接設定,但可利用 Format 事件在顯示前動態格式化每一個項目。本文透過兩個範例示範此技巧。
ListControl.Format 事件在繪製每個項目前觸發,ListControlConvertEventArgs 提供 ListItem(資料來源項目)與 Value(輸出顯示字串)。我們在事件處理函式中從 ListItem 取得所需屬性,組合格式化字串指派給 e.Value。

private void CH3_DemoForm028_Load(object sender, EventArgs e)
{
DataSet ds = LoadDataToDataSet(); // 取得資料集
if (ds != null)
{
ComboBox1.ValueMember = "員工號碼"; // 隱藏值
ComboBox1.DataSource = ds.Tables["章立民工作室"]; // 繫結資料表
}
}
private void ComboBox1_Format(object sender, ListControlConvertEventArgs e)
{
DataRowView row = e.ListItem as DataRowView;
if (row != null)
{
e.Value = string.Format("{0} - {1} - {2:yyyy/MM/dd} - {3:NT$#,##0.00}",
row["姓名"], row["性別"], row["出生日期"], row["目前薪資"]);
}
}

private void CH3_DemoForm029_Load(object sender, EventArgs e)
{
this.culturesCB.ValueMember = "LCID";
this.culturesCB.DataSource = CultureInfo.GetCultures(CultureTypes.FrameworkCultures);
}
private void culturesCB_Format(object sender, ListControlConvertEventArgs e)
{
CultureInfo ci = e.ListItem as CultureInfo;
if (ci != null)
{
e.Value = string.Format("{0} : {1}", ci.IetfLanguageTag, ci.DisplayName);
}
}
Format 僅改變顯示文字,SelectedValue 仍回傳 ValueMember 對應的值。DropDownStyle = DropDown 允許輸入,使用者編輯時不會觸發 Format,需額外處理 TextUpdate 事件。ItemTemplate 定義複雜顯示,更靈活且分離關注點。善用 ComboBox.Format 事件,無需自訂控制項或修改資料來源,即可靈活實現多欄位串聯顯示。這是 WinForms 資料繫結中極具性價比的小技巧,適用於下拉式選單、列表方塊等所有繼承 ListControl 的控制項。