【问题标题】:vb.net Postgresql Database, using DataTable and display bitmap in Datagridviewvb.net Postgresql 数据库,使用 DataTable 并在 Datagridview 中显示位图
【发布时间】:2019-06-01 12:00:09
【问题描述】:

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

但是我怎么能做到这一点呢? 如果我使用 Bitmap 类型的 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)

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

谢谢!

【问题讨论】:

  • 我认为你有两个选择。 1. 处理 CellFormatting 事件并针对该列,根据该值绘制位图。或者 2. 使用 DataGridViewComboBoxColumn。使用组合框绘制图像
  • 您好,我尝试了选项 1,但我遇到了问题,我无法在之后将 columntype 更改为 imagecolumn,是否有这样的选项? DataGridView1.Columns(e.ColumnIndex).ValueType = GetType(Bitmap) 对我没有任何改变。
  • 对于下面的缓慢回答,我深表歉意。我现在有时间制作一个完整的工作示例,说明如何实现您正在寻找的东西。请看看它是否符合您的需求。

标签: vb.net postgresql datagridview datatable bitmap


【解决方案1】:

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

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,看起来像:

【讨论】:

    猜你喜欢
    • 2023-03-28
    • 2023-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多