在Dev GridControl中添加颜色可变的ProgressBar z

在使用DevExpress,GridControl自带的ProgressBarControl的时候

由于无法通过BackColor/ForeColor来改变进度条的颜色所以很多特效是实现不了的。如下面

所以必须使用其他的一些方式来实现颜色可变的ProgressBar.

情况一、

不使用ProgressBarControl,而是根据单元格的值使用GDI绘制一个带背景色的长方形的方式来实现百分比的效果。同时绘制的触发是在CustomDrawCell的时候。

效果如下:

代码如下:

               private void gdvMarket_CustomDrawCell(object sender, RowCellCustomDrawEventArgs e)
        {

            if (e.Column == RangePercent)//涨跌幅对应的列
            {
                DrawProgressBar(e);
            }
        }
        private void DrawProgressBar(DevExpress.XtraGrid.Views.Base.RowCellCustomDrawEventArgs e)
        {
            decimal percent = Convert.ToDecimal(e.CellValue);
            int width= (int)(10*Math.Abs(percent) * e.Bounds.Width / 100);//涨跌幅最大为10%,所以要乘以10来计算比例,沾满一个单元格为10%
            Rectangle rect = new Rectangle(e.Bounds.X, e.Bounds.Y, width, e.Bounds.Height);
            Brush b = Brushes.Green;
            if (percent < 0)
                b = Brushes.Green;
            else if (percent < 2.5m)
                b = Brushes.Purple;
            else if (percent < 5.0m)
                b = Brushes.Red;
            else if (percent < 7.5m)
                b = Brushes.Yellow;
            e.Graphics.FillRectangle(b, rect);
        }

情况二、

注意:注意上面的图你会发现有个问题:选中行的颜色覆盖了,我们画上去的长方形ProgressBar,所以我们要屏蔽系统覆盖我们操作的流程。

稍微修改一下代码即可:

            if (e.Column == RangePercent)
            {
                DrawProgressBar(e);
                e.Handled = true;
            }

情况三、

注意:问题又来了!!这个时候由于屏蔽了系统的赋值的操作,导致单元格里面的数值没有了!看不到百分比了!并且,在单元格获取到焦点的时候,显示单元格的数值。

现在要做的就是达到下面的效果:ProgressBar单元格里面应该包括两个部分:ProgressBar+百分比数值【可以设置为可以编辑、也可以不可以不能编辑,当可以编辑的时候可以输入数值,一个百分比数值】

通过下面的代码和设计的修改即可:

       private  void DrawEditor(DevExpress.XtraGrid.Views.Base.RowCellCustomDrawEventArgs e)
        {
            GridCellInfo cell = e.Cell as GridCellInfo;
            Point offset = cell.CellValueRect.Location;
            BaseEditPainter pb = cell.ViewInfo.Painter as BaseEditPainter;
            AppearanceObject savedStyle = cell.ViewInfo.PaintAppearance;
            if (!offset.IsEmpty)
                cell.ViewInfo.Offset(offset.X, offset.Y);
            try
            {
                pb.Draw(new ControlGraphicsInfoArgs(cell.ViewInfo, e.Cache, cell.Bounds));
            }
            finally
            {
                if (!offset.IsEmpty)
                    cell.ViewInfo.Offset(-offset.X, -offset.Y);
            }
        }

        private void gdvMarket_CustomDrawCell(object sender, RowCellCustomDrawEventArgs e)
        {
            if (e.Column == RangePercent)
            {
                DrawProgressBar(e);
                e.Handled = true;
                DrawEditor(e);
            }
        }

同时:修改设计【这里也可以通过代码来修改】

查看效果

情况四、

看到上面的截图发现现在的效果基本上已经能够满足需求了,但是我们发现所有的选中行的前景色被覆盖了!!原来显示为红色或者绿色的前景色在选中之后都变成了黑色。

这里通过设计器或者代码都可以实现。

EnableAppearanceFocusedCell = False, EnableAppearanceFocusedRow = False

看效果:

情况五、

查看上面效果的时候,看到其他行的背景色都已经修改为我们设置的背景色了,但是ProgressBar的背景色并没有修改,要怎么样修改呢?对了先说一下怎么更改选中行的背景色【可能用户想配置这个选项,所以下面提供代码的形式】

设置选中行背景色:

        private void gdvMarket_RowCellStyle(object sender, RowCellStyleEventArgs e)
        {
            if (e.RowHandle == gdvMarket.FocusedRowHandle)
            {
                e.Appearance.BackColor = Color.CadetBlue;
            }
        }

ProgressBar的背景色并没有修改问题的解决办法:

        private void gdvMarket_CustomDrawCell(object sender, RowCellCustomDrawEventArgs e)
        {
            if (e.Column == RangePercent)
            {
                e.Appearance.DrawBackground(e.Cache, e.Bounds);
                DrawProgressBar(e);
                DrawEditor(e);
                e.Handled = true;
            }
         }

效果如下:

时间: 2024-10-08 13:40:56

在Dev GridControl中添加颜色可变的ProgressBar z的相关文章

在DevExpress GridControl中添加进度条控件 z

首先可以使用 DevExpress GridControl 自带的进度条控件. 但是我要用一个方法来设置所有的单元格进度,而不是每个单元格都要设置一遍,同时我想要根据进度值不同,进度条显示不同的颜色. 那么就要自己手动的编写代码来完成了. 1 .绘制一个单元格进度条形状,当进度小于50%时显示为红色. public void DrawProgressBar(DevExpress.XtraGrid.Views.Base.RowCellCustomDrawEventArgs e) { string

在脚本中添加颜色

shell脚本一直单调,但是在图形环境下运行,除了read和echo语句外,还有其他许多与脚本用户交互的方法.这一节深入介绍几种不同的方法. 1.创建文本菜单 创建交互式的shell文本,主要使用case语句 1.1.创建菜单布局 确定所要显示的内容: echo -e #-e指定了输出内容中必须要包含制表符和换行符. 例如:echo -e "1.\tDisplay disk space" 设置菜单: clear echo echo -e "\t\t\tSys Admin Me

Dev gridcontrol 添加多列按钮

gridcontrol中添加按钮的步骤: 1. 把列的ColumnEdit属性设置为RepositoryItemButtonEdit 2. 把TextEditStyle属性设置为HideTextEditor; 3. 把Buttons的Kind属性设置为Glyph; 4. 把Buttons的HorzAlignment属性设置为Center; 添加事件: 有时可能遇到增加的单击事件,不能触发. 原因:设置了GridControl了Editable为false! 设置为true后,双击触发. 如果数据

Dev C++中的错误的解决[Linker error] undefined reference to `__dyn_tls_init_callback&#39;

Dev C++中的错误的解决[Linker error] undefined reference to `__cpu_feat... 解决NOIP环境GUIDE和Dev之间的并存问题. 装上了NOIP的测试环境GUIDE后,想再用之前的Dev c++的编译器的时候,发现编译的时候出现问题,无法找到编译连接的库. 错误信息如下: [Linker error] undefined reference to `__cpu_features_init' ld returned 1 exit status

devexpress中gridcontrol头部添加垂直线(右边框)

winform开发,用devexpress中的gridcontrol控件,头部默认是3D样式,当客户希望像内容一样扁平化显示且需要添加垂直线(右边框)时恶梦开始了..经过一阵摸索发现可以这样解决: 1.设置GridControl的GridView控件的PaintStyleName属性为Web 2.为GridControl的GridView控件添加CustomDrawColumnHeader事件,参考代码如下: private void gridView1_CustomDrawColumnHead

【原】为DevExpress的ChartControl添加Y轴控制 和 GridControl中指定列添加超级链接

一.控制ChartControl的Y轴范围 使用Devexpress中的CharControl控件,需要控制AxisY轴的显示范围,需要使用该控件的BoundDataChanged事件,具体代码如下: 该代码实现的效果如下:   二.设置GridControl表格中的超级链接: 1.首先在表格的设计器中添加一个HyperLinkEdit 的 Repository: 2.将该Repository绑定到列表中的指定列中: 3.为第一步添加的rpLink控件添加Open_Link事件处理函数: 4.最

dev gridcontrol添加右键菜单

概述:右键菜单肯定是GridView中经常要使用的一个功能.本文主要描述两个方面:如何在GridView中添加右键菜单,以及如何设置菜单是否可用(enable). 右键菜单肯定是gridview中经常要使用的一个功能.本文主要描述两个方面:如何在GridView中添加右键菜单,以及如何设置菜单是否可用(enable). 一.添加右键菜单 1.在VS工具箱中的“菜单和工具栏”找到ContextMenuStrip控件,双击添加. 2.点击ContextMenuStrip右上方的小三角形,打开编辑项,

mfc中 控件 对话框 添加颜色 背景图片

1 设置对话框透明 在设置控件颜色中要使用 nCtlColor Contains one of the following values, specifying the type of control: CTLCOLOR_BTN   Button control CTLCOLOR_DLG   Dialog box CTLCOLOR_EDIT   Edit control CTLCOLOR_LISTBOX   List-box control CTLCOLOR_MSGBOX   Message b

discuz 修改亮剑积分商城2.91模板(在常用设置中添加商场首页排序方式的背景颜色)

在应用 -> 积分商城 -> 常用设置 中添加 商场首页排序方式 的背景颜色修改功能 步骤: 1.找到并打开此页面对应的模板source\plugin\aljsc\template\setting.htm 2.复制红色方块内的代码粘贴到方框底下: 3.将粘贴中的 c1 全部替换成 c2 和buttonbackcolor 替换成 linkbuttonbackcolor:保存即可,注意 排 是utf-8编码 <tr><td s="1" class="