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

时间:2015-12-18 00:38:52

标签: c# winforms datagridview datagridviewcolumn

我有一个datagridview绑定到“CarColor”对象列表。我试图在dataGridView中添加一个额外的列,它接受每个CarColor的Name属性并显示本地化版本。

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

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

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

1 个答案:

答案 0 :(得分:0)

如果您有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类不受影响,只需在相同的命名空间中添加这个部分,或者如果你愿意,只需添加该类的正文代码原始CarColor

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