改变DataGrid指定行的颜色.pdfVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
改变DataGrid指定行的颜色

新建 文本文档 (2).txt 在DataGrid(WinForm)中改变符合指定条件的行颜色的方法 鼓起勇气贴上这篇帖子,实在不知道究竟是否有人会看。而随着Whidbey的推出,这个问题应该已经不复存在——新的DataGridView控件据说可以直接设置行颜色—— 不过考虑到Whidbey目前只是测试版,DataGrid控件还在广泛地使用,本文或许能对面临同样问题的朋友稍有帮助。 大家都知道DataGrid控件通过其属性TableStyles控制每个对应的DataTable的显示风格,而每个TableStyle又通过其属性GridColumnStyles控制每一列的显示风格,但 却没有属性或方法可以直接设置每行数据的显示风格。这或许是出于使用方法考虑(在绑定数据源前当然不知道有哪些行,行中有哪些数据),或许是出于性能考虑( 为每行建立显示风格索引的代价会比较大),或者是其他考虑(我没想到的^_^)。但实际工作中这种需求很多,比如“当资源小于某个临界值就变红色显示”之类 的。如果可以做到改变行的颜色,应该能满足这些需求中的大部分。然而按照常规方法,在一列当中,每个单元格(即每行)的显示风格都是相同的。 改变DataGrid控件行颜色的基本技巧就是重写DataGridColumnStyle的Paint方法,更改其中的foreBrush和backBrush两个参数,再重新调用基类的Paint方法。当然实 际操作中我们不能直接继承DataGridColumnStyle类,而是要从它的子类DataGridTextBoxColumn,DataGridBoolColumn中继承(可惜我们不能在这个继承层次中插入我 们自己的类,呵呵)。如下所示: public class DataGridColoredTextBoxColumn : DataGridTextBoxColumn { //重载绘制单元格的函数,如果该单元格所在行符合ColoredView中的条件,就改变前景和背景色 protected override void Paint(System.Drawing.Graphics g, System.Drawing.Rectangle bounds, System.Windows.Forms.CurrencyManager source, int rowNum, System.Drawing.Brush backBrush, System.Drawing.Brush foreBrush, bool alignToRight) { /*在这里加入判断条件,决定是否更改颜色 if (...) backBrush = new SolidBrush(...); foreBrush = new SolidBrush(...); */ **************************************************************************************************************************** //调用基类的绘制函数 base.Paint(g, bounds, source, rowNum, backBrush, foreBrush, alignToRight); } } 这个方法本身很好理解,我们再为这个类加上一个设置颜色的公共方法,就可以在使用的时候指定颜色了(这里的颜色是广义的概念,对于Brush来说,也可以指定渲 染方式)。问题的关键在于我们如何设置if里面的那个条件:我们能看出Paint方法的参数rowNum给出了正在绘制的当前行行号,那么是否可以通过指定行号来决定改 变那一行的颜色呢?答案是否定的。首先,rowNum给出的行号是当前显示的行号,而我们在外部通过某些条件选出来的往往是DataSource中的行号,由于排序等操作会 改变显示顺序,这两者有可能不一致;其次,我们往往是希望符合一定条件的行变色,而不是特定位置的行变色,如果直接指定行号,就会造成设置的颜色成了 DataGrid的背景,有失初衷。 既然如此,我们是不是可以通过rowNum直接取出要判断的那一列的内容,根据它的值来判断是否变色呢?网上有不少例子都是这么实现的,作为展示一个技巧,当然已 经足够了,不过实际使用却不太方便。因为这势必要求我们把判断条件(age20, name like Jack之类的)硬编码在方法中,不够灵活,如果有多个地方需要设 置

文档评论(0)

liwenhua00 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档