none
wpf DATATABLE OBSERVABLE 区别 RRS feed

  • 问题

  • 很长时间一直使用的OBSERVABLE来绑定实现DATAGRID显示,今天需要动态列显示,发现DATATABLE是个很好的解决方案。

    对于这2种方式,不清楚他们在功能上及性能上有哪些区别?请大家指点下。

    实现方法上,感觉DATATABLE更方便,不用定做观察者类。

    2011年7月6日 9:44

答案

  • DataTable是通过DataView来提供数据源的,因而也有类似的双向更新的作用。对于你的需求,需要动态列显示,ObservableCollection 就很难满足了,因为他始终是个一维的集合,他的成员Item的属性只有支持动态增减 (.Net 4的Dymanic特性)才可以满足你的列动态,而DataTable则是一个二维数据结构,他支持行列的动态的。

    不过DataTable比较古老,他仅实现了一些接口,所以现在来说,他不够灵活地应用到多种技术中,比如他不能够成为一个广义的数据结构来做ORM,现在只有通过一些已经实现并支持DataTable的组件才能使用它。所以我们推荐的还是ObservableCollection。但是应不同需求而定,比如你的,就是用DataTable比较合适。

    性能上不会差很多,相反ObservableCollection可能会相对与DataTable有点性能损失。

    Sincerely,


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    2011年7月7日 6:41
    版主
  • 你好!

    功能上:DataTable 本身就已实现了丰富的功能,如双向绑定、排序、过滤、统计等。而 ObservableCollection 只是一个集合对象,要实现上述功能还依赖于集合中的对象实现相关的接口,然后再结合 Linq 才能实现,这也是你觉得 DataTable 方便的原因。DataTable 正好是弱类型的,而你的需求强类型对象很难实现。

    性能上:在传输上 DataTable 序列化后会比一般的实体对象要大一些,因为它需要维护自身的数据结构与数据状态。

    在我们的产品中两种方式都有用到,用哪种方式还得看具体场景不能一概而论。


    知识改变命运,奋斗成就人生!
    2011年7月11日 5:16
    版主

全部回复

  • DataTable是通过DataView来提供数据源的,因而也有类似的双向更新的作用。对于你的需求,需要动态列显示,ObservableCollection 就很难满足了,因为他始终是个一维的集合,他的成员Item的属性只有支持动态增减 (.Net 4的Dymanic特性)才可以满足你的列动态,而DataTable则是一个二维数据结构,他支持行列的动态的。

    不过DataTable比较古老,他仅实现了一些接口,所以现在来说,他不够灵活地应用到多种技术中,比如他不能够成为一个广义的数据结构来做ORM,现在只有通过一些已经实现并支持DataTable的组件才能使用它。所以我们推荐的还是ObservableCollection。但是应不同需求而定,比如你的,就是用DataTable比较合适。

    性能上不会差很多,相反ObservableCollection可能会相对与DataTable有点性能损失。

    Sincerely,


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    2011年7月7日 6:41
    版主
  • 你好!

    功能上:DataTable 本身就已实现了丰富的功能,如双向绑定、排序、过滤、统计等。而 ObservableCollection 只是一个集合对象,要实现上述功能还依赖于集合中的对象实现相关的接口,然后再结合 Linq 才能实现,这也是你觉得 DataTable 方便的原因。DataTable 正好是弱类型的,而你的需求强类型对象很难实现。

    性能上:在传输上 DataTable 序列化后会比一般的实体对象要大一些,因为它需要维护自身的数据结构与数据状态。

    在我们的产品中两种方式都有用到,用哪种方式还得看具体场景不能一概而论。


    知识改变命运,奋斗成就人生!
    2011年7月11日 5:16
    版主