使数据库中的图像适合 DataGridView 单元格

Fit image from database to a DataGridView Cell

我正在使用带有 VB.net 的 VS-2012 开发桌面应用程序。
这是我的代码:

Dim constring As String = "connection_string"
Using con As New SqlConnection(constring)
    Using cmd As New SqlCommand("SELECT * FROM tbl_product", con)
        cmd.CommandType = CommandType.Text
        Using sda As New SqlDataAdapter(cmd)
            Using ds As New DataSet()
                sda.Fill(ds)
                DataGridView1.DataSource = ds.Tables(0)
            End Using
        End Using
    End Using
End Using

图像显示当前输出:

如何显示适合单元格高度和宽度的图像?
我在设计模式中更改了行高 (DataGridView -> RowTemplate -> Height)。
但是,不知道如何适配图片才能正常显示。

由于您的 DataGridView 绑定到 DataSource(因此您可能没有在 Design-Time 设置 Columns 属性),您必须在 Run-Time 验证 Cell 是否承载 Bitmap 对象。

一种可能的方法是订阅 CellPainting 事件,如果 Cell .ValueType 是位图类型,re-define Cell 行为,设置其 .ImageLayout 属性 到 Zoom.

Private Sub DataGridView1_CellPainting(sender As Object, e As DataGridViewCellPaintingEventArgs) Handles DataGridView1.CellPainting
    If (e.RowIndex < 0 Or e.ColumnIndex < 0) Then Return

    If DataGridView1.Rows(e.RowIndex).Cells(e.ColumnIndex).ValueType = GetType(Bitmap) Then
        CType(DataGridView1.Rows(e.RowIndex).Cells(e.ColumnIndex), 
              DataGridViewImageCell).ImageLayout = DataGridViewImageCellLayout.Zoom
    End If
End Sub

更新:
图像作为字节数组存储在 SQL 数据库中。
因此,要识别图像托管单元,必须更改代码:

(...)
If DataGridView1.Rows(e.RowIndex).Cells(e.ColumnIndex).ValueType = GetType(Byte()) Then
(...)