2012-03-29 12 views
0

私のWindowsアプリケーションには、読み取り専用のリストにDataBoundというコンボボックスがあります。私の要件は、リストのプロパティに基づいて太字の項目の一部を表示することです。このプロパティは、valueメンバおよびDisplay Memberのプロパティとは異なります。リストが大きすぎるので、項目のそれぞれをループすることなくそれを行うにはとにかくありますか?コンボボックスに太字の項目を表示する

答えて

2

選択した項目をオフにします。

public Form1() 
{ 
    _dataItems = new List<DataItem> 
     { 
      new DataItem {Name = "Alpha", IsBold = true, OtherData = new object()}, 
      new DataItem {Name = "Beta", IsBold = false, OtherData = new object()}, 
      new DataItem {Name = "Gamma", IsBold = true, OtherData = new object()}, 
     }; 

    this.InitializeComponent(); 

    comboBox1.DrawItem += comboBox1_DrawItem; 

    comboBox1.DataSource = _dataItems; 
    comboBox1.DisplayMember = "Name"; 
    comboBox1.ValueMember = "OtherData"; 
} 

void comboBox1_DrawItem(object sender, DrawItemEventArgs e) 
{ 
    var dataItem = (DataItem)comboBox1.Items[e.Index]; 

    if (dataItem.IsBold) 
     e.Graphics.DrawString(dataItem.Name, BoldFont, SystemBrushes.ControlText, 
          e.Bounds); 
    else 
     e.Graphics.DrawString(dataItem.Name, NormalFont, SystemBrushes.ControlText, 
          e.Bounds); 
} 

のDataItemクラス:

public class DataItem 
{ 
    public String Name { get; set; } 
    public bool IsBold { get; set; } 
    public Object OtherData { get; set; } 

    public override string ToString() 
    { 
     return Name; 
    } 
} 
+0

VARデータ項目=(のDataItem)comboBox1.Items [e.Index]。データをコントロールにバインドする前にアイテムコレクションにアクセスすることは可能ですか?上記の行の後にデータソースが割り当てられます。 – bhu

+0

@bhu LINQの代わりに従来の関数を使用するようにコードを変更しました –

関連する問題