Несмотря на то, что ответ работает, он довольно существенный. Он предлагает загружать изображения непосредственно из Resources
:
dgv2.Rows[e.RowIndex].Cells[8].Value = Properties.Resources.OnTime;
Проблема в том, что при этом каждый раз создается новый объект изображения , как видно из файла конструктора ресурсов:
internal static System.Drawing.Bitmap bullet_orange {
get {
object obj = ResourceManager.GetObject("bullet_orange", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
Если имеется 300 (или 3000) строк с таким же состоянием, то для каждой не требуется свой собственный объект изображения и не требуется новый объект при каждом запуске события. Во-вторых, ранее созданные изображения не удаляются.
Чтобы избежать всего этого, просто загрузите изображения ресурсов в массив и используйте / назначайте оттуда:
private Image[] StatusImgs;
...
StatusImgs = new Image[] { Resources.yes16w, Resources.no16w };
Затем в событии CellFormatting
:
if (dgv2.Rows[e.RowIndex].IsNewRow) return;
if (e.ColumnIndex != 8) return;
if ((bool)dgv2.Rows[e.RowIndex].Cells["Active"].Value)
dgv2.Rows[e.RowIndex].Cells["Status"].Value = StatusImgs[0];
else
dgv2.Rows[e.RowIndex].Cells["Status"].Value = StatusImgs[1];
Те же 2 объекта изображения используются для всех строк.