WPF Datagrid由GridSplitter分隔的多个同步冻结,可折叠窗格

时间:2012-02-06 10:45:55

标签: c# wpf datagrid wpfdatagrid frozen-columns

我需要创建一个“超级网格”作为应用程序的一部分,它将包含多个冻结和滚动窗格。网格还要求必须支持以下功能:

  • 使用具有“合理”滚动性能的100行显示数据网格
  • 按特定字段分组,折叠/展开分组
  • 显示字段内的任何控件,例如图像,文字,组合框,按钮
  • 允许按钮和编辑字段以及只读模式
  • 允许多个垂直拆分窗格(或解决方法,多个同步网格)
  • 使用持久性重新排序用户列
  • 用户列排序升序/降序
  • 动态插入/删除列(选择列)
  • 分组下方的第四维 - 所选行上的RowDetails模板
  • 允许在值更新时刷新/设置动画单元格/行模板

我的初步可行性表明WPF Datagrid能够满足上述几乎所有要求(具有大量模板),但是可能无法覆盖多个垂直分割窗格。下面是我想要实现的图表:

enter image description here

我想询问是否有人之前已经这样做过,如果有的话,你使用了什么网格技术。

  • 以上是否可以在WPF Datagrid中完成?我知道冻结列但是这似乎只适用于冻结前N列
  • 可以通过多个网格实现上述并同步垂直滚动位置吗?
    • 如果是这样,此解决方案是否仍会虚拟化?
  • 您是否可以推荐任何第三方网格来实现此目的?请注意,我们将根据内部品牌对网格进行大量设计,因此必须具有灵活性和可混合性

任何意见/建议表示赞赏。

更新 - 可行性调查结果

  • 我有一个使用3x网格和collapsable grid splitters之间的工作原型。
  • 使用this question的答案同步滚动查看器。
  • 通过绑定到具有TwoWay绑定的公共SelectedIndex属性,在三个网格中同步所选行。

接下来我将处理分组和rowdetails模板...感谢回答你的观点! :)

2 个答案:

答案 0 :(得分:1)

我已使用devexpress wpf grid control实现了您的大部分要求和更多要求。这不是免费的,并且有一点学习曲线(他们的documentation是必不可少的),但从长远来看它会为你节省很多时间......

答案 1 :(得分:1)

我使用标准DataGrid完成了这项工作,具有完美的性能和极大的灵活性,但它需要一个完善的架构。数据和UI都需要虚拟化 - 没有控制可以消除对大量数据进行排序的成本(例如),因此如果在UI线程上进行排序,用户会注意到。如果你的后端支持分页和过滤器,你的前端可以虚拟化,用户永远不会知道只有100行已经加载了10000个。当它们滚动时,数据页面被加载并且在后台卸载,UI永远不会停止响应。

但是,知道你工作的地方会让我怀疑你的前端是真正的主力......