C#实现给DevExpress中GridView表格指定列添加进度条

目录
  • 一、问题描述
  • 二、实现方法
    • 2.1、先注册单元格绘制方法
    • 2.2、编写给指定单元格绘制进度条的方法
    • 2.3、使用给指定单元格绘制进度条方法
  • 三、相关内容
    • 3.1、给单元格设置百分比

一、问题描述

在我们使用Winform配合DevExpress进行开发表格时,表格中的涉及到百分比数据的内容除了显示百分比的数字内容外,还希望搭配显示进度条效果(且低于百分之60的内容用红色表示不合格,高于百分之60的用绿色表示),这样百分比的显示效果更加清晰直观。

二、实现方法

2.1、先注册单元格绘制方法

2.2、编写给指定单元格绘制进度条的方法

        #region   给表格指定列绘制进度条

        /// <summary>
        /// 给指定列绘制进度条
        /// </summary>
        /// <param name="gridView">GridView控件</param>
        /// <param name="columnFieldName">需绘制进度条列的字段名称</param>
        /// <param name="warningValue">警告值(用于区分不同的颜色)</param>
        /// <param name="beforeWaringValueColor">警告值前的进度条颜色</param>
        /// <param name="afterWaringValueColor">警告值后的进度条颜色</param>
        public static void DrawProgressBarToColumn(DevExpress.XtraGrid.Views.Grid.GridView gridView, string columnFieldName,
            double warningValue = 60, Brush beforeWaringValueColor = null, Brush afterWaringValueColor = null)
        {
            var column = gridView.Columns[columnFieldName];
            if (column == null) return;
            column.AppearanceCell.Options.UseTextOptions = true;
            //设置该列显示文本内容的位置(这里默认居中)
            column.AppearanceCell.TextOptions.HAlignment = HorzAlignment.Center;
            //绘制事件方法(前提需要先注册才能够接收到参数使用)
            gridView.CustomDrawCell += (s, e) =>
            {
                if (e.Column.FieldName == columnFieldName)
                {
                    DrawProgressBar(e, warningValue, beforeWaringValueColor, afterWaringValueColor);
                    e.Handled = true;
                    DrawEditor(e);
                }
            };
        }

        /// <summary>
        /// 绘制进度条
        /// </summary>
        /// <param name="e">单元格绘制事件参数</param>
        /// <param name="warningValue">警告值(用于区分不同的颜色)</param>
        /// <param name="beforeWaringValueColor">警告值前的进度条颜色</param>
        /// <param name="afterWaringValueColor">警告值后的进度条颜色</param>
        public static void DrawProgressBar(DevExpress.XtraGrid.Views.Base.RowCellCustomDrawEventArgs e, double warningValue = 60,
            Brush beforeWaringValueColor = null, Brush afterWaringValueColor = null)
        {
            string tmpValue = e.CellValue.ToString();
            float percent = 0;
            if (!string.IsNullOrEmpty(tmpValue))
            {
                float.TryParse(tmpValue, out percent);
            }
            int width = 0;
            if (percent >2)
            {
                width = (int)(Math.Abs(percent / 100) * e.Bounds.Width);
            }
            else
            {
                width = (int)(Math.Abs(percent) * e.Bounds.Width);
            }

            Rectangle rect = new Rectangle(e.Bounds.X, e.Bounds.Y, width, e.Bounds.Height);

            Brush b = Brushes.Green;
            if (afterWaringValueColor != null)
            {
                b = afterWaringValueColor;
            }
            if (percent < warningValue)
            {
                if (beforeWaringValueColor == null)
                {
                    b = Brushes.Red;
                }
                else
                {
                    b = beforeWaringValueColor;
                }
            }
            e.Graphics.FillRectangle(b, rect);
        }

        /// <summary>
        /// 绘制单元格
        /// </summary>
        /// <param name="e">单元格绘制事件参数</param>
        public static void DrawEditor(DevExpress.XtraGrid.Views.Base.RowCellCustomDrawEventArgs e)
        {
            DevExpress.XtraGrid.Views.Grid.ViewInfo.GridCellInfo cell = e.Cell as DevExpress.XtraGrid.Views.Grid.ViewInfo.GridCellInfo;
            Point offset = cell.CellValueRect.Location;
            DevExpress.XtraEditors.Drawing.BaseEditPainter pb = cell.ViewInfo.Painter as DevExpress.XtraEditors.Drawing.BaseEditPainter;
            AppearanceObject style = cell.ViewInfo.PaintAppearance;
            if (!offset.IsEmpty)
                cell.ViewInfo.Offset(offset.X, offset.Y);
            try
            {
                pb.Draw(new DevExpress.XtraEditors.Drawing.ControlGraphicsInfoArgs(cell.ViewInfo, e.Cache, cell.Bounds));
            }
            finally
            {
                if (!offset.IsEmpty)
                {
                    cell.ViewInfo.Offset(-offset.X, -offset.Y);
                }
            }
        }

        #endregion 

2.3、使用给指定单元格绘制进度条方法

注意:在使用给指定单元格绘制进度条方法时(如果数字都是小于1的那么警告值也是需要小于1;如果是大于1的则按照需要设置即可)。

使用方法语法

DrawProgressBarToColumn(gridView组件名称, 需要绘制进度条的单元格字段, 警告值,警告值前的进度条颜色,警告值后的进度条颜色);

示例1

DrawProgressBarToColumn(gridView1, "Age", 0.6,Brushes.OrangeRed,Brushes.LawnGreen);

示例2

DrawProgressBarToColumn(gridView1, "Age", 0.6, new SolidBrush(Color.FromArgb(236, 65, 65)), new SolidBrush(Color.FromArgb(45, 115, 186)));

三、相关内容

3.1、给单元格设置百分比

        /// <summary>
        /// 设置表格指定单元格都使用百分比
        /// </summary>
        /// <param name="gridView">gridView组件</param>
        /// <param name="columnName">列名称</param>
        public static void SetPercentage(GridView gridView, string columnName)
        {
            if (gridView != null && gridView.Columns.Count > 0 && !string.IsNullOrEmpty(columnName))
            {
                gridView.Columns[columnName].DisplayFormat.FormatType = FormatType.Numeric;
                gridView.Columns[columnName].DisplayFormat.FormatString = "P2";
            }
        }

上面这个代码实现的是将小数转为百分比显示【比如将小数(0.3)使用后就转为(30%)显示】

        /// <summary>
        /// 给表格指定单元格都保留2位小数后添加%号
        /// </summary>
        /// <param name="gridView"></param>
        /// <param name="startColumnIndex"></param>
        /// <param name="endColumnIndex"></param>
        public static void SetResreserveTwoBitAndPercentageChar(GridView gridView, int startColumnIndex, int endColumnIndex)
        {
            if (gridView != null && gridView.Columns.Count > 0 &&
               startColumnIndex > 0 && endColumnIndex > 0 &&
               endColumnIndex <= gridView.Columns.Count)
            {
                for (int i = startColumnIndex; i <= endColumnIndex; i++)
                {
                    gridView.Columns[i].DisplayFormat.FormatType = FormatType.Numeric;
                    gridView.Columns[i].DisplayFormat.FormatString = $"{0:N2}'%'";

                }
            }
        }

上面这个代码实现的是给数字添加百分号符号显示【比如将小数(86.2356)使用后就转为(86.24%)显示】

以上就是C#实现给DevExpress中GridView表格指定列添加进度条的详细内容,更多关于C# DevExpress GridView表格添加进度条的资料请关注我们其它相关文章!

(0)

相关推荐

  • C#使用DevExpress中的SplashScreenManager控件实现启动闪屏和等待信息窗口

    DevExpress中SplashScreenManager这个控件的主要作用就是显示程序集加载之前的进度条显示和进行耗时操作时候的等待界面. 一.SplashScreenManager控件的使用 1.新建一个Windows窗体,在工具栏中找到这个控件,把它拖放到Windows窗体中,开发工具默认会在窗体下边显示这个不可视控件. 2.SplashScreenManager控件只是作为加载界面的统一管理器,我们要使用加载界面,需要自行创建加载界面. 找到这个控件,点击右上角的三角图标,出现如下显示

  • DevExpress实现GridView当无数据行时提示消息

    本文实例展示了DevExpress实现GridView当无数据行时提示消息的方法,具体步骤如下: 主要功能代码部分如下: /// <summary> /// 设置当没有数据行的提示信息『CustomDrawEmptyForeground』 /// </summary> /// <param name="gridView">GridView</param> /// <param name="e">Custom

  • c# DevExpress gridcontrol日期行的显示格式设置

    如上图所示,日期显示为"MM月DD日",或者其它格式,比如显示年.月.日 或 年月日带时间,设置如下: 1.如下图设置,日期为d,时间为t: 2.在事件里面如下写法: private void bandedGridView1_CustomColumnDisplayText( object sender, DevExpress.XtraGrid.Views.Base.CustomColumnDisplayTextEventArgs e ) { // 日期显示格式 PQF31.Displa

  • DevExpress GridView自动滚动效果

    引言 最新有一个winform项目使用的是DevExpress的控件,所以最近都在摸索使用这套控件,实在是佩服整套控件的强大,同时代码写起来也简洁.客户有一个需求,希望报表结果能在外接的大屏幕上定时滚动.这个报表我们使用的控件就是GridControl,查询结果一屏不能显示完全,增加一个定时器,指定时间让GridView自动滚动显示下一屏的信息. 同事的实现 但是看到同事实现的代码时,却觉得有点不舒服.他大概的代码如下: /// <summary> /// 当前的行索引 /// </su

  • C#中使用DevExpress中的ChartControl实现极坐标图的案例详解

    目录 背景 实现思路 参考代码 背景 在工控软件的开发中很多业务场景就是使用图表控件展示设备和工艺参数.如下图案例: 实现思路 通常简单的做法是使用图表控件实现,常用的图表控件有开源的ZedGraph,还有付费的TeeChart和DevExpress.常规的曲线图.柱状图.饼图的实现,三个控件都可以很好的实现,建议使用开源的ZedGraph.但是在实现雷达图.极坐标图等特定图表时ZedGraph就不能支持,TeeChart用起来也不是那么完美,对比后发现DevExpress的ChartContr

  • C#使用DevExpress中的XtraCharts控件实现图表

    目录 一.总体概述 二.chartControl层\XYDiagram层 1.当坐标轴的数据类型是数字时 2. 当前数据类型是字符串时 3.当前数据类型是时间 三.实例 1.饼状图 1.1.添加ChartControl控件 1.2.准备数据 1.3.根据数据创建饼状图 1.4.设置饼状Series显示方式(值/百分比) 2.柱状图 2.1.添加ChartControl控件 2.2.准备数据 2.3.根据数据创建柱状图 2.4.用到的方法 四.事件 1.CustomDrawAxisLabel :

  • C#实现给DevExpress中GridView表格指定列添加进度条

    目录 一.问题描述 二.实现方法 2.1.先注册单元格绘制方法 2.2.编写给指定单元格绘制进度条的方法 2.3.使用给指定单元格绘制进度条方法 三.相关内容 3.1.给单元格设置百分比 一.问题描述 在我们使用Winform配合DevExpress进行开发表格时,表格中的涉及到百分比数据的内容除了显示百分比的数字内容外,还希望搭配显示进度条效果(且低于百分之60的内容用红色表示不合格,高于百分之60的用绿色表示),这样百分比的显示效果更加清晰直观. 二.实现方法 2.1.先注册单元格绘制方法

  • 关于Element-UI Table 表格指定列添加点击事件

    目录 Element-UI Table 表格指定列添加点击事件 element-ui table表格错位问题 问题描述 解决方案 Element-UI Table 表格指定列添加点击事件 如下图所示,这是一个ele UI库中的table,一般情况下我们只能通过tableDATA来向里面填充数据来展示,而无法对其中添加点击时间等操作.这里就来记录学习一下. 这是我们的一般使用方法,只能将数据进行展示.我们需要在el-table-column标签里面来进行处理 <el-table :data="

  • Vue+jquery实现表格指定列的文字收缩的示例代码

    本文介绍了Vue+jquery实现表格指定列的文字收缩的示例代码,分享给大家,具体如下: 效果很简单,但是写起来真的不容易,因为Vue对于没有React这种前端框架经验的人是不友好的 (少吐槽,多工作,省下时间出去hi) 先说一下我走过的弯路:我之间想通过 v-if 指令去操作这一列 代码是这样的: <el-table-column width="250" align="center" label="比较基准"> <templa

  • vue element-ui中table合计指定列求和实例

    注意点: 1. <el-table> 中 加:summary-method="getSummaries" 2. <el-table-column> 中要加 prop // 房间号的合计去掉 getSummaries (param) { const { columns, data } = param const sums = [] columns.forEach((column, index) => { if (index === 0) { sums[ind

  • Swift中通过叠加UILabel实现混合进度条的方法

    先给大家展示下效果图,如果大家感觉还不错,请参考实现代码. 效果图如下所示: 源码 https://github.com/YouXianMing/Swift-Animations // // MixedColorProgressViewController.swift // Swift-Animations // // Created by YouXianMing on 16/8/21. // Copyright © 2016年 YouXianMing. All rights reserved.

  • Android中WebView加载网页设置进度条

    本文实例为大家分享了Android中WebView加载网页设置进度条的具体代码,供大家参考,具体内容如下 效果: xml: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" a

  • Flex中对表格某列的值进行数字格式化并求百分比添加%

    1.问题背景 一般的,需要对表格中某列的数值进行格式化,对该数值乘以100,并保留两位小数,添加"%" 2.实现实例 <?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark"

  • 在SQL Server 2005所有表中搜索某个指定列的方法

    有时候我们只知道列的名字,但是不知道这列数据到底在哪个表里面,那么可以用下面的办法把含有这列数据的表查找出来. 复制代码 代码如下: Select O.name objectName, C.name ColumnName from sys.columns C inner join sys.objects O ON C.object_id=O.object_id where C.name like '%ColumnName%'order by O.name, C.name 在你实际试用中,把Col

  • iOS中WKWebView仿微信加载进度条

    本文实例为大家分享了WKWebView仿微信加载进度条的具体代码,供大家参考,具体内容如下 WKWebView添加了estimatedProgress属性(double类型),我们可以利用该属性来设置UIProgressView github代码仓库上存放的Demo 为页面添加UIProgressView属性 @property (nonatomic, strong) WKWebView *mywebView; @property (nonatomic, strong) UIProgressVi

  • javascript如何动态加载表格与动态添加表格行

    一.动态加载表格 1.首先在html中为表格的添加位置设置id 即是在html的body标签内部写一个div标签表明表格要添加到此div的内部.如下 <div id="tdl"><div> 2.在javascript中写添加表格的语句 若在当前html文件中,则写在<script>标签内部,如 复制代码 代码如下: <script type="text/javascript" > document.getElement

随机推荐