.net 如何实现可以以不同单位显示的DataGridView列?

.net 如何实现可以以不同单位显示的DataGridView列?,.net,datagridview,cell-formatting,.net,Datagridview,Cell Formatting,我有一个绑定到集合的DataGridView(.NET winforms)。其中一个字段是以英尺为单位存储的距离。但是,网格需要能够以英尺或米为单位显示(但始终存储为英尺),具体取决于系统设置。我该怎么做?感觉好像我需要使用CellParsing事件在用户输入时将值转换为英尺(如果显示设置为米)。而且,如果显示设置设置为米,我还需要使用CellFormatting事件将显示的值转换为米。这听起来是对的还是有更简单的方法?为什么不在数据模型中包含此逻辑 像这样 class SomeDataMod

我有一个绑定到集合的DataGridView(.NET winforms)。其中一个字段是以英尺为单位存储的距离。但是,网格需要能够以英尺或米为单位显示(但始终存储为英尺),具体取决于系统设置。我该怎么做?感觉好像我需要使用CellParsing事件在用户输入时将值转换为英尺(如果显示设置为米)。而且,如果显示设置设置为米,我还需要使用CellFormatting事件将显示的值转换为米。这听起来是对的还是有更简单的方法?

为什么不在数据模型中包含此逻辑

像这样

 class SomeDataModel : DataModelBase {

      public SomeEntityType Entity { get; private set; }

      public float Distance {
           get {
                return MetrixConvertionHelper.ConvertAccordingToSistemSettings(this.Entity.DistanceInFeets);
           }
           set {
                this.Entity.DistanceInFeets = MetrixConvertionHelper.ConvertDistanceBack(value);
           }
      }

 }

其中,
MetrixConvertionHelper.ConvertingAccordinationStemSettings(float)
-是您的助手转换函数,
SomeDataModel
-是数据模型类,
DistanceInFeets
-由数据模型包装的实体类型的原始属性,以及
MetrixConvertionHelper.ConvertDistanceBack(float)
-是一种oposite辅助方法,它将当前单位转换为feets

最简单的方法是添加应用计算的属性:

[DisplayName("Distance (feet)")]
public decimal DistanceFeet {get;set;}
[DisplayName("Distance (metres)")]
public decimal DistanceMetres {
    get { return FeetToMetres(DistanceFeet); }
    set { DistanceFeet = MetresToFeet(value); }
}
就我个人而言,我也使用米a作为基本单位,但那只是我;)


现在只要数据绑定到其中一个,或者显示/隐藏列,如果您觉得方便的话。

另外。。。不确定winforms绑定,但在WPF绑定中,我们可以使用IValueConverter来实现这类功能——也许winforms绑定有某种等价物