2014-11-14 75 views
0

我有DataGridView與自定義DataGridViewTextIconColumn(基於DataGridViewTextBoxCell),其中包括文本和小圖標。 我有對象的集合:填充DataGridView與自定義DataGridColumn

List<MyClass> data = GetData(); 
class MyClass 
{ 
    public string Name { get; set; } 
    public Image Icon { get; set; } 
} 

並用於填充DataGridView我用:

foreach (DataGridViewRow r in dgvTest.Rows) 
{ 
    r.Cells[0].Value = "test"; 
    (r.Cells[0] as DataGridViewTextBoxCell).Icon = testImage; 
} 

但我覺得我做錯了什麼,應該有一個更合適的方式來做到這一點。 如何將我的List<MyClass>綁定到我的DataGridView,並且自定義DataGridViewTextIconColumn應該代表NameIcon屬性在一個單元格中?

回答

0

有兩件事情需要注意。

  • 使用Databinding的常規方式是設置DataGridViewDataSource適當數據源。這可以是List<MyClass>,但MyClass必須將其值顯示爲Properties

所以該類也許應該改爲

List<MyClass> data = GetData(); 
class MyClass 
{ 
    public string name {get;set;} 
    public Image icon {get;set;} 
} 

現在你已經可以顯示與常規DataBinding的數據,除了你的Image不會自動生成TextCell顯示。所以,你可以於swtich在代碼生成列如下:

dataGridView1.AutoGenerateColumns = false; 
    dataGridView1.Columns.Add("name", "Name"); 
    dataGridView1.Columns.Add(new DataGridViewImageColumn(false)); 

    dataGridView1.Columns[0].DataPropertyName = "name"; 
    dataGridView1.Columns[1].DataPropertyName = "icon"; 

,這將顯示數據:但是你有一個特別定製的Column

dataGridView1.DataSource = data; 
  • 和它好像你想它在一個Cell中顯示兩個數據值(名稱和圖標)。我懷疑這對於開箱即用的DataBinding是可能的。

但也許我錯了,我們可以找到一種方法,如果你告訴我們定義爲您的自定義列...