datagridview图像显示vb.net MS Access

时间:2017-07-22 03:51:06

标签: vb.net ms-access datagridview

我的代码是读取每一行中的图像文件路径并将其显示在datagridview" Image"列。

.....

我的代码有什么问题?请帮我解决这个问题。

更新

这是更新后的代码但没有显示任何内容。

Dim dbdataset As New DataTable
        Try
            con.Open()
            query = "Select * FROM [svfmemberlist]"
            cmd = New OleDbCommand(query, con)
            da.SelectCommand = cmd
            da.Fill(dbdataset)
            dgvSearch.RowTemplate.Height = 150
            source.DataSource = dbdataset
            dgvSearch.DataSource = source

            Dim img As New DataGridViewImageColumn()
            dgvSearch.Columns.Add(img)
            img.HeaderText = "Image"
            img.Name = "img"
            img.ImageLayout = DataGridViewImageCellLayout.Zoom
            dgvSearch.Columns("img").DataGridView.AutoGenerateColumns = False
            dgvSearch.Columns("Name").AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill
            dgvSearch.Columns("img").Width = 150
            For Each row As DataGridViewRow In dgvSearch.Rows
                If Not row.Cells("imgPath").FormattedValue.ToString = Nothing Then
                    Dim str As String = row.Cells("imgPath").FormattedValue.ToString
                    Dim inImg As Image = Image.FromFile(str)
                    row.Cells("img").Value = inImg
                Else
                    img.Image = Nothing
                End If
            Next
            con.Close()
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try

enter image description here

1 个答案:

答案 0 :(得分:1)

以下示例与您加载数据和图片的方式不符,但只需稍加努力即可在当前代码中使用。

我通过IDE在DataGridView中创建了两列,一个Text和一个Image DataGridViewColumn。

表单加载的第一行设置ImageLayout,第二行代码将对齐设置为左上角的外观。接下来,我为所有列设置自动调整大小模式,然后设置每行的行高。

下一步(这些行是从app文件夹下一级文件夹加载图像)。

设置图像的路径。 使用FileImageBytes函数添加图像(我将其置于单独的类或代码模块中,但在表单中工作正常)。

是的,所有东西都是硬接线的,所以很容易看出一切是如何运作的。

Public Class Form1
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        CType(DataGridView1.Columns("PictureColumn"), DataGridViewImageColumn).ImageLayout = DataGridViewImageCellLayout.Normal
        DataGridView1.Columns.Cast(Of DataGridViewColumn).Select(Function(col) col).ToList _
            .ForEach(Sub(col) col.CellTemplate.Style.Alignment = DataGridViewContentAlignment.TopLeft)
        DataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells
        DataGridView1.RowTemplate.Height = 222
        Dim imagePath As String = IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Images")
        DataGridView1.Rows.Add(New Object() {"Car1", FileImageBytes(IO.Path.Combine(imagePath, "Car1.bmp"))})
        DataGridView1.Rows.Add(New Object() {"Car2", FileImageBytes(IO.Path.Combine(imagePath, "Car2.jpg"))})
    End Sub
    Public Function FileImageBytes(ByVal FileName As String) As Byte()
        Dim fileStream As IO.FileStream = New IO.FileStream(FileName, IO.FileMode.Open, IO.FileAccess.Read, IO.FileShare.Read)
        Dim byteArray(CInt(fileStream.Length - 1)) As Byte
        fileStream.Read(byteArray, 0, CInt(fileStream.Length))
        Return byteArray
    End Function
End Class