Hallo zusammen!
Ich habe mir für eine Datenbank eine Custom DataGridView Column gebaut, die mir auf Grundlage
eines Standartpfads in Kombination eines Wertes eines Datenbankfeldes, Bilder in einem DataGridView
anzeigt. Grundsätzlich funktioniert das gut und bei manchen (!) DataGridViews geht mein Ansatz auch
ohne Probleme, aber bei machen(?!) DGV flackern die Bilder und der Scrollbalken verschwindet.
Hier mein Code:
Die Custom-Column:
Die Custom-Cell:
Habe ich irgendwo einen sehr groben Schnitzer oder will mich VB einfach nur
manchmal ärgern?
Vielen Dank schon mal für eure Hilfe!
Ich habe mir für eine Datenbank eine Custom DataGridView Column gebaut, die mir auf Grundlage
eines Standartpfads in Kombination eines Wertes eines Datenbankfeldes, Bilder in einem DataGridView
anzeigt. Grundsätzlich funktioniert das gut und bei manchen (!) DataGridViews geht mein Ansatz auch
ohne Probleme, aber bei machen(?!) DGV flackern die Bilder und der Scrollbalken verschwindet.
Hier mein Code:
Die Custom-Column:
VB.NET-Quellcode
- Imports System.Windows.Forms
- Public Class SLDGVDBImageColumn
- Inherits DataGridViewImageColumn
- Public Property pathTemplate As String
- Public Property placeHolder As String = "@"
- Public Property isAbsolute As Boolean = False
- Public Sub New()
- Dim c As SLDGVDBImageCell = New SLDGVDBImageCell()
- Me.CellTemplate = c
- Me.ReadOnly = True
- End Sub
- Public Overrides Function Clone() As Object
- Dim newObj As SLDGVDBImageColumn = MyBase.Clone()
- With newObj
- .pathTemplate = Me.pathTemplate
- .placeHolder = Me.placeHolder
- .isAbsolute = Me.isAbsolute
- End With
- Return newObj
- End Function
- End Class
Die Custom-Cell:
VB.NET-Quellcode
- Imports System.Windows.Forms
- Imports System.Drawing
- Imports System.IO
- Public Class SLDGVDBImageCell
- Inherits DataGridViewImageCell
- Public Sub New()
- End Sub
- Protected Overrides Function GetValue(ByVal rowIndex As Integer) As Object
- Dim myColumn As SLDGVDBImageColumn = CType(Me.DataGridView.Columns(Me.ColumnIndex), SLDGVDBImageColumn)
- Dim value As Image = Nothing
- If Not MyBase.GetValue(rowIndex) Is DBNull.Value Then
- If Not MyBase.GetValue(rowIndex).ToString = "" Then
- Dim pathString As String = Replace(myColumn.pathTemplate, myColumn.placeHolder, MyBase.GetValue(rowIndex).ToString)
- If Not myColumn.isAbsolute Then
- pathString = Application.StartupPath & "" & pathString
- End If
- If Not myColumn.pathTemplate = "" Then
- If My.Computer.FileSystem.FileExists(pathString) Then
- Me.ImageLayout = DataGridViewImageCellLayout.Zoom
- Using fs As New FileStream(pathString, FileMode.Open, FileAccess.Read)
- Dim img = Image.FromStream(fs)
- Return img
- End Using
- Else
- Me.ImageLayout = DataGridViewImageCellLayout.Normal
- End If
- End If
- End If
- End If
- Return value
- End Function
- End Class
Habe ich irgendwo einen sehr groben Schnitzer oder will mich VB einfach nur
manchmal ärgern?
Vielen Dank schon mal für eure Hilfe!