将包含派生数据的列添加到 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 并使用同样的想法来表示 属性.
我有一个绑定到 "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 并使用同样的想法来表示 属性.