我在使用C#、Winforms和.Net 3.5。
我的窗体有一个自定义的DataGridView
(双缓冲以避免在单元格格式化事件期间出现闪烁,如此处所示)。当我执行数据库搜索时,我将结果数据集绑定到datagridview
上。
我处理CellFormatting
事件来根据它们的数据为行涂上不同的颜色。
我的DataGridView代码:
resultsGridView.DataSource = results.DefaultViewManager.DataSet.Tables[0];
resultsGridView.AlternatingRowsDefaultCellStyle.BackColor = Color.AliceBlue;
resultsGridView.BorderStyle = BorderStyle.Fixed3D;
resultsGridView.CellFormatting += new DataGridViewCellFormattingEventHandler(resultsGridView_CellFormatting);
我的 CellFormatting 代码:
void resultsGridView_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
int rowIndex = e.RowIndex;
DataGridViewRow therow = resultsGridView.Rows[rowIndex];
if ((bool)therow.Cells["Sealed"].Value == true)
{
therow.DefaultCellStyle.BackColor = Color.Pink;
}
if (therow.Cells["Database"].Value as string == "PNG")
{
therow.DefaultCellStyle.BackColor = Color.LightGreen;
}
}
除了在处理单元格式时,整个表格的绘制事件好像被关闭了,其他都运行良好。文本框中的光标停止闪烁,窗体的菜单栏看起来像这样:
![Menu bar picture](https://istack.dev59.com/IyJmU.webp)
resultsGridView.CellFormatting
行完全解决了该问题。我是否错误地绘制了单元格,或者还需要处理其他内容?
Systems.Diagnotics.Trace.WriteLine("start")
,它一直在运行,即使单元格已经显示并且没有其他操作正在进行。 - Jared Harleye.CellStyle.BackColor
,而不是theRow.DefaultCellStyle.BackColor
。 - H He.CellStyle.BackColor
可以解决问题。 - Jared Harley