请问如何根据datagrid中的一列的值改变行的颜色

lovefootball 2005-04-13 01:37:06
在c#,winform下,有一个datagrid,根据其中一列,比如大于20的时候,要这行都显示成红色,怎么弄啊~~~~~~~~~
...全文
259 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
xubinhui 2005-04-15
  • 打赏
  • 举报
回复
支持ListView
S.F. 2005-04-13
  • 打赏
  • 举报
回复
hamadou(闵峰) 说的更好,我自己写的datagrid扩展组件也扩展了datagridtextboxclomn,但没有这样设计;
lovefootball 2005-04-13
  • 打赏
  • 举报
回复
to hamadou(闵峰)
vb.net的代码帮忙贴一下啊,我可以自己转,谢谢啊
hamadou 2005-04-13
  • 打赏
  • 举报
回复
可以使用一个事件关联参数e(继承自eventargs),该类包括调整列显示的颜色(背景色,前景色),行号,列名称等。给它加一个构造函数,让其初试化这些字段。
继承datagridtextboxclomn写一个用户控件,在 这个控件里加一个事件(以sender,e作为参数,其中这个参数e 就是上面的继承自eventargs的类实例),在onpaint事件里响应该事件。触发时要新建立一个参数e,作为传递的参数。在base.onpaint时,使用创建了的e的各个对应的属性作为参数。
在程序中委托这个事件,对e的各个参数相应的修改。要区别是哪行对应的datagridcolumn影响的,可以通过e的一个属性(例如字段名)来实现。为了是一行能改变,要在e中建立一个参数“行号”,该属性要在构造函数中初始化。不知道你明白了没有。呵呵。我对c#不熟悉,代码是vb.net的。所以没有贴出来。你自己按照这个思路试验一下吧!希望对你有帮助。
lovefootball 2005-04-13
  • 打赏
  • 举报
回复
谢谢S.F.(吃青春饭的)
这么麻烦啊,有什么简单的办法么?那还不如用listview呢。
S.F. 2005-04-13
  • 打赏
  • 举报
回复
这样即可;不过你得继承datagrid组件,重写OnPaint事件,具体实现如下;
public class DataGridEx : DataGrid
{
..........
protected override void OnPaint(PaintEventArgs e){
base.OnPaint(e);//继承原始绘制动作
System.Windows.Forms.DataGrid.HitTestInfo myHitTest;
myHitTest = this.HitTest(e.ClipRectangle.X,e.ClipRectangle.Y);
//检查是否为cell
if(myHitTest.Type==System.Windows.Forms.DataGrid.HitTestType.Cell){
try{
//这里myHitTest.Row Column 分别表示行和列的索引你可以取得值写判断了
string s = dataGrid[myHitTest.Row,myHitTest.Column].ToString();
//下面是绘制动作
RectangleF ef1;
Rectangle rectangle1 = this.GetCellBounds(myHitTest.Row,myHitTest.Column);
SolidBrush brush1 = new SolidBrush(this.dataGrid.BackColor);
StringFormat format1 = new StringFormat();
brush1.Color = this.dataGrid.BackColor;
e.Graphics.FillRectangle(brush1, rectangle1);
brush1.Color = Color.Red;
ef1 = new RectangleF((float) rectangle1.X, (float) (rectangle1.Y + 2), (float) rectangle1.Width, (float) (rectangle1.Height - 2));
e.Graphics.DrawString(s,dataGrid.Font,brush1,ef1,format1);
}catch{;}
}

该代码是从我自己写的dataGrid扩展组件内复制来的。希望你可以解决问题。
lovefootball 2005-04-13
  • 打赏
  • 举报
回复
to dutguoyi(新鲜鱼排) ,谢谢先
我的datagrid怎么没有items的属性啊?
新鲜鱼排 2005-04-13
  • 打赏
  • 举报
回复
错了,忘了是winform。我的是在webform里。
区别不大,改一下就好了。
新鲜鱼排 2005-04-13
  • 打赏
  • 举报
回复
for(int i=0;i<ds.Tables[0].Rows.Count;i++)
{
string j=ds.Tables[0].Rows[i].ItemArray[0].ToString();
if(Convert.ToInt32(j)>20)
{
this.DataGrid1.Items[i].Cells[0].BackColor=Color.Black;//相应的单元格
this.DataGrid1.Items[i].BackColor=Color.Black;//相应的行
}
}
新鲜鱼排 2005-04-13
  • 打赏
  • 举报
回复
帮顶,马上解决。
lovefootball 2005-04-13
  • 打赏
  • 举报
回复
应该很简单的吧
up
S.F. 2005-04-13
  • 打赏
  • 举报
回复
gz
lovefootball 2005-04-13
  • 打赏
  • 举报
回复
怎么没人理我啊
lovefootball 2005-04-13
  • 打赏
  • 举报
回复
up

111,098

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧