C# 在DataGridViewImageColumn中使用空值显示空单元格
我的表单有一个DataGridView控件,并且C# 在DataGridViewImageColumn中使用空值显示空单元格,c#,image,winforms,datagridview,datagridviewcolumn,C#,Image,Winforms,Datagridview,Datagridviewcolumn,我的表单有一个DataGridView控件,并且列0的类型为DataGridViewImageColumn 首次显示表单时,将显示一个空DataGridView控件,列0中有一个带有红色X的矩形。 将行添加到控件时,将显示相同的图标 如何摆脱带有红色X的框而不显示任何内容 我试过以下方法全局。错误\u列表\u严重性的值为0 dataGridView_ErrorList.Columns[Globals.ERROR_LIST_SEVERITY].DefaultCellStyle.NullValue
列0
的类型为DataGridViewImageColumn
首次显示表单时,将显示一个空DataGridView控件,
列0
中有一个带有红色X的矩形。将行添加到控件时,将显示相同的图标 如何摆脱带有红色X的框而不显示任何内容 我试过以下方法<代码>全局。错误\u列表\u严重性的值为0
dataGridView_ErrorList.Columns[Globals.ERROR_LIST_SEVERITY].DefaultCellStyle.NullValue = null;
还尝试过暴力,只是为了看看它是否有效:
dataGridView_ErrorList.Rows[0].Cells[0].Value = null;
你知道为什么这样不行吗?是否需要创建一个空白图像并将该值分配给空白图像?
当设置空值应该有效时,这似乎很愚蠢 如MSDN文档中所述,在类的“备注”部分,要用自定义映像替换默认错误映像,需要派生自的自定义类。
这允许覆盖属性(通常为只读)设置自定义图像。 而且,最终,要重写该方法 这是自定义
DataGridViewImageColumn
的实现,与自定义DataGridViewImageCell
相结合,可将其配置为在未指定图像或绑定字段值为空时显示不同的默认图像
如果未指定图像,单元格也将在DataGridView新行中显示空内容
类构造函数有几个重载。您可以指定:
- 列名(默认为
)李>ImageColumn
- 列的标题文本(默认为
)李>ImageColumn
,如果列将绑定到数据源字段(默认为DataPropertyName
)李>string.Empty
- 没有图像时用作占位符的图像(默认为空位图)
DataGridView.Columns.add()
方法,传递一个新的DGVCustomImageColumn
,根据需要初始化。在这里,我只是设置
列.Name
、标题文本
和数据属性名称
:
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; }
}
}
如MSDN文档中所述,在类的备注部分,要用自定义映像替换默认错误映像,需要派生自的自定义类。
这允许覆盖属性(通常为只读)设置自定义图像。 而且,最终,要重写该方法 这是自定义
DataGridViewImageColumn
的实现,与自定义DataGridViewImageCell
相结合,可将其配置为在未指定图像或绑定字段值为空时显示不同的默认图像
如果未指定图像,单元格也将在DataGridView新行中显示空内容
类构造函数有几个重载。您可以指定:
- 列名(默认为
)李>ImageColumn
- 列的标题文本(默认为
)李>ImageColumn
,如果列将绑定到数据源字段(默认为DataPropertyName
)李>string.Empty
- 没有图像时用作占位符的图像(默认为空位图)
DataGridView.Columns.add()
方法,传递一个新的DGVCustomImageColumn
,根据需要初始化。在这里,我只是设置
列.Name
、标题文本
和数据属性名称
:
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; }
}
}
请阅读此处的备注部分:。您需要一个自定义的
DataGridViewImageCell
和一个DataGridViewImageColumn
来将其CellTemplate
设置为自定义单元格。您可以轻松地将其添加到代码中,而无需使用DGV的设计器,并且结果与订阅NewRowAdded
事件一样简单。非常感谢您,Jimi。我错过了微软网站上的那些评论。实际上,这个解决方案比我最初想象的要简单得多,因为我只需要在设计器中将AllowUserToAddress属性设置为False。DGV仅由代码填充,因此仍然需要设置属性。我的代码在添加新行时分配图像,因此图像永远不能为空。感谢您引导我找到解决方案!请阅读此处的备注部分:。您需要一个自定义的DataGridViewImageCell
和一个DataGridViewImageColumn
来将其CellTemplate
设置为自定义单元格。您可以轻松地将其添加到代码中,而无需使用DGV的设计器,并且结果与订阅NewRowAdded
事件一样简单。非常感谢您,Jimi。我错过了微软网站上的那些评论。实际上,这个解决方案比我最初想象的要简单得多,因为我只需要在设计器中将AllowUserToAddress属性设置为False。DGV仅由代码填充,因此仍然需要设置属性。我的代码在添加新行时分配图像,因此图像永远不能为空。感谢您引导我找到解决方案!丹