CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
IBM Rational 系统开发最佳实践工具包 WebSphere MQ 最佳实践 TOP 15
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  .NET技术 >  VB.NET

如何根据数据内容改变DataGrid中行的颜色!

楼主yifanlxj(微观工作室)2006-03-20 12:01:00 在 .NET技术 / VB.NET 提问

如何根据数据内容改变DataGrid中行的颜色!  
  我想根据我某一列的内容来设置不同的颜色加以区分数据显示。 问题点数:50、回复次数:14Top

1 楼zhengoodman(伤心小箭--甩一个人需要理由吗?)回复于 2006-03-20 13:20:36 得分 10

http://topic.csdn.net/t/20040914/10/3370132.html  
  是用C#做的改变行的颜色.可以参考一下.  
   
  http://topic.csdn.net/t/20040714/09/3172700.html  
  如何取得datagrid中得某一行中某一列得值。(C#做的asp.net的例子)  
   
  取得指定行指定列的值后,根据值判断,让其显示指定的颜色即可.  
  以上两个例子虽然没用vb.net但都是基于CLR的.相信稍做修改就可以用了.  
   
  Top

2 楼Gerryjiang(下一站)回复于 2006-03-20 13:28:47 得分 10

重载System.Windows.Forms.DataGridTextBoxColumn   paint事件  
     
    Protected   Overloads   Overrides   Sub   Paint(ByVal   g   As   Graphics,   ByVal   Bounds   As   Rectangle,   ByVal   Source   As   CurrencyManager,   ByVal   RowNum   As   Integer,   ByVal   BackBrush   As   Brush,   ByVal   ForeBrush   As   Brush,   ByVal   AlignToRight   As   Boolean)  
                  Dim   bdel   As   String   =   CType(GetColumnValueAtRow(Source,   RowNum),   String)  
                  Try  
                          'Dim   bdel   As   Boolean   =   True  
                          If   bdel   <>   ""   Then  
                                  If   InStr(bdel,   vbCrLf   &   "x   ")   >   0   Then  
                                          BackBrush   =   Brushes.Coral  
                                          If   InStr(bdel,   vbCrLf   &   "x   0")   >   0   Then  
                                                  BackBrush   =   Brushes.Green  
                                          End   If  
                                  Else  
                                                  BackBrush   =   Brushes.CadetBlue  
                                          End   If  
                                  Else  
                                  BackBrush   =   Brushes.White  
                          End   If  
                          g.FillRectangle(BackBrush,   Bounds.X,   Bounds.Y,   Bounds.Width,   Bounds.Height)  
                          Dim   font   As   System.Drawing.Font   =   New   Font(System.Drawing.FontFamily.GenericSansSerif,   CType(11,   Single),   FontStyle.Bold)  
                          g.DrawString(bdel.ToString,   font,   Brushes.Black,   Bounds.X,   Bounds.Y)  
   
                  Catch   ex   As   Exception  
                          MsgBox(ex.Message)  
                  End   Try  
   
          End   Sub  
   
  并将这个style赋给datagrid  
  Top

3 楼yifanlxj(微观工作室)回复于 2006-03-20 13:32:04 得分 0

我先研究一下。如果解决回头结帖!Top

4 楼yifanlxj(微观工作室)回复于 2006-03-20 13:42:49 得分 0

我要根据数据库中的内容来改变某些特定行的颜色。Top

5 楼yifanlxj(微观工作室)回复于 2006-03-20 20:42:28 得分 0

还有人再讲述的没有?我看的不太懂。Top

6 楼Samen168(Code to coding)回复于 2006-03-20 20:49:20 得分 0

BS比较简单,CS的话Gerryjiang(下一站)的方法可行Top

7 楼yifanlxj(微观工作室)回复于 2006-03-20 21:21:02 得分 0

Dim   bdel   As   String   =   CType(GetColumnValueAtRow(Source,   RowNum),   String)说这一句中的GetColumnValueAtRow未定义。  
  InStr(bdel,   vbCrLf   &   "x   0")   和InStr(bdel,   vbCrLf   &   "x   ")是什么意思?Top

8 楼Gerryjiang(下一站)回复于 2006-03-20 23:13:00 得分 0

InStr(bdel,   vbCrLf   &   "x   0")   和InStr(bdel,   vbCrLf   &   "x   ")是什么意思?  
  不要太关注这句话。  
  关键是重载System.Windows.Forms.DataGridTextBoxColumn  
  Paint事件按你所需要的去写。  
  主要就是定义brush绘图Top

9 楼kjq_vb(跟着MS走)回复于 2006-03-21 01:04:49 得分 5

InStr(bdel,   vbCrLf   &   "x   0")   和InStr(bdel,   vbCrLf   &   "x   ")是什么意思?  
  instr是个查找字符串函数,意思是在bdel字符串中查找vbcrlf   &   "x   0",vbcrlf是回车换行,并返回查找到的位置,找不到就返回0Top

10 楼yifanlxj(微观工作室)回复于 2006-03-21 08:26:44 得分 0

Gerryjiang(下一站)  
  请再帮一下忙,两个地方不明白:  
  1.这个定义放在什么地方,完整的声明如何写?  
  2.提示GetColumnValueAtRow未定义该如何解决?  
   
  我试着将这个定义放在FrmIcm中,将名称改为:DataGrid1_Paint(),但提示不能要Overrides关键字。放在FrmIcm中是否可以。  
  Protected   Overloads   Overrides   Sub   Paint(ByVal   g   As   Graphics,   ByVal   Bounds   As   Rectangle,   ByVal   Source   As   CurrencyManager,   ByVal   RowNum   As   Integer,   ByVal   BackBrush   As   Brush,   ByVal   ForeBrush   As   Brush,   ByVal   AlignToRight   As   Boolean)Top

11 楼jekeywood(各回各家,各找各妈!)回复于 2006-03-21 11:19:44 得分 5

objDataGridTableStyle.AlternatingBackColor   =   Color.WhiteSmoke       '交替的显示表格每行的背景  
  objDataGridTableStyle.DataGrid.TableStyles.Add(objDataGridTableStyle)Top

12 楼yifanlxj(微观工作室)回复于 2006-03-21 13:51:13 得分 0

晕!没有再说两句!Top

13 楼Gerryjiang(下一站)回复于 2006-03-21 15:38:35 得分 20

Sample:  
   
  Imports   System  
  Imports   System.ComponentModel  
  Imports   System.Drawing  
  Imports   System.Windows.Forms  
   
  Public   Class   ColumnStyle  
          Inherits   DataGridTextBoxColumn  
   
          Public   Sub   New(ByVal   pcol   As   PropertyDescriptor)  
   
          End   Sub  
   
          Protected   Overrides   Sub   Abort(ByVal   RowNum   As   Integer)  
   
          End   Sub  
   
          Protected   Overrides   Function   Commit(ByVal   DataSource   As   CurrencyManager,   ByVal   RowNum   As   Integer)   As   Boolean  
                  Return   True  
          End   Function  
   
          Protected   Overloads   Overrides   Sub   Edit(ByVal   source   As   CurrencyManager,   ByVal   rowNum   As   Integer,   ByVal   bounds   As   Rectangle,   ByVal   [readOnly]   As   Boolean,   ByVal   instantText   As   String,   ByVal   cellIsVisible   As   Boolean)  
   
          End   Sub  
   
          Protected   Overrides   Function   GetMinimumHeight()   As   Integer  
                  Return   65  
          End   Function  
   
          Protected   Overrides   Function   GetPreferredHeight(ByVal   g   As   Graphics,   ByVal   Value   As   Object)   As   Integer  
                  Return   65  
          End   Function  
   
          Protected   Overrides   Function   GetPreferredSize(ByVal   g   As   Graphics,   ByVal   Value   As   Object)   As   Size  
                  Dim   cellSize   As   Size   =   New   Size(105,   65)  
                  Return   cellSize  
          End   Function  
   
          Protected   Overloads   Overrides   Sub   Paint(ByVal   g   As   Graphics,   ByVal   Bounds   As   Rectangle,   ByVal   Source   As   CurrencyManager,   ByVal   RowNum   As   Integer,   ByVal   BackBrush   As   Brush,   ByVal   ForeBrush   As   Brush,   ByVal   AlignToRight   As   Boolean)  
                  Dim   bdel   As   String   =   CType(GetColumnValueAtRow(Source,   RowNum),   String)  
                  Try  
                          'Dim   bdel   As   Boolean   =   True  
                          If   bdel   <>   ""   Then  
                                  If   InStr(bdel,   vbCrLf   &   "x   ")   >   0   Then  
                                          BackBrush   =   Brushes.Coral  
                                          If   InStr(bdel,   vbCrLf   &   "x   0")   >   0   Then  
                                                  BackBrush   =   Brushes.Green  
                                          End   If  
                                  Else  
                                                  BackBrush   =   Brushes.CadetBlue  
                                          End   If  
                                  Else  
                                  BackBrush   =   Brushes.White  
                          End   If  
                          g.FillRectangle(BackBrush,   Bounds.X,   Bounds.Y,   Bounds.Width,   Bounds.Height)  
                          Dim   font   As   System.Drawing.Font   =   New   Font(System.Drawing.FontFamily.GenericSansSerif,   CType(10,   Single),   FontStyle.Bold)  
                          g.DrawString(bdel.ToString,   font,   Brushes.Black,   Bounds.X,   Bounds.Y)  
   
                  Catch   ex   As   Exception  
                          MsgBox(ex.Message)  
                  End   Try  
   
          End   Sub  
   
  End   ClassTop

14 楼Gerryjiang(下一站)回复于 2006-03-21 15:40:48 得分 0

datagrid应用:  
  将style给datagrid,  
  Private   DGStyle   As   DataGridTableStyle  
   
          CreateDataGridStyle(m_rows,   m_cols)  
          dbdRack.TableStyles.Add(DGStyle)  
   
  Public   Sub   CreateDataGridStyle(ByVal   row   As   Integer,   ByVal   col   As   Integer)  
                  Try  
   
   
                          Dim   GridSeqStyle(col   -   1)   As   DataGridColumnStyle  
                          DGStyle   =   New   DataGridTableStyle  
                          DGStyle.MappingName   =   "Rack"  
                          DGStyle.GridLineStyle   =   System.Windows.Forms.DataGridLineStyle.Solid  
                          DGStyle.GridLineColor   =   Color.Gray  
                          Dim   i   As   Integer  
                          Dim   pcol   As   PropertyDescriptorCollection   =   Me.BindingContext(myDataSet,   "Rack").GetItemProperties  
   
                          'GridSeqStyle   =   New   DataGridTextBoxColumn  
                          For   i   =   0   To   col   -   1  
                                  GridSeqStyle(i)   =   New   ColumnStyle(pcol(0))  
                                  GridSeqStyle(i).MappingName   =   "Rack"   &   i  
                                  GridSeqStyle(i).Width   =   105  
                                  DGStyle.GridColumnStyles.Add(GridSeqStyle(i))  
                          Next  
                          DGStyle.RowHeadersVisible   =   False  
   
                          'DGStyle.PreferredRowHeight   =   30  
                  Catch   ex   As   Exception  
                          Throw   ex  
                  End   Try  
          End   Sub  
  Top

相关问题

  • DataGrid 选中行变颜色问题
  • 数据窗口中行被选中,颜色怎么设置?
  • 今日21分: 数据窗口选中行颜色改变问题
  • 高手解答:如何改变DataGrid选中行的颜色
  • 小问题:DataGrid中如何改变选中行的颜色(在线等)
  • 在WebForm中如何提取DataGrid 选中行中某列的数据?
  • Datagrid 单击选中行 在同页面的文本框显示数据如何实现?
  • 请问 DATAGRID 如何实现 数据行的交换颜色???
  • 数据行颜色
  • DataGrid中有多行数据,如何设置交叉的背景颜色?

关键词

  • .net
  • c#
  • datagrid
  • 数据
  • 内容
  • bdel
  • dgstyle
  • backbrush
  • byval
  • gridseqstyle

得分解答快速导航

  • 帖主:yifanlxj
  • zhengoodman
  • Gerryjiang
  • kjq_vb
  • jekeywood
  • Gerryjiang

相关链接

  • CSDN .NET频道
  • .NET类图书
  • C#类图书
  • .NET类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo