在c#,winform下,有一个datagrid,根据其中一列,比如大于20的时候,要这行都显示成红色,怎么弄啊~~~~~~~~~

解决方案 »

  1.   

    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;//相应的行
    }
       }
      

  2.   

    错了,忘了是winform。我的是在webform里。
    区别不大,改一下就好了。
      

  3.   

    to  dutguoyi(新鲜鱼排) ,谢谢先
    我的datagrid怎么没有items的属性啊?
      

  4.   

    这样即可;不过你得继承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扩展组件内复制来的。希望你可以解决问题。
      

  5.   

    谢谢S.F.(吃青春饭的)
    这么麻烦啊,有什么简单的办法么?那还不如用listview呢。
      

  6.   

    可以使用一个事件关联参数e(继承自eventargs),该类包括调整列显示的颜色(背景色,前景色),行号,列名称等。给它加一个构造函数,让其初试化这些字段。
    继承datagridtextboxclomn写一个用户控件,在 这个控件里加一个事件(以sender,e作为参数,其中这个参数e 就是上面的继承自eventargs的类实例),在onpaint事件里响应该事件。触发时要新建立一个参数e,作为传递的参数。在base.onpaint时,使用创建了的e的各个对应的属性作为参数。
    在程序中委托这个事件,对e的各个参数相应的修改。要区别是哪行对应的datagridcolumn影响的,可以通过e的一个属性(例如字段名)来实现。为了是一行能改变,要在e中建立一个参数“行号”,该属性要在构造函数中初始化。不知道你明白了没有。呵呵。我对c#不熟悉,代码是vb.net的。所以没有贴出来。你自己按照这个思路试验一下吧!希望对你有帮助。
      

  7.   

    to hamadou(闵峰)
    vb.net的代码帮忙贴一下啊,我可以自己转,谢谢啊
      

  8.   

    hamadou(闵峰) 说的更好,我自己写的datagrid扩展组件也扩展了datagridtextboxclomn,但没有这样设计;