使用自定义DataGridColumn填充DataGridView

时间:2014-11-14 20:23:38

标签: c# winforms datagridview

我有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}}属性?

2 个答案:

答案 0 :(得分:0)

答案 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是否可行。

但也许我错了,我们可以找到一种方法,如果你向我们展示自定义列的定义..