0

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

4

2 回答 2

1

你为什么不在你的数据模型中封装这个逻辑呢?

像这样

 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.ConvertAccordingToSistemSettings(float)- 是你的辅助转换函数,SomeDataModel- 是数据模型类,DistanceInFeets- 实体类型的原始属性,由数据模型包装,MetrixConvertionHelper.ConvertDistanceBack(float)- 是一个相反的辅助方法,它将当前单位转换为英尺

于 2011-11-14T18:45:49.220 回答
1

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

[DisplayName("Distance (feet)")]
public decimal DistanceFeet {get;set;}
[DisplayName("Distance (metres)")]
public decimal DistanceMetres {
    get { return FeetToMetres(DistanceFeet); }
    set { DistanceFeet = MetresToFeet(value); }
}

就个人而言,我也使用米作为主要单位,但这只是我;)

现在只需将数据绑定到任何一个,或显示/隐藏列,您觉得方便。

于 2011-11-14T18:47:08.000 回答