Datagridview - Image Control ungebunden

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Datagridview - Image Control ungebunden

    Hallo,

    in einem DatagridView ist ein ungebundenes Feld als Image-Control hinzugefügt worden.

    Beim Anzeigen können via VB.net-Code beliebige Bitmaps in die ungebundene Spalte eingesetzt werden. Alles Super.

    Nur bei der letzten Zeile, in die neue Inhalte eingefügt werden können, wird immer ein "rotes X" im Image-Feld angezeigt:



    Kann mir jemand mitteilen, wie in die letzte Zeile das "rote X" im Image-Feld ersetzt wrden kann?

    Vielen Dank im voraus für die Information.


    Nachtrag:

    Hat sich bereits erledigt:

    Im DatagridView gibt es eine Eigenschaft "NewRowIndex". In dieser ist die Zeilen-Index enthalten, die auf die Zeile für Neue Angaben verweist.

    Nun braucht man nur noch den ColumnIndex um in dem Feld das Image setzen zu können.

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „BigBen2003“ ()

    Hab was. Nur nen saubereren Weg fand ich nicht.

    VB.NET-Quellcode

    1. Private Sub FrmMain_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    2. DirectCast(DataGridView1.Columns(0), DataGridViewImageColumn).DefaultCellStyle.NullValue = Nothing
    3. End Sub
    4. Private Sub DataGridView1_CellFormatting(sender As Object, e As DataGridViewCellFormattingEventArgs) Handles DataGridView1.CellFormatting
    5. If e.ColumnIndex > 0 Then Exit Sub
    6. Dim CellImage = DirectCast(e.Value, Drawing.Bitmap)
    7. If CellImage Is Nothing Then Exit Sub
    8. If CellImage.Width = 14 AndAlso CellImage.Height = 16 Then e.Value = Nothing
    9. End Sub

    Statt Height und Width ggf. was anderes vergleichen, da diese Angaben etwas zu unspezifisch sein könnten. RawFormat.Guid vielleicht?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    hmm - vmtl. gibt es eleganteres, aber mir fällt grad nur folgendes ein:
    Behandle das DGV_CellFormatting - Ereignis, und wenn die doofe Zelle aufgerufen wird, trage eine leere Bitmap als e.Value ein.

    Edit: Ach - shit! sowas von too late!

    oder ich kann dir diese Krücke anbieten:

    VB.NET-Quellcode

    1. Public Sub New()
    2. InitializeComponent()
    3. unboundImageCol.CellTemplate = New myImageCell
    4. End Sub
    5. Private Class myImageCell : Inherits DataGridViewImageCell
    6. Private Shared _bmpEmpty As New Bitmap(1, 1)
    7. Public Overrides ReadOnly Property DefaultNewRowValue As Object
    8. Get
    9. Return _bmpEmpty
    10. End Get
    11. End Property
    12. End Class
    eine eigene ImageCell mit eigenem DefaultNewRowValue als CellTemplate.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „ErfinderDesRades“ ()