Hallo zusammen,
ich habe ein recht lästiges Problem mit einer ImageColumn in einem Datagridview.
Das Dgv bekommt die Daten von einer Bindingsource (gebunden an ein typisiertes DataSet). Durch den angewählten Filter wird im dgv nur eine Spalte angezeigt. So weit so gut. In der Datatable gibt es eine weitere Spalte namens ImagePath, in der befindet sich der Pfad zu einem lokal abgelegtem Bild. Dieses möchte ich jetzt in der Ersten Spalte im DGV darstellen.
Dafür habe ich im Code, nachdem das dgv gefüllt wurde, eine ImageColumn an Index 0 hinzugefügt. Anschließend laufe ich alle Zeilen des dgv durch und über die Position in der BindingSource erhalte ich den jeweiligen Pfad des Bildes. Klappt auch.
Nun teile ich das neu erstellte Bitmap der Zelle zu. Das klappt eigentlich auch, also im Debug sehe ich, das die Zelle den dementsprechenden Inhalt "Image" hat. Das würde passen. Angezeigt bekomme ich aber leider nur das Fehlerbiild (rotes x) vom dgv.
Hier mal der Code mit dem ich das dgv befülle:
Und das Ergebnis:
Hat von Euch jemand vielleicht einen guten Tip für mich? Ich verstehe einfach nicht, wesshalb mir das Bild in der zeile des Datagridviews nicht angezeigt wird, wenn ich das Bild aber einfach einer PictureBox zuweise, dann funktionierts?
Danke und LG
Günther
ich habe ein recht lästiges Problem mit einer ImageColumn in einem Datagridview.
Das Dgv bekommt die Daten von einer Bindingsource (gebunden an ein typisiertes DataSet). Durch den angewählten Filter wird im dgv nur eine Spalte angezeigt. So weit so gut. In der Datatable gibt es eine weitere Spalte namens ImagePath, in der befindet sich der Pfad zu einem lokal abgelegtem Bild. Dieses möchte ich jetzt in der Ersten Spalte im DGV darstellen.
Dafür habe ich im Code, nachdem das dgv gefüllt wurde, eine ImageColumn an Index 0 hinzugefügt. Anschließend laufe ich alle Zeilen des dgv durch und über die Position in der BindingSource erhalte ich den jeweiligen Pfad des Bildes. Klappt auch.
Nun teile ich das neu erstellte Bitmap der Zelle zu. Das klappt eigentlich auch, also im Debug sehe ich, das die Zelle den dementsprechenden Inhalt "Image" hat. Das würde passen. Angezeigt bekomme ich aber leider nur das Fehlerbiild (rotes x) vom dgv.
Hier mal der Code mit dem ich das dgv befülle:
VB.NET-Quellcode
- Public Sub New(ShowPalette As cls_Palette, img As Image, AsReadOnly As Boolean)
- Me.New
- _isStarting = True
- _Palette = ShowPalette
- Me.BackgroundImage = img
- Me.BackgroundImageLayout = Windows.Forms.ImageLayout.Zoom
- txt_Laenge.Text = ShowPalette.Laenge.ToString("F2")
- txt_Breite.Text = ShowPalette.Breite.ToString("F2")
- txt_Hoehe.Text = ShowPalette.Hoehe.ToString("F2")
- txt_MaxLast.Text = ShowPalette.MaxLast.ToString("F2")
- ChangeInputState(AsReadOnly)
- 'DataBinding
- _BS = New Windows.Forms.BindingSource(Ronden_DB.Ronden_DS, Ronden_DB.Ronden_DS.Ronden_Table.TableName)
- Dim Filterstring As String
- Filterstring = String.Format("ID_Vorzugspalette = '{0}'", _Palette.VorlagenID.ToString) '"ID_Vorzugspalette='" & _Palette.VorlagenID.ToString & "'"
- _BS.Filter = Filterstring
- dgvRonden.DataSource = _BS
- For Each col As Windows.Forms.DataGridViewColumn In dgvRonden.Columns
- If Not col.HeaderText = "GeometrieFileNameEinfach" Then
- col.Visible = False
- Else
- col.HeaderText = "Ronden Bezeichnung"
- End If
- Next
- Dim dgcs As New Windows.Forms.DataGridViewCellStyle
- Dim dgc As New Windows.Forms.DataGridViewImageColumn(False)
- dgcs.BackColor = My.Settings.AMABackColor
- dgcs.ForeColor = My.Settings.AMAForeColor
- dgvRonden.Columns.Insert(0, dgc)
- Dim i As Integer
- For i = 0 To dgvRonden.Rows.Count - 1
- Dim rT As DS_Ronden.Ronden_TableRow = TryCast(TryCast(_BS(i), System.Data.DataRowView).Row, DS_Ronden.Ronden_TableRow)
- Dim bild As Image
- Using s As System.IO.FileStream = New IO.FileStream(rT.ImagePath, IO.FileMode.Open)
- bild = New Bitmap(s)
- PictureBox1.Image=bild '--> NUR FÜR TESTZWECKE UM ZU SEHEN, DASS DAS LADEN DES BILDES FUNKTIONIERT
- dgvRonden.Rows(i).Cells.Item(0).Value = bild ' My.Resources.EURO_PaletteGrau ' = RondenImage
- End Using
- dgvRonden.UpdateCellValue(i, 0)
- Next
- dgvRonden.ClearSelection()
- _isStarting = False
- End Sub
Und das Ergebnis:
Hat von Euch jemand vielleicht einen guten Tip für mich? Ich verstehe einfach nicht, wesshalb mir das Bild in der zeile des Datagridviews nicht angezeigt wird, wenn ich das Bild aber einfach einer PictureBox zuweise, dann funktionierts?
Danke und LG
Günther