WPF DataGrid&其他DataGrid组件

时间:2014-10-17 10:18:31

标签: c# wpf datagrid devexpress

我的团队和我有一个用WPF开发的新项目(使用纯WPF和/或第三方库),其中DataGrid组件需要具有以下功能。

  1. 标题行的文本以45度角(或用户想要的任何其他角度)
  2. 摘要行
  3. 摘要栏
  4. 某些行/列的不同背景颜色
  5. 支持
  6. 能够为右键单击事件指定行/列的新命令(例如,我们需要一些命令,如"创建","删除","导出&#34 ;,"隐藏","禁用" ..等)
  7. 通过右键单击&创建新的数据行/列。选择"创建"在网格上
  8. 通过右键单击&删除列/行;选择"删除"在网格/列上
  9. 手动重新排序列/行&按字母顺序
  10. 复制(使用值复制整个行或列)。 (例如,复制列"产品名称"应该产生"产品名称(复制)","产品名称(复制2)" ...等)
  11. 禁用列/行(显示在应用程序中,但未在报告和/或其他功能中使用)
  12. 如果单元格有备忘录,则有红色角落(如excel中的评论)
  13. 为用户显示的列标题应该有最大长度。 (如果列名太长,它将在某一点被截断,并且通过将鼠标悬停在标题上可以在工具提示中看到整个名称)
  14. 多选细胞&复制其内容
  15. 搜索后突出显示一行(例如,在搜索表单中,我们通过某些参数搜索特定行,如果发现该行应在网格中突出显示)
  16. 只为几列提供标题(例如,5列中只有2列应该有标题)
  17. 我已经尝试过WPF的DataGrid组件&我设法实现了以下目标。

    1. 标题行的文本以45度角(或用户想要的任何其他角度)
    2. 某些行/列的不同背景颜色
    3. 摘要栏
    4. 然后我尝试了DevExpress&的DataGrid组件。我设法实现了以下目标。

      1. 摘要行
      2. 现在我有几个问题。

        1. 是否可以通过纯WPF实现所有这些功能。?
        2. 我是否需要不同框架/第三方库(例如DevExpress)的支持。?
        3. 在性能(速度)和使用方面使用普通WPF组件有什么好处?记忆消耗。?
        4. 是否有更多第三方库提供这些功能。?
        5. 最重要的是,对于像你这样的WPF专家来说,构建这样一个组件需要多长时间,如果我们从头开始使用普通的WPF。

1 个答案:

答案 0 :(得分:0)

首先,我想提一下我为DevExpress工作,所以对我提供有关使用哪个组件集的建议会有点不公平。相反,我将描述我们为您的场景提供的内容,并让您自己比较。

您可以在下面找到关于如何在DevExpress GridControl中实现您的需求的评论:

  1. 您可以为列标题创建一个小内容模板,并在那里旋转文字。
  2. GridControl支持两种主要类型的摘要 - 分别为每个组计算的组摘要和为所有可见网格行计算的总摘要。您可以按列对齐摘要,或者只允许它们占用所有可用空间。组摘要可以显示在组行中,也可以显示在组下方的组页脚中。最终用户可以通过内置对话框在运行时添加/修改/删除摘要。查看我们文档中的Data Summaries Overview文章了解详情。
  3. GridControl支持calculated (unbound) columns。要为计算列提供数据,请使用表达式(最终用户有内置表达式对话框)或计算代码中的列值。
  4. 修改某些列/行的背景颜色并实现其他格式的最佳方法是使用我们的Excel-style Conditional Formatting feature。条件格式设置规则可以在xaml中定义,也可以在运行时由最终用户配置。
  5. 有一个单独的PivotGridControl component用于处理OLAP数据源和简单的图表集成。
  6. 有一组用于常见网格操作的内置命令(添加,删除,显示打印对话框等)。当然,如果您愿意,也可以实现自定义命令。
  7. 有就地行创建的特殊New Item Row功能。如果您不想直接在网格中初始化行值,则可以
  8. 您可以将相应的菜单项添加到网格行的上下文菜单中,并在那里调用内置的“删除行”命令。以下是我们数据库中的相应示例:
  9. How to delete grid rows via the DeleteFocusedRow grid command

    1. GridControl支持各种排序模式,内置和自定义,以订购行。您还可以使用内置的拖放管理器对行重新排序(请参阅Drag and Drop overview主题)。也可以使用拖放操作重新排序列(默认情况下启用此功能)。
    2. 您可以手动实现此“复制行”和“复制列”功能,例如,将相应的项添加到列和行的内置网格上下文菜单中。
    3. 您可以手动实现此功能并添加相应的菜单项。
    4. DevExpress附带了一个特殊的MemoEdit编辑器。如果您不想使用此编辑器,请创建一个带有红色角元素的单元格模板,并将其绑定到单元格的注释。
    5. 使用MaxWidth属性限制网格列宽度。该列的行为与您描述的完全相同。
    6. 完全支持单元格多选以及复制/粘贴到Excel或其他程序。
    7. 当您按Ctrl + F时,GridControl会显示内置的search form。使用此表单在网格中搜索时,网格会突出显示找到的文本。如有必要,也可以使用单独的搜索表单或仅将搜索文本绑定到网格。
    8. 最有可能的是,这可以实现,但我现在暂不提出任何建议,因为我不太清楚在没有标题的列的标题面板中应该显示什么。应该只有空格吗?
    9. 最后,我想谈谈你有关表现的问题。影响网格性能的主要因素有两个:渲染性能和数据操作性能。虽然将GridControl数据操作性能与标准WPF DataGrid进行比较非常困难,但由于DataGrid不支持许多数据操作,因此您可以使用我们的一个特殊源来处理服务器端的数据(即,直接将数据查询传播到数据库或WCF服务器)。在这种情况下,大数据源的数据操作性能将急剧增加。网格还有一个选项可以处理多个线程中的数据,以便UI永远不会冻结。

      至于渲染性能,我可以与你分享一些数字。我们在最新版本(14.1)中进行了重要的性能优化,并对DataGrid进行了一些测试。这是我们发现的(所有测试都是在标准的全高清监视器上使用全屏网格进行的):

      Tree creation (hot start)
      Tree Creation  14.1 optimized mode MS DataGrid
      Text сolumns        266                375
      Check columns       296                610
      DateTime columns    312                 -
      ComboBox columns    297                765
      
      Vertical Scrolling:
      Vertical Scrolling        DevExpress GridCont  MS DataGrid
      (1000 Rows 16 columns)
      Text сolumns                          1484        2109
      Check columns                         1359        1390
      DateTime columns                      2062          -
      ComboBox columns                      1391        5532
      

      我们无法在此测量水平滚动,因为标准DataGrid没有水平滚动虚拟化。

      当然,这些数字只说明了一个特例,我们仍然认为比较产品的最佳方法是在必要的情况下手动尝试。如果您在评估我们的控件时需要任何帮助,欢迎您在我们的支持中心(https://www.devexpress.com/Support/Center/)发布任何问题。我们非常乐意为您提供帮助。