在DataGridViewImageColumn中显示具有空值的空单元格

时间:2019-05-03 18:09:49

标签: c# image winforms datagridview datagridviewcolumn

我的表单具有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;

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

2 个答案:

答案 0 :(得分:0)

如MSDN文档中的DataGridViewImageColumn类的“备注”部分所述,要用自定义图像替换默认错误图像,需要自DataGridViewImageCell派生的自定义类。
这样可以覆盖DefaultNewRowValue属性(通常为只读)来设置自定义图像。 同样,最终,将覆盖PaintErrorIcon方法。

这是自定义 DataGridViewImageColumn 的实现,结合了自定义 DataGridViewImageCell ,可以将其配置为在以下情况下显示其他默认图片:没有指定图像,或者绑定字段的值为空。

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

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

  • 列名(默认为ImageColumn)。
  • 列的标题文本(默认为ImageColumn)。
  • 如果列将绑定到数据源字段,则DataPropertyName(默认为string.Empty)。
  • 没有图像时用作占位符的图像(默认为空位图)

要将自定义图像列添加到DataGridView,请使用 DataGridView.Columns.Add() 方法,并传递一个新的 DGVCustomImageColumn ,并根据需要进行初始化。 br /> 在这里,我只是设置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; }
    }
}

答案 1 :(得分:0)

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

import React from 'react'
import '../App.css'

const ListComponent = ({ name, description, language, html_url }) => {
    return (
        <div className='card'>
            <div className='card-body'>
                <h2><a href={html_url} target='_blank' rel="noreferrer">{name}</a></h2>
            </div>
            <div className='card-body'>
                <p>{description}</p>
            </div>
            <div className='card-body'>
                <p>Languages: {language}</p>
            </div>
        </div>
    );
}

export default ListComponent;