我有一个由DataGridView
填充的List
。我会发送一封电子邮件,如果没问题,我将status = "S"
如下:
var query = (from send in SendMsg
where send.MessageSentId == str
select send)
.Update(st => { st.EmailST = EmailSt; st.SMSST = "N"; });
gvSent.DataSource = null;
gvSent.DataSource = SendMsg;
一切正常,只是现在我需要放两个包含Ok或Not Ok状态的图像。使用下面的代码,而不是我的网格显示图像,它显示System.Drawing.Bitmap
文本。我怀疑这是因为列的类型为Text
而不是Image
。但是这个DataGridView
是动态的,我无法定义列的类型。
private void gvSent_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
if (gvSent.Columns[e.ColumnIndex].Name == "EmailST")
{
if (gvSent.Rows[e.RowIndex].Cells[6].Value == "S")
{
e.Value = (System.Drawing.Image)Properties.Resources.IMAGE8;
}
else
{
e.Value = (System.Drawing.Image)Properties.Resources.IMAGE9;
}
}
}
答案 0 :(得分:1)
如果您说此DataGridView
是动态的,则表示其列是从数据绑定构造的。因此,在绑定DataGridView
之前,请更改该列的数据绑定中的类型,并将其数据替换为图像。在这种情况下,您可以使用另一个类或仅使用匿名类:
var sent = SendMsg.Select(s => new {
Id = s.Id,
Name = s.Name,
EmailST = (s.EmailST == "S"? (System.Drawing.Image)Properties.Resources.IMAGE8
: (System.Drawing.Image)Properties.Resources.IMAGE9)
}).ToList();
gvSent.DataSource = null;
gvSent.DataSource = sent;
字段Id
和Name
只是示例,因为我不知道您的SendMsg
类有哪些字段。我们的想法是,您可以基于SendMsg
类构建匿名类,并在修改其他字段时传输一些字段。
或者,您可以在网格中定义列(因此它不再是动态的)。