DataGridViewImageColumn, мерцание изображений
У меня есть DataGridView, связанный с DataTable в моей форме Windows. Я хочу вставить несвязанный 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; }
}
}
Все работает нормально. Моя проблема в том, что изображения, показанные в ячейках, мерцают. Кто-нибудь знает почему?
1 ответ
Мерцание происходит потому, что вы устанавливаете изображение в CellFormatting
обработчик события.
Согласно MSDN, CellFormatting
Событие происходит каждый раз, когда окрашивается каждая ячейка, поэтому вам следует избегать длительной обработки при обработке этого события.
Вы можете установить изображение, обрабатывая DataBindingComplete
или же CellValueChanged
события в соответствии с вашими потребностями.
Вы также можете включить DoubleBuffering
для DataGridView
создавая кастом DataGridView
или с помощью отражения для примера, который вы используете.
class CustomDataGridView : DataGridView
{
public CustomDataGridView()
{
DoubleBuffered = true;
}
}