c# datagridview CellFormatting 内容改变就更改字体颜色

qq_39550045 2019-06-20 02:49:26
想实现以下功能:
单元格的内容发生变化,字体颜色就变黄色;如果没有发生就是白色;
如果赋值,会自动变成黄色;但是如果再给单元格赋同样的值),该单元格还是黄色,而没有变化白色。这是什么原因呢?
部分代码如下:

单元格赋不同的值:
private void Button1_Click(object sender, EventArgs e)
{
cells = cells + 1;
dgv.Rows[1].Cells[0].Value = "1";
dgv.Rows[1].Cells[1].Value = cells.ToString();
dgv.Rows[1].Cells[2].Value = cells.ToString();
dgv.Rows[1].Cells[2].Value = cells.ToString();
}
单元格赋同样的值:
private void Button2_Click(object sender, EventArgs e)
{
dgv.Rows[1].Cells[0].Value = "1";
dgv.Rows[1].Cells[1].Value = cells.ToString();
dgv.Rows[1].Cells[2].Value = cells.ToString();
}

CellFormatting 事件:

if (CellValue[e.RowIndex, e.ColumnIndex] != e.Value.ToString() && CellValue[e.RowIndex, e.ColumnIndex] != "0")
{
e.CellStyle.ForeColor = Color.Yellow;
}
else
{
e.CellStyle.ForeColor = Color.White;
}

e.CellStyle.Font = new Font("微软雅黑", 10, FontStyle.Regular);
SolidBrush fontBrush = new SolidBrush(e.CellStyle.ForeColor);

CellValue[e.RowIndex, e.ColumnIndex] = e.Value.ToString();

int fontheight = (int)e.Graphics.MeasureString(e.Value.ToString(), e.CellStyle.Font).Height;
int fontwidth = (int)e.Graphics.MeasureString(e.Value.ToString(), e.CellStyle.Font).Width;

e.Graphics.DrawString((String)e.Value, e.CellStyle.Font, fontBrush, e.CellBounds.X + cellWidth, e.CellBounds.Y + (e.CellBounds.Height - fontheight) / 2);
...全文
561 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_39550045 2019-06-21
  • 打赏
  • 举报
回复
cells = cells + 1;
dgv.Rows[1].Cells[0].Value = "1";
dgv.Rows[1].Cells[1].Value = cells.ToString();
dgv.Rows[1].Cells[2].Value = cells.ToString();
dgv.Rows[1].Cells[2].Value = cells.ToString();
----
dgv.Rows[1].Cells[0].Value = "1";
dgv.Rows[1].Cells[1].Value = cells.ToString();
dgv.Rows[1].Cells[2].Value = cells.ToString();


单独这么测试的,值变化的时候,会变色;值不变的时候,还是黄色,没有变白色。
ManBOyyy 2019-06-21
  • 打赏
  • 举报
回复
引用 4 楼 qq_39550045 的回复:
[quote=引用 2 楼 ManBOyyy 的回复:]
具體你還是調試這兩個參數CellValue[e.RowIndex, e.ColumnIndex] != e.Value.ToString()

--->这个是保留前值,然后跟最新值比较,如果不一样就更改颜色。如果不一样的时候,会变;但是如果是一样的话,又不会变回来。
或者,我 没明白你说的?[/quote]
我知道是這個意思,我的意思是,你應該將這兩個值賦值到窗體,弄兩個Textbox,賦值給兩個textbox查看一下數字就行了啊
qq_39550045 2019-06-21
  • 打赏
  • 举报
回复
引用 2 楼 ManBOyyy 的回复:
具體你還是調試這兩個參數CellValue[e.RowIndex, e.ColumnIndex] != e.Value.ToString()

--->这个是保留前值,然后跟最新值比较,如果不一样就更改颜色。如果不一样的时候,会变;但是如果是一样的话,又不会变回来。
或者,我 没明白你说的?
qq_39550045 2019-06-21
  • 打赏
  • 举报
回复
引用 1 楼 qq_42254981 的回复:
重新拉一个timer一直监控datagridview的行或者列,判断监控小框中的文字,来改变其颜色

--->每秒多次改变,用定时器,恐怕完不成。
再说,我在CellFormatting 事件里,已经做过根据单元格值的变化而改变字体颜色了。
那么多单元格,每秒要更改多次。你的意思是timer事件来触发dategridview 的CellFormatting事件?
ManBOyyy 2019-06-20
  • 打赏
  • 举报
回复
具體你還是調試這兩個參數CellValue[e.RowIndex, e.ColumnIndex] != e.Value.ToString()
qq_42254981 2019-06-20
  • 打赏
  • 举报
回复
重新拉一个timer一直监控datagridview的行或者列,判断监控小框中的文字,来改变其颜色

110,530

社区成员

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

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

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