2011-11-14 23 views
0

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

回答

1

将E以添加适用的计算财产的最简单方法:

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

就个人而言,我也用米的主设备,但是,这只是我;)

现在只是数据绑定要么,或显示/隐藏列,如您方便。

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) - 是oposite helper方法,其当前单位转换为千丈

+0

也...不确定关于winforms绑定,但在WPF绑定中,我们可以使用IValueConverter用于这样的事情 - 也许winforms绑定具有某种等效 –

相关问题