首页 文章

WPF DataGrid和其他DataGrid组件

提问于
浏览
0

向所有WPF天才致以问候 .

我是一名专业的Java开发人员,也是.NET和相关技术的新手 . 所以,如果我问任何愚蠢的问题,请与我同行 . :)

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

  • Headers 行的45度角文本(或用户想要的任何其他角度)

  • 摘要行

  • 摘要栏目

  • 某些行/列的不同背景颜色

  • 枢轴支持

  • 能够为右键单击事件指定行/列的新命令(例如,我们需要一些命令,如"create",_ 81464,"export","hide","disable" ..等)

  • 通过右键单击并选择网格上的"create"来创建新数据行/列

  • 通过右键单击并选择网格/列上的"delete"来删除列/行

  • 手动和按字母顺序重新排序列/行

  • 复制(使用值复制整个行或列) . (例如,复制列"Product name"应该导致"Product name(Copy)","Product name(Copy 2)" ...等)

  • 禁用列/行(显示在应用程序中,但未在报告和/或其他功能中使用)

  • 如果单元格有备忘录,则有红色角落(如excel中的注释)

  • 为用户显示的列 Headers 应该有最大长度 . (如果列名太长,它将在某一点被截断,并且通过将鼠标悬停在 Headers 上可以在工具提示中看到整个名称)

  • 多选单元格并复制其内容

  • 在搜索之后突出显示一行(例如,在搜索表单中,我们通过某些参数搜索特定行,如果发现该行应在网格中突出显示)

  • 要仅为几列提供 Headers (例如,5列中只有2列应该有 Headers )

我已经尝试过WPF的DataGrid组件,我设法实现了以下功能 .

  • Headers 行的45度角文本(或用户想要的任何其他角度)

  • 某些行/列的不同背景颜色

  • 摘要栏目

然后我尝试了DevExpress的DataGrid组件,我设法实现了以下功能 .

  • 摘要行

现在我有几个问题 .

  • 所有这些功能都可以通过纯WPF实现 .

  • 我是否需要不同框架/第三方库(例如DevExpress)的支持 .

  • 在性能(速度)和内存消耗方面使用纯WPF组件有什么好处 .

  • 是否还有其他提供这些功能的第三方库 .

  • Most importantly, for WPF experts such as yourselves, how long would it take to build such a component, if we were to do it using plain WPF from the scratch.?

期待您的回应 . 首先十分感谢 .

最好的问候,Asela .

1 回答

  • 0

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

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

    • 您可以为列 Headers 创建一个小内容模板,并在那里旋转文本 .

    • GridControl支持两种主要类型的摘要 - 分别为每个组计算的组摘要和为所有可见网格行计算的总摘要 . 您可以按列对齐摘要,或只允许它们占用所有可用空间 . 组摘要可以显示在组行中,也可以显示在组下方的组页脚中 . 最终用户可以通过内置对话框在运行时添加/修改/删除摘要 . 查看我们文档中的Data Summaries Overview文章以了解更多信息 .

    • GridControl提供对calculated (unbound) columns的支持 . 要为计算列提供数据,请使用表达式(最终用户有内置表达式对话框)或计算代码中的列值 .

    • 修改某些列/行的背景颜色并实现其他格式的最佳方法是使用我们的Excel-style Conditional Formatting feature . 条件格式设置规则可以在xaml中定义,也可以在运行时由最终用户配置 .

    • 有一个单独的PivotGridControl component用于处理OLAP数据源和简单的图表集成 .

    • 有一组用于常见网格操作的内置命令(添加,删除,显示打印对话框等) . 当然,如果您愿意,也可以实现自定义命令 .

    • 有一个特殊的New Item Row功能用于就地行创建 . 如果您不想直接在网格中初始化行值,则可以

    • 您可以将相应的菜单项添加到网格行的上下文菜单中,并在那里调用内置的“删除行”命令 . 这是我们数据库中的相应示例:

    How to delete grid rows via the DeleteFocusedRow grid command

    • GridControl支持各种排序模式,内置和自定义,以订购行 . 您还可以使用内置的拖放管理器对行重新排序(请参阅Drag and Drop overview主题) . 也可以使用拖放操作重新排序列(此功能是默认启用) .

    • 您可以手动实现此“复制行”和“复制列”功能,例如,将相应的项添加到列和行的内置网格上下文菜单中 .

    • 您可以手动实现此功能并添加相应的菜单项 .

    • DevExpress附带了一个特殊的MemoEdit编辑器 . 如果您不想使用此编辑器,请创建一个带有红色角元素的单元格模板,并将其绑定到单元格的注释 .

    • 使用MaxWidth属性限制网格列宽度 . 该列的行为与您描述的完全相同 .

    • 完全支持单元格多选以及复制/粘贴到Excel或其他程序 .

    • GridControl有一个内置的search form,当您按下Ctrl F时会显示 . 当您使用此表单在网格中搜索时,网格会突出显示找到的文本 . 如有必要,还可以使用单独的搜索表单或仅将搜索文本绑定到网格 .

    • 最有可能,这可以实现,但我现在不能给出任何建议,因为我不太清楚在没有 Headers 的列的 Headers 面板中应该显示什么 . 应该只有空白吗?

    最后,我想谈谈你有关表现的问题 . 影响网格性能的主要因素有两个:渲染性能和数据操作性能 . 虽然将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/) . 我们非常乐意为您提供帮助 .

相关问题