在DataGridView的同一列中的同一列中以2种颜色显示文本

时间:2019-07-17 06:40:34

标签: c# .net winforms datagridview

我想在Windows应用程序Winform .NET的DataGridView中基于相同的列和相同的单元格以两种颜色显示文本。如下图所示。有可能吗?

enter image description here

2 个答案:

答案 0 :(得分:2)

您可以将自定义列与富文本框一起使用。看一眼 this tutorial

答案 1 :(得分:-1)

this post那里获得解决方案

添加cellpainting事件处理方法可以完美解决此问题。

void datagridview_CellPainting(object sender,DataGridViewCellPaintingEventArgs e)
{
  if(datagridview.Columns[e.ColumnsIndex].Name=="content")
  {
      string content="this is a test message,to illustrate this words fine";
      string []line=content.Split(',');
      StringFormat sf=new StringFormat();
      sf.Alignment=StringAlignment.Center;
      sf.LineAlignment=StringAlignment.Center; 

      e.Paint(e.CellBounds, DataGridViewPaintParts.All&~DataGridViewPaintParts.ContentForeground);

      SizeF []size=new SizeF[line.Length];
      for(int i=0;i<line.Length;++i)
      {
          size[i]=e.Graphics.MeasureString(line[i],e.CellStyle.Font);
      }

      RectangleF rec=new RectangleF(e.CellBounds.Location,new Size(0,0));
      using(SolidBrush bblack=new SolidBrush(Color.Black),bred=new 
                                                    SolidBrush(Color.Red))
      {
           for(int i=0;i<line.Length;++i)
           {
               rec=new RectangleF(new 
                       PointF(rec.Location.X+rec.Width,rec.Location.Y),new 
                              SizeF(size[i].Width,e.CellBounds.Height));
               if(i%2==0)
               {                  
                    e.Graphics.DrawString(line[i], e.CellStyle.Font, bred, rec, sf);
               }
               else
               {
                    e.Graphics.DrawString(line[i].e.CellStyle.Font, bblack, rec, sf);
               }
           }
      }
      e.Handled=true;
  }
}

上面的代码在列内容的单元格中显示“这是一个很好地说明此单词的测试消息”,其中“ this  是红色的测试消息,黑色是“很好地说明这个词”。