Datagridview column showing System.Drawing.Bitmap?

本文关键字:Bitmap Drawing System column showing Datagridview | 更新日期: 2023-09-27 18:17:15

我有一个Datagridview由我的数据库中的数据填充。

我有3列在我的数据库表:id, name, status.然而,这些都是在文本/字符串格式。

根据我从数据库的状态列(在线或离线)获得的数据,我尝试在单元格上放置图像,而不仅仅是一个普通的在线或离线字符串。

我把我的DGVDataBindingComplete事件联系起来。当前有如下代码:

void DataGridView1DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
    {
        foreach (DataGridViewRow r in dataGridView1.Rows)
        {   
            if (r.Cells["status"].Value.ToString() == "Online")
            {
                // add online image here
                r.Cells["status"].Value = Resource1.MyOnlineIcon;
            }
            else if(r.Cells["status"].Value.ToString() == "Offline")
            {
                // add offline image here
                r.Cells["status"].Value = Resource1.MyOfflineIcon;
            }
        }

但问题是,它在单元格上显示System.Drawing.Bitmap,而不是实际显示图片。由于在我的数据库中,状态列的数据类型是字符串,因此DGV也使列成为字符串类型。如何将现有的字符串/文本类型列更改为图像列?解决这个问题的最好办法是什么?

Datagridview column showing System.Drawing.Bitmap?

如果您将数据库查询转换为如下所示的对象集合

public class SomeObject {
    public int ID {get;set;}
    public string Name {get;set;}
    public Bitmap Image {get;set;
    public SomeObject(int id, string name, string status) {
        ID = id;
        Name = name;
        Image = status == "Online" ? Resource1.MyOnlineIcon : Resource1.MyOfflineIcon;
    }
}

将它绑定到DataGridView:

应该可以正常工作。
List<SomeObject> source = dbConnection.GetObjects();
dataGridView.DataSource = source;

您需要使用DataGridViewImageColumn在DataGridViewCell中显示图像。

我不确定是否可以为现有列设置列类型(我认为不可能)。无论如何,您可以通过将DataGridView.AutoGenerateColumns设置为false来手动创建列。

dataGridView1.AutoGenerateColumns = false;
dataGridView1.Columns.Add(new DataGridViewImageColumn
                            {
                               DataPropertyName = "YourImageColumnName",
                               Name = "status"
                            });
dataGridView1.DataSource = yourDataSource;