2008-12-12 31 views
2

所以,我一直在使用作爲數據源一的BindingList的DataGridView,的BindingList <T>,DataGridViewComboBoxColumn

DataGridView.DataSource = new BindingList<Car>{...} 

public class Car 
{ 
    public ColorName Color { get; set;} 
} 

public class ColorName 
{ 
    public int Id {get; set;} 
    public string Name{get; set;} 
} 

,我使用ComboBox列一個DataGridView:

DataGridViewComboBoxColumn colorNameDataGridViewTextBoxColumn; 
colorNameDataGridViewTextBoxColumn.DataPropertyName = "Color"; 
colorNameDataGridViewTextBoxColumn.HeaderText = "Color"; 
colorNameDataGridViewTextBoxColumn.Name = "Color"; 
colorNameDataGridViewTextBoxColumn.DisplayMember = "Name"; 
colorNameDataGridViewTextBoxColumn.ValueMember = "Id"; 
colorNameDataGridViewTextBoxColumn.DataSource = new ColorName[] {...}; 

我該如何得到這個工作?!現在我得到一個異常,因爲我認爲它試圖將Id轉換爲ColorName。

我試着用一個空的ValueMember或向ColorName類添加直接轉換運算符,但無法使其工作。

當然,我可以在Car類中使用int來表示顏色,但不是很好。

正如你可能猜到的那些類實際上是Castle Project ActiveRecord-s。

歡迎任何想法!

回答

5

您是否嘗試過ValueMember =「」或ValueMember =「。」?

真的很無奈,但你可以在ColorName上添加一個屬性,它本身就是? (也許通過部分類)

public ColorName Self {get {return this;}} 

然後設置`ValueMember =「Self」;'

除此之外,你可能需要一個TypeConverter

另一種選擇可能是覆蓋在ColorNameToString()返回Name,並沒有值/顯示部件?


(更新:不,它不需要)

有檢查,並ToString()似乎工作:

public override string ToString() { return Name; } 

,只是沒有設置DisplayMember一個ValueMember


好whad'ya知道 - 「自我」 招作品太...

using System; 
using System.ComponentModel; 
using System.Windows.Forms; 
class ColorName 
{ 
    public ColorName(int id, string name) { 
     this.Id = id; 
     this.Name = name; 
    } 
    public int Id { get; private set; } 
    public string Name { get; private set; } 

    // maybe declare this one in a partial class... 
    public ColorName Self { get { return this; } } 
} 
class Car 
{ 
    public ColorName Color { get; set; } 
} 

static class Program 
{ 
    [STAThread] 
    static void Main() 
    { 
     Application.EnableVisualStyles(); 
     using(Form form = new Form()) 
     using (DataGridView grid = new DataGridView()) 
     { 
      grid.Dock = DockStyle.Fill; 
      grid.AutoGenerateColumns = false; 
      ColorName[] colors = new[] { 
       new ColorName(1,"Red"), 
       new ColorName(2,"Blue"), 
       new ColorName(3,"Green") 
      }; 
      var col = new DataGridViewComboBoxColumn 
      { 
       DataPropertyName = "Color", 
       HeaderText = "Color", 
       Name = "Color", 
       DisplayMember = "Name", 
       ValueMember = "Self", 
       DataSource = colors 
      }; 

      grid.Columns.Add(col); 
      grid.DataSource = new BindingList<Car> { 
       new Car { Color = colors[0]} 
      }; 
      form.Controls.Add(grid); 
      Application.Run(form); 
     } 
    } 
} 
相關問題