Vb.net DataGridView数据源//整数到图标

Vb.net DataGridView数据源//整数到图标,vb.net,datagridview,bindingsource,Vb.net,Datagridview,Bindingsource,我有一个运行非常慢的基于列表的应用程序,因为DataGridView中的每一行都是作为DataGridViewRow手动构建的。为了解决性能问题,我决定改用数据源(DataTable) 我的问题是: 我从数据库收到的一列中充满了图像ID。应用程序知道哪个图像属于哪个id。手动创建网格行时,将int转换为位图并将位图用作imagecolumn的值没有问题。现在使用数据表,我无法让它工作。为了进行测试,我编写了以下类: Public Class test Dim img As Bitmap Pub

我有一个运行非常慢的基于列表的应用程序,因为DataGridView中的每一行都是作为DataGridViewRow手动构建的。为了解决性能问题,我决定改用数据源(DataTable)

我的问题是:

我从数据库收到的一列中充满了图像ID。应用程序知道哪个图像属于哪个id。手动创建网格行时,将int转换为位图并将位图用作imagecolumn的值没有问题。现在使用数据表,我无法让它工作。为了进行测试,我编写了以下类:

Public Class test
Dim img As Bitmap

Public Sub New(image As Bitmap)
    InitializeComponent()
    Me.img = image
End Sub

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Dim dt As New DataTable
    dt.Columns.Add("StrCol")
    dt.Columns.Add("ImgCol")
    Dim row As DataRow = dt.NewRow
    row.Item(0) = "Ohne Bild"
    row.Item(1) = 0
    Dim row2 As DataRow = dt.NewRow
    row2.Item(0) = "Mit Bild"
    row2.Item(1) = 1
    dt.Rows.Add(row)
    dt.Rows.Add(row2)
    DataGridView1.DataSource = dt
End Sub

Private Sub DataGridView1_CellFormatting(sender As Object, e As DataGridViewCellFormattingEventArgs) Handles DataGridView1.CellFormatting
    If e.ColumnIndex = 1 Then
        If e.Value = 0 Then
            e.Value = Nothing
        Else
            e.Value = img
        End If
    End If
End Sub
End Class
提示:

  • “Ohne Bild”翻译成“没有图像”
  • 《麻省理工学院图片报》翻译成“有图像”
按钮1_单击()后的输出


编辑

由于误解,我将试图澄清我的问题

我所说的基于列表的,实际上并不是指列表对象。我的缺点是,基于列表的应用程序显示了他创建的用户数据库条目。我的应用程序非常简单:允许用户在datagridview中添加行、编辑和删除行。此信息在数据库中保存和编辑。行(确切地说是两列)中的一些信息显示为图标,而应用程序只是将图标的id保存在数据库中。因此,应用程序知道哪个ID属于哪个图标


问题中的示例dt只是为了处理一些东西。在应用程序中,它将是从数据库接收到数据表的数据。

我最终自己解决了这个问题

  • 我从数据库中得到一个数据表
  • 然后我用数据类型位图向其中添加一列
  • 然后我循环遍历DataTable的每一行,将Image_ID列转换为Image本身,并将该Image放入新的列中
  • 然后删除Image\u ID列
  • 然后我使用新的数据表作为数据源
  • 我在我的主应用程序中创建的代码要复杂得多,所以我不能在这里显示代码。很抱歉,谢谢你的帮助


    在将表用作源之前,必须进行所需的所有更改,这一点很重要,因为一旦gridView必须更改所显示的内容,就会花费更多的时间

    图像ID本身不会转换为图像。实际图像存储在哪里?@puropoix我没有为了好玩而尝试覆盖CellFormatting事件:-)正如您所见,图像/图标存储在构造函数中定义的实例成员中。