如何使用Text类型更新DataGridView列中的图像

问题描述 投票:1回答:1

我有一个由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;
        }
    }
}
c# winforms datagridview
1个回答
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;

字段IdName只是示例,因为我不知道你的SendMsg类有哪些字段。这个想法是你可以根据你的SendMsg类构建一个匿名类,并在修改其他字段时传输一些字段。

或者,您可以在网格中定义列(因此它不再是动态的)。

© www.soinside.com 2019 - 2024. All rights reserved.