DataGridViewImageColumn,图像闪烁
DataGridViewImageColumn, images flickering
我有一个 DataGridView 绑定到我的 Windows 表单上的 DataTable。我想向其中插入一个未绑定的 DataGridViewImagecolumn 并根据另一列的值设置图像。图片在 DataGidView_CellFormating 事件中设置。代码如下
DataGridView dgvResult = new DataGridView();
dgvResult.DataSource = dtResult;
DataGridViewImageColumn imageColumn = new DataGridViewImageColumn();
imageColumn.Width = 40;
imageColumn.Name = "Image";
imageColumn.HeaderText = "";
dgvResult.Columns.Insert(0, imageColumn);
private void dgvResult_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
if (dgvResult.Columns[e.ColumnIndex].Name == "Image")
{
DataGridViewRow row = dgvResult.Rows[e.RowIndex];
if (Utils.isNumeric(row.Cells["CM_IsExport"].Value.ToString()) && Int32.Parse(row.Cells["CM_IsExport"].Value.ToString()) == 1)
{
row.Cells["Image"].Value = Properties.Resources.export16;
}
else { row.Cells["Image"].Value = Properties.Resources.plain16; }
}
}
一切正常。我的问题是单元格中显示的图像闪烁。有人知道为什么吗?
出现闪烁是因为您正在 CellFormatting
事件处理程序中设置图像。
根据MSDN,每次绘制每个单元格时都会发生CellFormatting
事件,因此在处理此事件时应避免冗长的处理。
您可以根据需要通过处理 DataBindingComplete
或 CellValueChanged
事件来设置图像。
您还可以通过创建自定义 DataGridView
或通过您正在使用的实例的反射为 DataGridView
启用 DoubleBuffering
。
class CustomDataGridView : DataGridView
{
public CustomDataGridView()
{
DoubleBuffered = true;
}
}
我有一个 DataGridView 绑定到我的 Windows 表单上的 DataTable。我想向其中插入一个未绑定的 DataGridViewImagecolumn 并根据另一列的值设置图像。图片在 DataGidView_CellFormating 事件中设置。代码如下
DataGridView dgvResult = new DataGridView();
dgvResult.DataSource = dtResult;
DataGridViewImageColumn imageColumn = new DataGridViewImageColumn();
imageColumn.Width = 40;
imageColumn.Name = "Image";
imageColumn.HeaderText = "";
dgvResult.Columns.Insert(0, imageColumn);
private void dgvResult_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
if (dgvResult.Columns[e.ColumnIndex].Name == "Image")
{
DataGridViewRow row = dgvResult.Rows[e.RowIndex];
if (Utils.isNumeric(row.Cells["CM_IsExport"].Value.ToString()) && Int32.Parse(row.Cells["CM_IsExport"].Value.ToString()) == 1)
{
row.Cells["Image"].Value = Properties.Resources.export16;
}
else { row.Cells["Image"].Value = Properties.Resources.plain16; }
}
}
一切正常。我的问题是单元格中显示的图像闪烁。有人知道为什么吗?
出现闪烁是因为您正在 CellFormatting
事件处理程序中设置图像。
根据MSDN,每次绘制每个单元格时都会发生CellFormatting
事件,因此在处理此事件时应避免冗长的处理。
您可以根据需要通过处理 DataBindingComplete
或 CellValueChanged
事件来设置图像。
您还可以通过创建自定义 DataGridView
或通过您正在使用的实例的反射为 DataGridView
启用 DoubleBuffering
。
class CustomDataGridView : DataGridView
{
public CustomDataGridView()
{
DoubleBuffered = true;
}
}