DataGridViewColumn.DataPropertyName属性

Cap*_*mic 7 datasource datagridview winforms

我有一个DataGridView控件,我想用数据填充它.

我使用DataSource属性

// dgvDealAsset is DataGridView
        private void DealAssetListControl_Load(object sender, EventArgs e)
        {
            dgvDealAssets.AutoGenerateColumns = false;
            dgvDealAssets.DataSource = DealAssetList.Instance.Values.ToList();
}
Run Code Online (Sandbox Code Playgroud)

现在问题第一.我的集合的类不仅包含我可以使用DataPropertyName映射到列的简单类型.这是集合中包含的类.

class MyClass
{
  public String Name;
  MyOtherClass otherclass;
}

class MyOtherClass
{
 public String Name;
}
Run Code Online (Sandbox Code Playgroud)

现在我将MyClass的属性绑定到列

col1.DataPropertyName = "Name"  // Ok 
col2.DataPropertyName = "otherclass" // Not OK - I will have empty cell
Run Code Online (Sandbox Code Playgroud)

问题是我想显示otherclass.Name字段.但如果我试着写

col2.DataPropertyName = "otherclass.Name" 
Run Code Online (Sandbox Code Playgroud)

我得到空单元格.

我试图手动设置列

private void DealAssetListControl_Load(object sender, EventArgs e)
{
    dgvDealAssets.AutoGenerateColumns = false;
    dgvDealAssets.DataSource = DealAssetList.Instance.Values.ToList();

// iterate through rows and set the column manually
        foreach (DataGridViewRow row in dgvDealAssets.Rows)
        {
            row.Cells["Column2"].Value = ((DealAsset)row.DataBoundItem).otherclass.Name;
        }
Run Code Online (Sandbox Code Playgroud)

但是这个foreach循环需要大约几分钟才能完成(2k元素).如何解决这个问题呢?

Jac*_*nev 3

DataGridView 不支持与子属性的数据绑定。欲了解更多信息,请查看这篇文章

我喜欢使用 CellFormatting 事件的解决方案。