如何使用 BindingSource 在 DataGridView 的单列中绑定 Navigation 属性(二级模型的两个属性)?

How to bind Navigation Property (second level model's two properties) in DataGridView's single column using BindingSource?

我在使用绑定源显示网格视图中的值时遇到了问题。我有两个模型 CompanyPartners

  1. 我在公司模型中有 PartnerId
  2. 合作伙伴模型有 FirstNameLastName

我已经显示了公司信息和合作伙伴的名字,如上所示。

现在,我需要在单列中将合作伙伴的名字和姓氏显示为 PartnerName。谁能帮我解决这个问题?

制作 属性 其中 returns 格式的全名并将其绑定到网格单元格。您可以使用多重绑定,但这需要额外的转换器,例如 returns(作为您的额外 属性)格式的字符串。

选项 1 - 单元格格式

作为一个选项,您可以使用 DataGridViewCellFormatting 事件并显示所需的值:

void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
    //I Suppose you want to show full name in column at index 3
    if(e.RowIndex>=0 && e.ColumnIndex==3)
    {
        var company = (Company)(this.dataGridView1.Rows[e.RowIndex].DataBoundItem);
        if (company != null && company.Partner != null)
            e.Value = string.Format("{0} {1}", company.Partner.FirstName,
                                                company.Partner.LastName);
    }
}

选项 2 - ToString()

作为另一种选择,您可以覆盖 Partner class 的 ToString() 方法并在列中显示 Partner

public override string ToString()
{
    return string.Format("{0} {1}", this.FirstName, this.LastName);
}