vb.net База данных Postgresql, использующая DataTable и отображающая растровое изображение в Datagridview - PullRequest
0 голосов
/ 01 июня 2019

Я использую Postgresql, и я хотел бы сохранить значение статуса. Эти значения должны иметь тип integer (0 = ОК, 1 = Не ОК, например). Но я не хочу отображать эти значения как целые числа в моем представлении данных, я хотел бы отображать некоторые маленькие значки или растровые изображения.

Но как мне это сделать? Если я использую DataColumn с растровым типом, я не могу использовать тип Integer в моей базе данных.

Вот так я заполняю свой DataTable данными SQL. dtRecord назначен моему DataGridview.

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

Это был тест, но я не могу вставить целочисленные значения из базы данных SQL

Dim column1 As DataColumn = New DataColumn("Status")
    column1.DataType = GetType(Bitmap)

Может кто-нибудь дать мне какие-нибудь подсказки?

Спасибо!

1 Ответ

1 голос
/ 01 июня 2019

Это полностью рабочий пример того, как загрузить изображение с диска на основе значения в сетке и отобразить это изображение.В дополнение к приведенному ниже коду, вам нужно будет добавить 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, который выглядит следующим образом:

enter image description here

...