将包含派生数据的列添加到 DataGridView

Add a column with derived data to a DataGridView

我有一个绑定到 "CarColor" 对象列表的数据网格视图。我正在尝试向 dataGridView 添加一个额外的列,该列采用每个 CarColor 的名称 属性 并显示本地化版本。

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

我读到,通过设置新列的 "Expression" 值,可以选择使用 DataGrid。但是,我不知道是否可以将列表转换为 DataGrid,或将 DataGridView 转换为 DataGrid。

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

如果您有 List<CarColor>,则不需要 DataTable 添加新的计算列。您可以简单地将新的 属性 添加到 CarColor 中,即 returns 所需的计算值,或者在您的情况下是其 Name 属性.[= 的本地化值20=]

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 class保持不变,只需在同一个命名空间中添加这个部分,或者如果你愿意, 只需将 class 的正文代码添加到原始 CarColor.

  • 如果 CarClass 不是你的 class 并且你不想更改它的代码,你可以为 CarColor 创建一个 ViewModel class 并使用同样的想法来表示 属性.