【问题标题】:Populating DataGridView with custom DataGridColumn使用自定义 DataGridColumn 填充 DataGridView
【发布时间】:2015-01-12 07:56:21
【问题描述】:

我有 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;
}

但我觉得我做错了什么,应该有一个更合适的方式来做。 如何使用自定义 DataGridViewTextIconColumn 将我的 List&lt;MyClass&gt; 绑定到我的 DataGridView,这应该代表一个单元格中的 NameIcon 属性?

【问题讨论】:

    标签: c# winforms datagridview


    【解决方案1】:

    【讨论】:

    • 标准绑定不适合我。因为我需要在一个单元格中显示两个数据值(名称和图标)。
    【解决方案2】:

    有两点需要注意。

    • 使用Databinding 的常规方法是将DataGridViewDataSource 设置为正确 数据源。这可以是List&lt;MyClass&gt;,但MyClass 必须将其值公开为Properties

    所以类应该改成

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

    现在您已经可以使用常规的DataBinding 显示数据,只是您的Image 不会显示在自动生成的TextCell 中。所以你可以像这样在代码中生成列:

        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 是否可以做到这一点。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多