Как описано в MSDN Docs, в разделе «Примечания» класса DataGridViewImageColumn , чтобы заменить изображение ошибки по умолчанию на пользовательское изображение, требуется пользовательский класс, производный от DataGridViewImageCell .
Это позволяет переопределить свойство DefaultNewRowValue , обычно доступное только для чтения, при настройке пользовательского изображения.
Также, в конце концов, нужно переопределить метод PaintErrorIcon .
Это реализация пользовательского DataGridViewImageColumn
в сочетании с пользовательским DataGridViewImageCell
, который можно настроить для отображения другого изображения по умолчанию, когда изображение не указано или значение связанного поля равно нулю.
Если изображение не указано, в ячейке будет отображаться пустой контент, также в DataGridView Новая строка .
Конструктор класса имеет несколько перегрузок. Вы можете указать:
- Имя столбца (по умолчанию
ImageColumn
).
- Текст заголовка столбца (по умолчанию
ImageColumn
).
-
DataPropertyName
, если столбец будет привязан к полю источника данных (по умолчанию string.Empty
).
- Изображение, используемое в качестве заполнителя, когда изображение отсутствует (по умолчанию используется пустое растровое изображение)
Чтобы добавить пользовательский столбец Image в DataGridView, используйте метод DataGridView.Columns.Add()
, передав новый DGVCustomImageColumn
, инициализированный при необходимости.
Здесь я просто устанавливаю Column.Name
, HeaderText
и DataPropertyName
:
dataGridView1.Columns.Add(new DGVCustomImageColumn("ImageCol", "Image", "ImageField"));
Класс DGVCustomImageColumn
:
using System.Drawing;
using System.Windows.Forms;
class DGVCustomImageColumn : DataGridViewImageColumn
{
private Bitmap dgvErrorBitmap = new Bitmap(1, 1);
public DGVCustomImageColumn()
: this("ImageColumn", "ImageColumn", string.Empty, null) { }
public DGVCustomImageColumn(string colName, string headerText)
: this(colName, headerText, string.Empty, null) { }
public DGVCustomImageColumn(string colName, string headerText, string dataField)
: this(colName, headerText, dataField, null) { }
public DGVCustomImageColumn(string colName, string headerText, string dataField, Bitmap errorImage)
{
this.CellTemplate = new CustImageCell(errorImage ?? dgvErrorBitmap);
this.DataPropertyName = dataField;
this.HeaderText = headerText;
this.Image = errorImage ?? dgvErrorBitmap;
this.Name = colName;
}
protected class CustImageCell : DataGridViewImageCell
{
public CustImageCell() : this(null) { }
public CustImageCell(Bitmap defaultImage) => this.DefaultNewRowValue = defaultImage;
public override object DefaultNewRowValue { get; }
}
}