我有一个datagridview,我使用dgv.DataSource = table从数据源填充它。然后,我使用一个单元格格式化事件来根据值更改datagridview中特定单元格的颜色。我面临的问题是,当查看某些pc上的数据时,一些随机单元格将显示为白色,没有数据。我用来设置颜色的代码如下,然而,不仅仅是我设置了自定义颜色的单元格显示为白色:
private void dgvRaw_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
if (e != null)
{
DataGridView dgv = (DataGridView)sender;
if (dFlags.ContainsKey(dgv.Columns[e.ColumnIndex].Name))
{
e.CellStyle.ForeColor = Color.Black;
// If pass set green else set red
if (e.Value != null)
{
if (e.Value.ToString() == "0")
e.CellStyle.BackColor = System.Drawing.Color.Green;
else
e.CellStyle.BackColor = System.Drawing.Color.Red;
}
else
e.CellStyle.BackColor = System.Drawing.Color.Orange;
}
}
}
我真的不知道为什么会发生这种情况,或者是因为计算机不能处理大型网格视图。谢谢!
发布于 2013-05-23 07:03:36
事实证明,datagridview的问题是默认情况下没有启用双缓冲。我使用一个自定义的datagridview类来启用双缓冲,从那时起我就没有遇到过任何问题,我怀疑这是因为有一个非常大的数据集,它在渲染整个区域时遇到了问题,而在低端pcs上,它只是放弃了。我已经包含了下面的类
/// <summary>
/// Custom datagridview to enable double buffering
/// </summary>
public class MyDataGridView : DataGridView
{
public MyDataGridView()
{
DoubleBuffered = true;
}
}
我不能接受这段代码的功劳,因为我在Stack Overflow上的另一个源码上找到了它,但是它是一个不同的问题。
https://stackoverflow.com/questions/16675155
复制相似问题