【问题标题】:Add a column with derived data to a DataGridView将包含派生数据的列添加到 DataGridView
【发布时间】:2015-12-18 00:38:52
【问题描述】:

我有一个绑定到“CarColor”对象列表的datagridview。我正在尝试向 dataGridView 添加一个额外的列,该列采用每个 CarColor 的 Name 属性并显示本地化版本。

目前我有一个扩展方法,可以创建列并使用正确的值填充它,但是每次 dataGridView 更改可见性或数据时,本地化名称列中的所有单元格都会变为空。在此之前,我通过在 dataGridView 的 VisibileChanged 和 DataSourceChanged 事件上运行扩展方法来管理解决方法。这很麻烦,尤其是当我试图影响另一个控件(例如对话框)中的 DataGridView 时。

我已经读过,通过设置新列的“表达式”值,可以选择使用 DataGrid。但是,我不知道是否可以将列表转换为 DataGrid,或者将 DataGridView 转换为 DataGrid。

如何确保本地化名称表的值不被删除?

【问题讨论】:

  • 可能你的意思是DataTable,而你误说DataGrid
  • 如果您有List<CarColor>,则不需要DataTable,只需向CarColor 添加一个新属性,该属性返回其Name 属性的本地化值。
  • 如果您对答案有任何疑问或觉得它有帮助,请告诉我:)
  • 我忘了在原始帖子中提到我无法编辑 CarColor 类,因为它已同步到数据库。我将尝试改用 ViewModel。

标签: c# winforms datagridview datagridviewcolumn


【解决方案1】:

如果您有List<CarColor>,则不需要DataTable 来添加新的计算列。您可以简单地向 CarColor 添加一个新属性,该属性返回所需的计算值,或者在您的情况下返回其 Name 属性的本地化值。

public partial class CarColor
{  
    publlic string LocalizedName
    {
        get
        {
            return GetLocalizedName(this.Name);
        }
    }

    private string GetLocalizedName(string name)
    {
        // put the logic for localizing the name here
    }
}

注意:

  • 我写了partial,所以你可以让原来的CarColor类保持不变,只需在同一个命名空间中添加这个部分,或者如果你愿意,只需将类的主体代码添加到原来的@ 987654328@.

  • 如果CarClass 不在您的类中并且您不更改它的代码,您可以为CarColor 创建一个 ViewModel 类并使用相同的想法来表示该属性。

【讨论】:

  • ViewModel 听起来像我所追求的。我会仔细看看的。谢谢!
猜你喜欢
  • 1970-01-01
  • 2015-10-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多