在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)(*Math.Abs(percent) * e.Bounds.Width / );//涨跌幅最大为10%,所以要乘以10来计算比例,沾满一个单元格为10%
Rectangle rect = new Rectangle(e.Bounds.X, e.Bounds.Y, width, e.Bounds.Height);
Brush b = Brushes.Green;
if (percent < )
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;
}
}
效果如下:
在Dev GridControl中添加颜色可变的ProgressBar z的更多相关文章
- C# dev gridcontrol中添加checkbox复选框
文章来源 csdn weinierbian http://blog.csdn.net/weinierbian/article/details/6255402 添加一列,FieldName为 " ...
- 在DevExpress GridControl中添加进度条控件 z
首先可以使用 DevExpress GridControl 自带的进度条控件. 但是我要用一个方法来设置所有的单元格进度,而不是每个单元格都要设置一遍,同时我想要根据进度值不同,进度条显示不同的颜色. ...
- Dev gridcontrol 添加多列按钮
gridcontrol中添加按钮的步骤: 1. 把列的ColumnEdit属性设置为RepositoryItemButtonEdit 2. 把TextEditStyle属性设置为HideTextEdi ...
- JCEF 如何修改右键菜单项(JCEF在右键菜单中添加开发者选项-show dev tools)
需求: 在界面的右键事件中添加一个打开开发者选项的菜单(Show Dev Tools) 所以我们可以看到的是在界面上右键,会有默认的一些菜单项(前进,后退,打印,查看源码),而这些功能并不一定是我们需 ...
- discuz 修改亮剑积分商城2.91模板(在常用设置中添加商场首页排序方式的背景颜色)
在应用 -> 积分商城 -> 常用设置 中添加 商场首页排序方式 的背景颜色修改功能 步骤: 1.找到并打开此页面对应的模板source\plugin\aljsc\template\set ...
- 【原】为DevExpress的ChartControl添加Y轴控制 和 GridControl中指定列添加超级链接
一.控制ChartControl的Y轴范围 使用Devexpress中的CharControl控件,需要控制AxisY轴的显示范围,需要使用该控件的BoundDataChanged事件,具体代码如下: ...
- vue项目中使用bpmn-为节点添加颜色
内容概述 本系列 “vue项目中使用bpmn-xxxx” 分为五篇,均为自己使用过程中用到的实例,手工原创,目前属于陆续更新中.主要包括vue项目中bpmn使用实例.应用技巧.基本知识点总结和需要注意 ...
- DEV GridControl 小结(持续添加)
一.属性: 1.Views OptionsBehavior=>Editable:False 列表不可编辑 OptionsSelection=>EnableAppearanceFocuse ...
- dev 中的GridControl中的行实现选择的功能实现
1.项目有实现不GridControl中的数据导出Excel的功能,导出的时候是把所有的数据全部导出,现在要实现可供选择的灵活的导出功能.除了全选可全不选,还可以对每一行实现选择的功能.实现起来比较简 ...
随机推荐
- apple苹果产品国行和港行的区别
[iPhone国行和港行的区别]国行:耳机只能用在苹果设备上,不能用其它设备.充电器不用转接,直接可以用,保修的时候如果换新了,重新计算一年保修期.国行是三网通用.港行:耳机可以用在任何设备上.充电器 ...
- 微信小程序的那些坑
早闻微信小程序是个坑,结果名不虚传,细数一下我开发小程序遇过到坑. 1.UI组件过度封装. 微信小程序的组件是模仿react.js或vue.js的web组件设计的,并且封装了weui.css样式. P ...
- dubbo rpc filter实现剖析(一)
2.6.3版本,之前读的是2.4.9版本 本篇主要阐述dubbo rpc的filter的实现,包括作用,用法,原理,与Spring Cloud在这些能力的对比. 共提供了多少个?是哪些?发布时默认装配 ...
- PHP smarty模版引擎基本安装
环境: PHP5.2 以上版本 先去官网下载smarty模版引擎的库文件到你的电脑或服务器上 smarty官方网站库文件下载地址: https://www.smarty.net/download 下 ...
- [linux小技巧]批量移动文件
for i in {1..23};do mv test$i/ ../;done
- spl_autoload_register和__autoload
1.实例化一个未定义的类时会触发 2.类存在继承关系时,被继承的类没有引入的情况下,会触发 (继承关系的两个类必须在同一个目录下) __autoload 实例化PRINTIT类,'PRINTIT'作 ...
- 九度oj 题目1465:最简真分数
题目描述: 给出n个正整数,任取两个数分别作为分子和分母组成最简真分数,编程求共有几个这样的组合. 输入: 输入有多组,每组包含n(n<=600)和n个不同的整数,整数大于1且小于等于1000. ...
- curl post 用json方式
if(!function_exists('tps_curl_post3')){ function tps_curl_post3($url, $postData) { $postData = json_ ...
- 如何使用Python的logging模块
几个学习连接: Python官方链接: https://docs.python.org/3.4/library/logging.html?highlight=logging 翻译(不过是2.3版本的) ...
- 【bzoj1778】[Usaco2010 Hol]Dotp 驱逐猪猡 矩阵乘法+概率dp+高斯消元
题目描述 奶牛们建立了一个随机化的臭气炸弹来驱逐猪猡.猪猡的文明包含1到N (2 <= N <= 300)一共N个猪城.这些城市由M (1 <= M <= 44,850)条由两 ...