【问题标题】:Show an empty cell in DataGridViewImageColumn with null values在 DataGridViewImageColumn 中显示具有空值的空单元格
【发布时间】:2019-09-22 07:33:06
【问题描述】:

我的表单有一个 DataGridView 控件,Column 0 的类型为 DataGridViewImageColumn
首次显示 Form 时,会显示一个空的 DataGridView 控件,Column 0 有一个带有红色 X 的矩形。
当我向控件添加一行时,会显示相同的图标。

如何摆脱带有红色 X 的框并且不显示任何内容?

我尝试了以下方法。 Globals.ERROR_LIST_SEVERITY 的值为 0。

dataGridView_ErrorList.Columns[Globals.ERROR_LIST_SEVERITY].DefaultCellStyle.NullValue = null;

还尝试了蛮力只是为了看看它是否会起作用:

dataGridView_ErrorList.Rows[0].Cells[0].Value = null;

知道为什么这不起作用吗?我需要创建一个空白图像并将值分配给空白图像吗?
当设置空值应该起作用时,这似乎很愚蠢。

【问题讨论】:

  • 在此处阅读备注部分:DataGridViewImageColumn Class。您需要自定义 DataGridViewImageCellDataGridViewImageColumn 将其 CellTemplate 设置为自定义单元格。您可以轻松地将其添加到代码中,而不是使用 DGV 的设计器,结果不会像订阅 NewRowAdded 事件那样麻烦。
  • 非常感谢,吉米。我错过了微软网站上的那些评论。实际上,解决方案比我最初想象的要容易得多,因为我只需要在设计器中将 AllowUserToAddRows 属性设置为 False。 DGV 仅由代码填充,因此无论如何都需要设置属性。我的代码在添加新行时分配图像,因此图像永远不能为空。感谢您引导我找到解决方案!丹

标签: c# image winforms datagridview datagridviewcolumn


【解决方案1】:

我遇到过这个问题,但是我用下面的语句克服了它

dataGridView1.Columns[0].DefaultCellStyle.NullValue = null;
dataGridView1.Rows[0].Cells[0].Value = null;

【讨论】:

    【解决方案2】:

    如 MSDN 文档中所述,在 DataGridViewImageColumn 类的备注部分中,要将默认错误图像替换为自定义图像,需要从 DataGridViewImageCell 派生的自定义类。
    这允许覆盖DefaultNewRowValue 属性,通常是只读的,设置自定义图像。 此外,最终,要覆盖 PaintErrorIcon 方法。

    这是自定义DataGridViewImageColumn的实现,加上自定义DataGridViewImageCell,可以配置为在没有指定Image时显示不同的默认Image或绑定的字段值为空。

    如果未指定图像,则单元格将显示空内容,也在 DataGridView New Row 中。

    类构造函数有几个重载。您可以指定:

    • 列名(默认为ImageColumn)。
    • 列的标题文本(默认为ImageColumn)。
    • DataPropertyName,如果 Column 将绑定到 DataSource 字段(默认为 string.Empty)。
    • 不存在图像时用作占位符的图像(默认为空位图)

    要将自定义图像列添加到 DataGridView,请使用 DataGridView.Columns.Add() 方法,传递一个新的 DGVCustomImageColumn,根据需要进行初始化。
    在这里,我只是设置了Column.NameHeaderTextDataPropertyName

    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; }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-13
      • 1970-01-01
      • 1970-01-01
      • 2013-01-14
      • 1970-01-01
      相关资源
      最近更新 更多