Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 显示System.Drawing.Bitmap的Datagridview列?_C#_Winforms_Datagridview - Fatal编程技术网

C# 显示System.Drawing.Bitmap的Datagridview列?

C# 显示System.Drawing.Bitmap的Datagridview列?,c#,winforms,datagridview,C#,Winforms,Datagridview,我有一个Datagridview,由数据库中的数据填充 我的数据库表中有3列:id、name、status。但是这些都是文本/字符串格式 根据我从数据库的status列(在线或离线)获取的数据,我尝试在单元格上放置一个图像,而不仅仅是一个普通的在线或离线字符串 我将我的DGV附加到DataBindingComplete事件。目前有以下代码: void DataGridView1DataBindingComplete(object sender, DataGridViewBindingComple

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

我的数据库表中有3列:
id、name、status。
但是这些都是文本/字符串格式

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

我将我的
DGV
附加到
DataBindingComplete
事件。目前有以下代码:

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
,而不是实际显示图片。因为在我的数据库中,status列的数据类型是string,所以DGV也将该列设置为string类型。如何将现有的字符串/文本类型列更改为图像列?解决此问题的最佳方法是什么?

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

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

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

dataGridView1.DataSource = yourDataSource;

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

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;
List source=dbConnection.GetObjects();
dataGridView.DataSource=source;

我使用数据集将数据库中的数据填充到Datagridview中。结果,我得到了文本/字符串列类型。如何将现有列类型更改为DataGridViewImageColumn?更新了我的答案,看看是否有帮助。@请留下评论,以便我知道哪里错了。
ColumnName
对于DataGridViewImageColumn无效。它是
dataGridView.DataSource
。此外,它似乎根本不起作用。如何从数据库绑定数据?通过使用sql命令,我从数据库获取数据并将其存储在数据集中。然后我将datagridview.Source设置为dataset.Tables[0],您可以将该代码添加到问题中吗?另外,我不认为
databindingplete
事件是修改单元格内容的合适位置。最好在绑定之前完成从
字符串
位图
的转换。谢谢您的回答。这使我想到了如何解决这个问题。现在开始工作了。