vb.net Postgresql 数据库,使用 DataTable 并在 Datagridview 中显示位图

vb.net Postgresql Database, using DataTable and display bitmap in Datagridview

我正在使用 Postgresql,我想存储一个状态值。这些值应该是整数类型(例如 0 = OK,1 = Not OK)。 但我不想在我的数据网格视图中将这些值显示为整数,我想显示一些小图标或位图。

但是我怎么能做到这一点呢? 如果我使用位图类型的 DataColumn,我不能在我的数据库中使用 Integer 类型。

这就是我用 SQL 数据填充 DataTable 的方式。 dtRecord 已分配给我的 DataGridview。

sda = New NpgsqlDataAdapter(pgCommand)
        sda.Fill(dtRecord)

这是一个测试 - 但我无法从 SQL 数据库

中插入整数值
Dim column1 As DataColumn = New DataColumn("Status")
    column1.DataType = GetType(Bitmap)

有人可以给我任何提示吗?

谢谢!

这是一个完整的示例,说明如何根据网格中的值从磁盘加载图像并显示该图像。除了下面的代码之外,您还需要将 DataGridView 从 Designer

拖放到表单上
Public Class Form1
Public Sub New()

    ' This call is required by the designer.
    InitializeComponent()

    ' Add any initialization after the InitializeComponent() call.
    InitialiseGridView()

    InitialiseDataTable()

    DataGridView1.DataSource = RecordsDataTable
End Sub

Dim RecordsDataTable As DataTable

Private Sub InitialiseGridView()
    DataGridView1.AutoGenerateColumns = False
    AddHandler DataGridView1.CellFormatting, AddressOf DataGridView1_CellFormatting

    DataGridView1.Columns.Clear()
    Dim dgvImageColumn As New DataGridViewImageColumn()
    dgvImageColumn.Name = "dgvImageColumn"
    dgvImageColumn.DataPropertyName = "dgvImageColumn"
    dgvImageColumn.HeaderText = "Status"
    DataGridView1.Columns.Add(dgvImageColumn)

    Dim dgvTextColumn As New DataGridViewTextBoxColumn
    dgvTextColumn.Name = "dgvTextColumn"
    dgvTextColumn.DataPropertyName = "dgvTextColumn"
    dgvTextColumn.HeaderText = "Other Text"
    DataGridView1.Columns.Add(dgvTextColumn)
End Sub

Private Sub InitialiseDataTable()
    RecordsDataTable = New DataTable()

    RecordsDataTable.Columns.Add("dgvImageColumn", GetType(Integer))
    RecordsDataTable.Columns.Add("dgvTextColumn", GetType(String))

    RecordsDataTable.Rows.Add({1, "one"})
    RecordsDataTable.Rows.Add({0, "two"})
    RecordsDataTable.Rows.Add({1, "three"})
End Sub

Private Sub DataGridView1_CellFormatting(sender As Object, e As DataGridViewCellFormattingEventArgs)
    Dim thisDGV As DataGridView = DirectCast(sender, DataGridView)
    If (thisDGV.Columns(e.ColumnIndex).Name = "dgvImageColumn") Then
        Dim newImage As Image
        If (e.Value.ToString() = "0") Then
            newImage = Bitmap.FromFile("D:\Projects\Graphics\GreenDot.png")
        Else
            newImage = Bitmap.FromFile("D:\Projects\Graphics\RedDot.png")
        End If
        e.Value = newImage
        e.FormattingApplied = True
    End If
End Sub
End Class

这会给你一个 DataGridView 看起来像: