Bild in Zelle eines DGV

  • VB.NET

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von paddy91952.

    Bild in Zelle eines DGV

    Hallo Zusammen,
    ich hoffe, ihr könnt mir bei meinem Problem helfen.

    Ich habe ein DGV und durchsuche dies nach dem Wort "Richtig". Sobald dieses Wort erscheint, soll statt des Wortes ein Bild eingefügt werden, welches sich in den Ressourcen befindet.
    Könnt ihr mir evtl. erklären, wie dies Funktioniert? Bisher habe ich nur die entsprechende Suchschleife

    VB.NET-Quellcode

    1. For i = 0 To AnzahlEinträge
    2. If DataGridView1.Rows(i).Cells(3).Value = "Richtig" Then
    3. DataGridView1.Rows(i).Cells.Item(3).Value = System.Drawing.Bitmap.FromFile(My.Resources.Richtig) 'Funktioniert natürlich nicht, da My.Resources.Richtig kein Pfad ist
    4. Else
    5. End If
    6. Next




    Das wird Dir nix bringen, denn selbst wenn Du DataGridView1.Rows(i).Cells.Item(3).Value = My.Resources.Richtig schreibst, kommt nur System.Drawing.Bitmap o.ä. raus, da das nunmal ne TextBoxColumn ist und keine ImageColumn und so das Bitmap als Text interpretiert wird.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Häufig von mir verwendete Abkürzungen: CEs = control elements (Labels, Buttons, DGVs, ...) und tDS (typisiertes DataSet)
    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht in den Spekulatiusmodus gehen.
    @paddy91952 Für Deinen Fall sollte dies genügen:
    DGV mit einer DataGridViewImageColumn, die erstellst Du im Designer.
    Zwei Bilder in den Ressourcen, hier Wahr und Falsch sowie eine CheckBox.
    Und dann ganz einfach:

    VB.NET-Quellcode

    1. Private Sub CheckBox1_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBox1.CheckedChanged
    2. If CheckBox1.Checked Then
    3. DataGridView1.Rows(0).Cells.Item(0).Value = My.Resources.Wahr
    4. Else
    5. DataGridView1.Rows(0).Cells.Item(0).Value = My.Resources.Falsch
    6. End If
    7. End Sub
    Feddich.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    VB-Fragen über PN / Konversation werden ignoriert!
    ähm - und damit soll man ein Datenfeld mit Wert 'Richtig' durch ein Icon anzeigen können??

    naja, vielleicht.
    sieht ja eiglich garnet so aus, als habe er ein Datenmodell.

    Eine Crux gibts aber noch: evtl. will er keine ImageColumn, sondern will normalerweise Text anzeigen, und nur 'Richtig' durch ein Bild ersetzen.
    Das ginge dann aber mittm CellPainting-Event.
    Naja, mal abwarten, ob er sich noch meldet, und ob er seine Anforderung präzisiert.

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

    Hallo Zusammen,
    ich versuche es mal zu präzesieren:

    Die Daten werden zuvor aus einer Access-Datenbank ins DGV geladen:

    VB.NET-Quellcode

    1. Dim DataSet1 As New DataSet
    2. Dim DataTable1 As New Data.DataTable
    3. Dim DataAdapter1 As OleDbDataAdapter
    4. Dim BindingS1 As New BindingSource
    5. DataTable1.Clear()
    6. DataSet1.Tables.Add(New Data.DataTable)
    7. DataAdapter1 = New OleDbDataAdapter("Select Prüfungsnummer, ObjektID, Datum, Status FROM Protokoll WHERE ProtokollOE='" + Home.AktuellerNutzerzuständig + "'", DBcon)
    8. DataAdapter1.Fill(DataTable1)
    9. Dim cb As New OleDbCommandBuilder(DataAdapter1)
    10. BindingS1.DataSource = DataTable1
    11. DataGridView1.DataSource = BindingS1


    Nun soll am besten in der Spalte "Status" statt Richtig ein Bild/Icon angezeigt werden. Ich, als absoluter Anfänger habe gehofft, dass dies einfach umsetzbar wäre!

    Aber schon einmal vielen Dank für eure Hilfe :)
    Nein, das wird nicht einfach - zumindest nicht von deim Wissensstand aus.
    Schon die Datenbank, die du verwendest, enthält Design-Fehler: Status sollte keinesfalls ein Text-Datenbank-Feld sein.
    Dann verwendest du einen Daten-Zugriffs-Ansatz, der es unmöglich macht, die Programm-Oberfläche im Designer zu designen.

    Du scheinst auch zu übersehen, dass in deim Code deine Dataset1-Variable überhaupt keinen Zweck erfüllt.
    Auch deine Benamung steuert direkt in unwartbares Programmier-Chaos.

    Wie soll das enden, wenn noch 2 oder 3 Tabellen dazukommen, und wenn du Änderungen auch mal rückspeichern willst?

    Ich empfehle dir, die Datenbänkerei strukturiert zu erlernen, und das bedeutet, zunächstmal typisiertes Dataset und Databinding, und zwar ohne Datenbank.
    wie schon gesagt, das Datenmodell deiner Datenbank ist schon daneben, sei froh, wenn du die erstmal weglassen kannst, und stattdessen ein tragfähiges Datenmodell im Dataset entwickeln.

    Kleiner Einblick bietet die vier Views auf Video

    Sag bescheid, wenn dir sinnvoll erscheint, dich in diese Richtung weiterzuentwickeln.