winforms 使图像从数据库适应DataGridView单元格

zf9nrax1  于 2022-12-14  发布在  其他
关注(0)|答案(1)|浏览(132)

我正在开发一个桌面应用程序使用VS-2012与VB.net。
下面是我的代码:

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)。
但是,不知道如何使图像合适地显示出来。

ijxebb2r

ijxebb2r1#

由于您的DataGridView系结至DataSource(因此您可能尚未在设计阶段设定Columns属性),因此您必须在执行阶段验证Cell是否装载Bitmap对象。
一种可能的方法是订阅CellPainting事件,如果单元格.ValueType的类型为位图,则重新定义单元格行为,将其.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
(...)

相关问题