请问如何根据datagrid中的一列的值改变行的颜色 在c#,winform下,有一个datagrid,根据其中一列,比如大于20的时候,要这行都显示成红色,怎么弄啊~~~~~~~~~ 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 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;//相应的行 } } 错了,忘了是winform。我的是在webform里。区别不大,改一下就好了。 to dutguoyi(新鲜鱼排) ,谢谢先我的datagrid怎么没有items的属性啊? 这样即可;不过你得继承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扩展组件内复制来的。希望你可以解决问题。 谢谢S.F.(吃青春饭的)这么麻烦啊,有什么简单的办法么?那还不如用listview呢。 可以使用一个事件关联参数e(继承自eventargs),该类包括调整列显示的颜色(背景色,前景色),行号,列名称等。给它加一个构造函数,让其初试化这些字段。继承datagridtextboxclomn写一个用户控件,在 这个控件里加一个事件(以sender,e作为参数,其中这个参数e 就是上面的继承自eventargs的类实例),在onpaint事件里响应该事件。触发时要新建立一个参数e,作为传递的参数。在base.onpaint时,使用创建了的e的各个对应的属性作为参数。在程序中委托这个事件,对e的各个参数相应的修改。要区别是哪行对应的datagridcolumn影响的,可以通过e的一个属性(例如字段名)来实现。为了是一行能改变,要在e中建立一个参数“行号”,该属性要在构造函数中初始化。不知道你明白了没有。呵呵。我对c#不熟悉,代码是vb.net的。所以没有贴出来。你自己按照这个思路试验一下吧!希望对你有帮助。 to hamadou(闵峰)vb.net的代码帮忙贴一下啊,我可以自己转,谢谢啊 hamadou(闵峰) 说的更好,我自己写的datagrid扩展组件也扩展了datagridtextboxclomn,但没有这样设计; EventHandler 委托的理解 string to datetime C#多线程问题,感兴趣的朋友来,在线求解。 延时问题 怎样使窗体产生像PowerPoint里幻灯片切换一样的变形? 有关水晶报表的问题? Enterprise Library哪有下载的?我找了好多,但都不能下载! 为什么没有人理我啊555555555全选框功能不能实现的问题,谢谢 DataSet.Fill()的问题 求救!类的划分及类的属性设置问题! Dev Express控件,怎么实现不同风格的窗口? 怎样算时间差?????
{
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;//相应的行
}
}
区别不大,改一下就好了。
我的datagrid怎么没有items的属性啊?
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扩展组件内复制来的。希望你可以解决问题。
这么麻烦啊,有什么简单的办法么?那还不如用listview呢。
继承datagridtextboxclomn写一个用户控件,在 这个控件里加一个事件(以sender,e作为参数,其中这个参数e 就是上面的继承自eventargs的类实例),在onpaint事件里响应该事件。触发时要新建立一个参数e,作为传递的参数。在base.onpaint时,使用创建了的e的各个对应的属性作为参数。
在程序中委托这个事件,对e的各个参数相应的修改。要区别是哪行对应的datagridcolumn影响的,可以通过e的一个属性(例如字段名)来实现。为了是一行能改变,要在e中建立一个参数“行号”,该属性要在构造函数中初始化。不知道你明白了没有。呵呵。我对c#不熟悉,代码是vb.net的。所以没有贴出来。你自己按照这个思路试验一下吧!希望对你有帮助。
vb.net的代码帮忙贴一下啊,我可以自己转,谢谢啊