我有DataGridView
个自定义DataGridViewTextIconColumn
(基于DataGridViewTextBoxCell
),其中包含文字和小图标。
我有一些对象:
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
,该自定义Name
应在一个单元格中代表Icon
和{{1}}属性?
答案 0 :(得分:0)
我确定如果你谷歌这个,你会在工作解决方案上得到很多点击。
Using a list as a data source for DataGridView
http://tech.pro/tutorial/776/csharp-tutorial-binding-a-datagridview-to-a-collection
http://msdn.microsoft.com/en-CA/library/y0wfd4yz(v=vs.90).aspx
答案 1 :(得分:0)
有两点需要注意。
Databinding
的常规方法是将DataGridView
&#39; s DataSource
设置为正确的数据源。这可以是List<MyClass>
,但MyClass
必须将其值显示为Properties
! 因此该课程应该改为
List<MyClass> data = GetData();
class MyClass
{
public string name {get;set;}
public Image icon {get;set;}
}
现在您已经可以使用常规DataBinding
显示数据,只是您的Image
不会显示在自动生成的TextCell中。所以你可以在这样的代码中开始生成Columns:
dataGridView1.AutoGenerateColumns = false;
dataGridView1.Columns.Add("name", "Name");
dataGridView1.Columns.Add(new DataGridViewImageColumn(false));
dataGridView1.Columns[0].DataPropertyName = "name";
dataGridView1.Columns[1].DataPropertyName = "icon";
,这将显示数据:
dataGridView1.DataSource = data;
Column
,好像您希望它在一个Cell
中显示两个数据值(名称和图标)。我怀疑使用开箱即用的DataBinding是否可行。但也许我错了,我们可以找到一种方法,如果你向我们展示自定义列的定义..