我的数据库填充了Datagridview
数据。
我的数据库表上有3列:id, name, 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也会生成字符串类型的列。如何将现有字符串/文本类型列更改为图像列?什么是解决这个问题的最佳方法?
答案 0 :(得分:1)
您需要使用DataGridViewImageColumn在DataGridViewCell中显示图像。
我不确定您是否可以为现有列设置列类型(我认为不可能)。无论如何,您可以通过将DataGridView.AutoGenerateColumns
设置为false来手动创建列。
dataGridView1.AutoGenerateColumns = false;
dataGridView1.Columns.Add(new DataGridViewImageColumn
{
DataPropertyName = "YourImageColumnName",
Name = "status"
});
dataGridView1.DataSource = yourDataSource;
答案 1 :(得分:1)
如果您将数据库查询转换为此类对象的集合
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;