2012-03-29 99 views
0

我在我的windows應用程序中有一個組合框,它是DataBound到一個只讀列表。我的要求是顯示一些基於列表屬性的粗體項目。該屬性與值成員和顯示成員的屬性不同。無論如何沒有循環通過每個項目,因爲列表太大了?在組合框中顯示一些項目以粗體顯示

回答

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

變種的DataItem =(DataItem的)comboBox1.Items [e.Index];將數據綁定到控件之前是否可以訪問items集合?數據源在上面的行後面分配。 – bhu 2012-03-29 08:25:20

+0

@bhu我改變了代碼來使用傳統的功能,而不是LINQ – 2012-03-29 16:25:04