DataGridView DataSource // 整数转图标
DataGridView DataSource // integer to icon
我有一个运行速度非常慢的基于列表的应用程序,因为我的 DataGridView 中的每一行都是手动构建为 DataGridViewRow。为了解决性能问题,我决定改用 DataSource (DataTable)。
我的问题:
我从数据库中收到的一列中填满了图像 ID。应用程序知道哪个图像属于哪个 id。手动创建网格行时,将 int 转换为位图并将位图用作图像列的值没有问题。现在改用数据表我无法让它工作。为了测试,我写了以下 class:
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" 转化为 "Without image"
- "Mit Bild"翻译成"With image"
Button1_Click() 后的输出
编辑
由于误解,我会尽力澄清我的问题;
所谓基于列表,我实际上并不是指列表对象。我的坏 there.By 基于列表我的意思是一个显示他创建的用户数据库条目的应用程序。我的应用程序的基础很简单:允许用户在数据网格视图中添加行、编辑和删除行。此信息在数据库中保存和编辑。行中的某些信息(确切地说是 2 列)显示为图标,而应用程序只是在数据库中为图标保存了一个 ID。所以应用程序知道哪个ID属于哪个图标。
问题中的示例 dt 只是为了有一些东西可以使用。在应用程序中,它将是从数据库接收到数据表的数据。
终于自己解决了
- 我从我的数据库中得到一个数据table。
- 然后我用数据类型位图向它添加一个列
- 然后我遍历 DataTable 的每一行并将 Image_ID 列转换为图像本身并将图像放入新列
- 然后我删除 Image_ID 列
- 然后我使用新的 DataTable 作为数据源
我在我的主应用程序中创建了该代码,它要复杂得多,所以我无法在此处显示代码。很抱歉,感谢您的帮助。
在使用 table 作为源之前,请务必完成您需要做的所有更改,因为一旦 gridView 必须更改显示的内容,就会花费更多时间。
我有一个运行速度非常慢的基于列表的应用程序,因为我的 DataGridView 中的每一行都是手动构建为 DataGridViewRow。为了解决性能问题,我决定改用 DataSource (DataTable)。
我的问题:
我从数据库中收到的一列中填满了图像 ID。应用程序知道哪个图像属于哪个 id。手动创建网格行时,将 int 转换为位图并将位图用作图像列的值没有问题。现在改用数据表我无法让它工作。为了测试,我写了以下 class:
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" 转化为 "Without image"
- "Mit Bild"翻译成"With image"
Button1_Click() 后的输出
编辑
由于误解,我会尽力澄清我的问题;
所谓基于列表,我实际上并不是指列表对象。我的坏 there.By 基于列表我的意思是一个显示他创建的用户数据库条目的应用程序。我的应用程序的基础很简单:允许用户在数据网格视图中添加行、编辑和删除行。此信息在数据库中保存和编辑。行中的某些信息(确切地说是 2 列)显示为图标,而应用程序只是在数据库中为图标保存了一个 ID。所以应用程序知道哪个ID属于哪个图标。
问题中的示例 dt 只是为了有一些东西可以使用。在应用程序中,它将是从数据库接收到数据表的数据。
终于自己解决了
- 我从我的数据库中得到一个数据table。
- 然后我用数据类型位图向它添加一个列
- 然后我遍历 DataTable 的每一行并将 Image_ID 列转换为图像本身并将图像放入新列
- 然后我删除 Image_ID 列
- 然后我使用新的 DataTable 作为数据源
我在我的主应用程序中创建了该代码,它要复杂得多,所以我无法在此处显示代码。很抱歉,感谢您的帮助。
在使用 table 作为源之前,请务必完成您需要做的所有更改,因为一旦 gridView 必须更改显示的内容,就会花费更多时间。