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
看起来像:
我正在使用 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
看起来像: