如何使用类型更新数据网格视图列中的图像 文本类型



我有一个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;

一切正常,只是现在我需要放置 2 张包含"正常"或"不好"状态的图像。使用下面的代码,它显示的不是我的网格显示图像,而是显示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;
        }
    }
}

当您说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类构建一个匿名类,并在修改其他一些字段的同时传输一些字段。

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

最新更新