【问题标题】:How to bind Navigation Property (second level model's two properties) in DataGridView's single column using BindingSource?如何使用BindingSource在DataGridView的单列中绑定Navigation Property(二级模型的两个属性)?
【发布时间】:2016-04-21 06:03:47
【问题描述】:

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

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

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

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

【问题讨论】:

  • Company 中是否有 Partner 导航属性?
  • 是的。我有关于公司模型的合作伙伴列表
  • 所以你可以简单地使用CellFormatting事件。
  • 是否可以在不使用任何事件处理程序的情况下实现这一目标?
  • 是的,通过覆盖PartnerToString() 方法。

标签: c# winforms entity-framework datagridview bindingsource


【解决方案1】:

选项 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 类的ToString() 方法并在列中显示Partner

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

【讨论】:

  • 选项 1 == +1。选项 2 == 我没有选项 :)
  • @IvanStoev 感谢您的反馈。有意义的ToString() 覆盖非常有用。我认为这不是 UI 代码。我们可以在ComboBoxDataGridView 或任何我们需要对实体有意义的字符串表示的地方使用它。
  • 仅当类是某种 ViewModel 时。除此之外,ToString 仅用于调试目的。
  • 我会选择选项 1。谢谢你们。
【解决方案2】:

创建返回格式化全名的属性并将其绑定到网格单元格。您可以使用多重绑定,但这需要额外的转换器来返回(作为您的附加属性)格式化字符串 - 例如。

【讨论】:

  • 你能举个例子吗?
  • 在您的模型类中:私有字符串 FirstName;私人字符串姓氏; public string FullName { get { if (!string.IsNullOrEmpty(FirstName) && !string.IsNullOrEmpty(LastName)) return string.Format("{0} {1}", FirstName, LastName);否则返回字符串。空; } } 你绑定 FullName 而不是 FirstName/LastName
猜你喜欢
  • 1970-01-01
  • 2019-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多