首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> C# >> 關於C#

WinForms ComboBox 顯示多欄位資料:Format 事件實作多屬性串聯顯示

     編輯:關於C#

前言

ComboBox 預設只能透過 DisplayMember 顯示單一屬性。若需同時顯示多個欄位(如「姓名 - 性別 - 生日 - 薪資」),無法直接設定,但可利用 Format 事件在顯示前動態格式化每一個項目。本文透過兩個範例示範此技巧。

核心技巧:Format 事件

ListControl.Format 事件在繪製每個項目前觸發,ListControlConvertEventArgs 提供 ListItem(資料來源項目)與 Value(輸出顯示字串)。我們在事件處理函式中從 ListItem 取得所需屬性,組合格式化字串指派給 e.Value。

範例一:資料表多欄位串聯

ComboBox 顯示多欄位

資料繫結設定

private void CH3_DemoForm028_Load(object sender, EventArgs e)
{
    DataSet ds = LoadDataToDataSet(); // 取得資料集
    if (ds != null)
    {
        ComboBox1.ValueMember = "員工號碼"; // 隱藏值
        ComboBox1.DataSource = ds.Tables["章立民工作室"]; // 繫結資料表
    }
}

Format 事件處理

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["目前薪資"]);
    }
}

範例二:CultureInfo 列舉顯示代碼與名稱

CultureInfo ComboBox

資料繫結設定

private void CH3_DemoForm029_Load(object sender, EventArgs e)
{
    this.culturesCB.ValueMember = "LCID";
    this.culturesCB.DataSource = CultureInfo.GetCultures(CultureTypes.FrameworkCultures);
}

Format 事件處理

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);
    }
}

進階應用與注意事項

  1. 不影響 ValueMember:Format 僅改變顯示文字,SelectedValue 仍回傳 ValueMember 對應的值。
  2. 效能考量:項目數極大(>10,000)時,Format 事件會頻繁觸發,建議預先計算顯示字串存於資料來源的額外欄位,或使用虛擬模式。
  3. 編輯模式:若 DropDownStyle = DropDown 允許輸入,使用者編輯時不會觸發 Format,需額外處理 TextUpdate 事件。
  4. WPF 對應:WPF 使用 ItemTemplate 定義複雜顯示,更靈活且分離關注點。

結語

善用 ComboBox.Format 事件,無需自訂控制項或修改資料來源,即可靈活實現多欄位串聯顯示。這是 WinForms 資料繫結中極具性價比的小技巧,適用於下拉式選單、列表方塊等所有繼承 ListControl 的控制項。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved