提供3000多款全球软件/控件产品
针对软件研发的各个阶段提供专业培训与技术咨询
根据客户需求提供定制化的软件开发服务
全球知名设计软件,显著提升设计质量
打造以经营为中心,实现生产过程透明化管理
帮助企业合理产能分配,提高资源利用率
快速打造数字化生产线,实现全流程追溯
生产过程精准追溯,满足企业合规要求
以六西格玛为理论基础,实现产品质量全数字化管理
通过大屏电子看板,实现车间透明化管理
对设备进行全生命周期管理,提高设备综合利用率
实现设备数据的实时采集与监控
利用数字化技术提升油气勘探的效率和成功率
钻井计划优化、实时监控和风险评估
提供业务洞察与决策支持实现数据驱动决策
翻译|使用教程|编辑:龚雪|2024-09-03 10:53:36.670|阅读 10 次
概述:本文主要为大家介绍如何用DevExpress WinForms中热门的数据网格组件完成单元格自定义绘制,欢迎下载最新版体验~
# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>
相关链接:
在本教程中,您将学习如何使用DevExpress grid View(网格视图)的CustomDraw…事件,您将从一个显示普通任务数据的网格开始。首先使用事件来自定义单元格外观,然后修改相同的事件处理程序,来根据网格数据更改单个单元格中显示的文本。接下来将进一步扩展处理程序来在特定单元格中绘制图像,最后将看到如何自定义绘制列标题,同时保留其交互元素,如过滤器下拉按钮和排序符号。
P.S:DevExpress WinForms拥有180+组件和UI库,能为Windows Forms平台创建具有影响力的业务解决方案。DevExpress WinForms能完美构建流畅、美观且易于使用的应用程序,无论是Office风格的界面,还是分析处理大批量的业务数据,它都能轻松胜任!
获取DevExpress WinForms v24.1正式版下载
DevExpress技术交流群10:532598169 欢迎一起进群讨论
从一个应用程序开始,它有一个显示任务数据的GridControl。
选择grid View(网格视图)并处理事件,这个事件提供了和参数,用于标识正在绘制的单元格列参数。
C#
private void gridView_CustomDrawCell(object sender, DevExpress.XtraGrid.Views.Base.RowCellCustomDrawEventArgs e) { GridView view = sender as GridView; if (e.RowHandle == view.FocusedRowHandle) return; if (e.Column.FieldName != "UnitPrice") return; // Fill a cell's background if its value is greater than 30. if (Convert.ToInt32(e.CellValue) > 30) e.Appearance.BackColor = Color.FromArgb(60, Color.Salmon); }
运行应用程序来查看结果,如您所见,符合指定条件的单元格具有不同的外观,并且通过这种方式,CustomDraw…事件允许您实现任何复杂性的条件格式。
C#
private void gridView_CustomDrawCell(object sender, DevExpress.XtraGrid.Views.Base.RowCellCustomDrawEventArgs e) { // ... // Specify the cell's display text. double discount = Convert.ToDouble(view.GetRowCellValue(e.RowHandle, view.Columns["Discount"])); if (discount > 0) { double unitPrice = Convert.ToDouble(view.GetRowCellValue(e.RowHandle, view.Columns["UnitPrice"])); double discountPrice = unitPrice * (1 - discount); e.DisplayText = "Discount price: " + discountPrice.ToString("c2"); } }
再次运行应用程序。注意,某些列单元格显示的是折扣价而不是单价。从本质上讲,这允许您执行使用未绑定列表达式和显示文本格式可以执行的操作,但是使用CustomDraw…事件,您可以将这些更改应用于单个单元格,而不是整个列。
C#
private void gridView_CustomDrawCell(object sender, DevExpress.XtraGrid.Views.Base.RowCellCustomDrawEventArgs e) { // ... e.DefaultDraw(); // Paint images in cells if discounts > 0. Image image = Image.FromFile("c:\\important.png"); if (discount > 0) e.Cache.DrawImage(image, e.Bounds.Location); }
运行应用程序,为某些单元格显示自定义图像。
要自定义绘制列标题,请订阅GridView.CustomDrawColumnHeader事件,使用从“橙红色”到“白色”的渐变来填充列标题的背景,然后显示标题说明。将事件的参数设置为true,以防止在事件处理程序完成时调用默认的绘图机制。
C#
private void gridView_CustomDrawColumnHeader(object sender, ColumnHeaderCustomDrawEventArgs e) { Rectangle rect = e.Bounds; // Create a new brush using (Brush brush = new LinearGradientBrush(e.Bounds, Color.Salmon, Color.White, LinearGradientMode.ForwardDiagonal)) { // Fill a column's background e.Cache.FillRectangle(brush, rect); // Draw the column's caption e.Appearance.DrawString(e.Cache, e.Info.Caption, e.Info.CaptionRect); e.Handled = true; } }
现在运行应用程序,将列标题用“橙红色”到“白色”渐变绘制。
但是,不会显示通常的排序和筛选符号。有一种方法可以解决这个问题,并在列标题中显示标准的交互式元素。您需要枚举.InnerElements集合,并使用一个特殊设计的方法来绘制它们,如果它们的设置表明它们当前是可见的。
C#
private void gridView_CustomDrawColumnHeader(object sender, ColumnHeaderCustomDrawEventArgs e) { // ... // Draw the filter and sort buttons. foreach (DevExpress.Utils.Drawing.DrawElementInfo info in e.Info.InnerElements) { if (!info.Visible) continue; DevExpress.Utils.Drawing.ObjectPainter.DrawObject(e.Cache, info.ElementPainter, info.ElementInfo); } }
再次运行应用程序来查看结果,现在标题具有自定义外观,同时保留了标准元素,因此最终用户仍然可以以通常的方式与列标题进行交互。
C#
private void gridView_CustomDrawCell(object sender, DevExpress.XtraGrid.Views.Base.RowCellCustomDrawEventArgs e) { GridView view = sender as GridView; if (e.RowHandle == view.FocusedRowHandle) return; if (e.Column.FieldName != "UnitPrice") return; // Fill a cell's background if its value is greater than 30. if (Convert.ToInt32(e.CellValue) > 30) e.Appearance.BackColor = Color.FromArgb(60, Color.Salmon); // Specify the cell's display text. double discount = Convert.ToDouble(view.GetRowCellValue(e.RowHandle, view.Columns["Discount"])); if (discount > 0) { double unitPrice = Convert.ToDouble(view.GetRowCellValue(e.RowHandle, view.Columns["UnitPrice"])); double discountPrice = unitPrice * (1 - discount); e.DisplayText = "Discount price: " + discountPrice.ToString("c2"); } e.DefaultDraw(); // Paint images in cells if discounts > 0. Image image = Image.FromFile("c:\\important.png"); if (discount > 0) e.Cache.DrawImage(image, e.Bounds.Location); } private void gridView_CustomDrawColumnHeader(object sender, ColumnHeaderCustomDrawEventArgs e) { Rectangle rect = e.Bounds; // Create a new brush using (Brush brush = new LinearGradientBrush(e.Bounds, Color.Salmon, Color.White, LinearGradientMode.ForwardDiagonal)) { // Fill a column's background e.Cache.FillRectangle(brush, rect); // Draw the column's caption e.Appearance.DrawString(e.Cache, e.Info.Caption, e.Info.CaptionRect); e.Handled = true; } // Draw the filter and sort buttons. foreach (DevExpress.Utils.Drawing.DrawElementInfo info in e.Info.InnerElements) { if (!info.Visible) continue; DevExpress.Utils.Drawing.ObjectPainter.DrawObject(e.Cache, info.ElementPainter, info.ElementInfo); } }
更多产品资讯及授权,欢迎“”!
本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@capbkgr.cn
文章转载自:慧都网本文将探讨如何使用 Spire.XLS for .NET 在 C# 程序中导入 Excel 数据到数据库以及导出数据库到 Excel 文件,实现数据在 Excel 和数据库之间无缝流转。
在本文中,我们将向您展示如何逐步执行此操作,告诉您什么是 SCORM,为什么需要使用它,并列出我们测试过的最佳 SCORM 转换工具之一——iSpring Suite。
本文主要介绍如何使用Kendo UI for Angular组件的ListView来构建带有图表的仪表板,欢迎下载新版控件体验!
在本文中,您将学习如何使用Spire.PDF for .NET在 C# 中向 PDF 文档添加页码。
行业领先的界面控件开发包,帮助企业构建卓越应用!
DevExpress DXperience Subscription高性价比的企业级.NET用户界面套包,助力企业创建卓越应用!
DevExpress WinForms Subscription为Windows Forms平台创建具有影响力的业务解决方案,高性价比WinForms界面控件套包。
服务电话
重庆/ 023-68661681
华东/ 13452821722
华南/ 18100878085
华北/ 17347785263
客户支持
技术支持咨询服务
服务热线:400-700-1020
邮箱:sales@capbkgr.cn
关注我们
地址 : 重庆市九龙坡区火炬大道69号6幢