Bildpfad in Datagridview anzeigen
- VB.NET
Sie verwenden einen veralteten Browser (%browser%) mit Sicherheitsschwachstellen und können nicht alle Funktionen dieser Webseite nutzen.
Hier erfahren Sie, wie einfach Sie Ihren Browser aktualisieren können.
Hier erfahren Sie, wie einfach Sie Ihren Browser aktualisieren können.
Es gibt 38 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.
-
-
Hmm - ist fast ärgerlich, dass sich kein einziger code-vorschlag auf das bezieht, was im Tut steht - nämlich dass dem
e.Value
des CellFormatting-EventArgs ein Image zugewiesen wird.
Beachte:DataGridView1.Item(9, e.ColumnIndex).Value
ist nicht:e.Value
- also den Unterschied sollte man schon bemerken.
Weiters muss man natürlich e.RowIndex und e.ColumnIndex checken und ausschliessen, dass das CellFormatting einer Zelle verarbeitet wird, welche gar keine DgvImagCell ist, oder welche sich in der ZufügeZeile befindet, also leer bleiben muss.
Bitte aufhören mit Button_Click und CellValueChanged und anneren Suboptimalitäten oder gar Holzwegen.
Das event heisst.CellFormatting
, und ist optimal geeignet, um Images in ImageColumns anzuzeigen, insbesondere bei Verwendung typisierten Databindings.
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „ErfinderDesRades“ ()
-
-
Bitte lesen. Lesen!!
ErfinderDesRades schrieb:
...deme.Value
des CellFormatting-EventArgs ein Image zugewiesen wird.
Beachte:DataGridView1.Item(9, e.ColumnIndex).Value
ist nicht:e.Value
- also den Unterschied sollte man schon bemerken.
Ane.Value
!!!!
(oder weisst du etwa garnet, was eine Zuweisung ist? - das ist das mit dem=
-Zeichen)
Aber das hat nix mit deiner Fehlermeldung zu tun. Deine Fehlermeldung sagt nur, dass der Pfad ein ungültiges Format hat.
Also was beiDataGridView1.Item(9, e.RowIndex).Value.ToString
rauskommt ist ungültig - deshalb kann die Bitmap nicht erstellt werden.
Das kannst du nun wortreich bestreiten, und die Gültigkeit behaupten, aber in 99% derartiger Fälle behält am Ende der Computer recht.
Hmm - das ist eiglich prima - da kannst du nun Debuggen lernen.
Weil du musst, wenn der Fehler auftritt, herausbekommen, was genau beiDataGridView1.Item(9, e.RowIndex).Value.ToString
rauskommt.
Dazu erzeugst du den Fehler, und markierst dann im Code genau diesen Ausdruck:DataGridView1.Item(9, e.RowIndex).Value.ToString
- kein Zeichen mehr, kein Zeichen weniger.
Dann Kontextmenü "Schnellüberwachung" anklicksen, da wird der Wert angezeigt.
Die Anzeige ist evtl. zu fuzzelig, daher klickste beim Wert auf die kleine Lupe, dann wird der Wert in einem Extra-Form angezeigt, aus dem du ihn auskopieren kannst, und dann hier posten.
-
guccini schrieb:
Zusätzliche Informationen: Der Pfad hat ein ungültiges Format.
Da hilft Debuggen. Haltepunkt reinsetzen und aufklären: Debuggen, Fehler finden und beseitigen
========
Es soll ja Leute geben, die sind so arrogant zu glauben, dass der von ihnen geschriebene Code fehlerfrei sei.
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).
Programmierfragen über PN / Konversation werden ignoriert! -
Naja wir wollen uns nicht auf rote grüne oder blaue farbe konzentrieren, e.value soviel ich weiss ist auf object bezogen, da ich noch vieles lernen muss veruche ich das dem entsprechend umzusetzten....da kann ich nur von euch lernen, deswegen nicht böse sein. ich werde mein code neue aufsetzten da mir das abgeschmiert ist, musste mein pc neu starten, keine ahnung woran das liegt....
-
Leg dir am Besten ein
Dictionary<string, Bitmap>
an. Wenn ein Pfad im Dictionary nicht vorhanden ist, lädst du die Bitmap, skalierst sie auf 16x16px und fügst sie dem Dictionary hinzu. Ist der Pfad im Dict. vorhanden, nimmst du diese Bitmap. Wenn die Bildchen nicht mehr gebraucht werden alle Disposen. -
ja, aber das kommt erst viel später.
Zunächst muss guccini lesen lernen - s.post#24
Dann sprechen lernen.
Weil eine Wort-Zusammenstellungen wie
guccini schrieb:
e.value soviel ich weiss ist auf object bezogen
"Ebenso wie"
guccini schrieb:
also cell(9)->picturebox?
guccini schrieb:
von cell(8) bild_pfad -----> cell(9) DataGridViewImageColumn pic zu sehn?
guccini schrieb:
eine nicht gebundene DGV, da sich die daten in einer dataset(xml) befinden
Solange aber seine Äusserungen keinen Sinn ergeben ist da auch nix verstanden, nichtmal die 3 Codezeilen aus dem Tut (sorry dassich das so ungeschminkt sage).
Und solange braucht man auch nicht mit Vorschlägen zum Caching der Images zu kommen (um die absehbar miserable Performance wieder hinzukriegen).
Und noch vorher muss wohl geklärt (debuggt) werden, was es mit dem ungültig formatierten Pfad auf sich hat.
-
Hi EDR, post 28 hättest du dir ersparen können.....
mag sein das ich in deutsch nicht mächtig bin aber eine gewisse aroganz muss nicht sein...
die 3 codezeilen aus deinem tut
vielleicht hast du das auch verstanden
keiner hat dich gezwungen zu antworten
Sorry aber was du das schreibst ist Respektlos -
Sorry wenn ich mich hier mal einklicke. Eine Frage an @guccini
Was spricht den dagegen nur ein Pfad im DGV zu erwähnen und ein PictureBox das neben der DGV ist. Sobald man eine row anklickt, wird gleich das entsprechende Bild angezeigt. siehe Anhang
Ist doch viel recourcenschonender.
Zum Anhang: Ist bestimmt nicht professionell gelöst, soll nur zeigen wie ich es mir gedacht habe.
Freundliche Grüsse
exc-jdbiDieser Beitrag wurde bereits 1 mal editiert, zuletzt von „exc-jdbi“ ()
-
VB.NET-Quellcode
@exc-jdbi: Jo, das ist ein alternatives Konzept, um gespeicherte Bild-Pfade als Bilder zu präsentieren - hat viele Vorteile, und nur den kleinen Nachteil, dass man immer nur 1 Bild sieht, nämlich das aktuell selektierte.
Dazu habich auch ein Sample, wie das mit Mit Databinding an Picturebox.Location sehr elegant umsetzbar ist: PictureViewer (sogar mit Video).
Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „ErfinderDesRades“ ()
-
Ich bekenne mich schuldig: Ich habe ein Verständnisproblem beim Tut (daher stellt sich die Frage, ob dieser Post zum Tut soll, hier bleibt oder ein eigener Thread eröffnet werden soll, da es ja irgendwie auch hierher gehört.)
e.Value
wird im CellFormatting-EventHandler ersetzt. Von Integer zu Image/Bitmap, whatever. Hab ich probiert:
VB.NET-Quellcode
- Public Class Form1
- Private ImageList As New List(Of Bitmap)
- Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
- ImageList.Add(New Bitmap(PfadZuEinemExistierendenBild))
- If IO.File.Exists("Test.xml") Then Tds.ReadXml("Test.xml")
- End Sub
- Private Sub DataGridView1_CellFormatting(sender As Object, e As DataGridViewCellFormattingEventArgs) Handles DataGridView1.CellFormatting
- If e.ColumnIndex <> 1 Then Exit Sub
- e.Value = ImageList(CInt(e.Value))
- 'e.FormattingApplied = True 'ob an oder aus: gleicher Effekt
- End Sub
- End Class
e.Value
ist ja gar keinInteger
mehr, sondern ein(e?)Bitmap
-> Fehler. In der Source des Tuts kommt hingegen immer ein Integer in e.Value an. Wo ist der Fehler in meiner Denkweise? Welche Magie habe ich übersehen?
btw: Im Tut wird mite.FormattingApplied
gearbeitet, in der Source hingegen nicht. Denn?
##########
Ich hab das CellFormatting-Event 2x abonniert. Im 1. EventHandler ist zu Beginn e.Value vom Typ Integer. Soweit klar. Nach der Zuweisung ist e.Value vom Typ Bitmap. Im 2. EventHandler wird mir in der Tut-Source als auch in meinem Code bestätigt, dass e.Value immer noch vom Typ Bitmap ist. Nur beim relativ schnell wieder auftretenden CellFormatting-Event wird im 1. EventHandler bei mir gemotzt, während - wie geschrieben - in der Tut-Source Integer wieder da sind. Ich hab versucht, den relevanten Unterschied zwischen Tut-Code und meinem Code zu finden, hatte aber bisher keinen Erfolg.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.Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „VaporiZed“ ()
-
VaporiZed schrieb:
Ich hab das CellFormatting-Event 2x abonniert.
Weil wenn 2 Handler dasselbe Event abonnieren, wird jedem auch dasselbe Eventargs gegeben. Und wenn das im ersten Handler verändert wurde, kommts im 2. Handler eben verändert an.
Genau dafür kann man nu das.FormattingApplied
nutzen: Damit, wenn es angibt, dasse.Value
bereits formatiert ist, dass man dann nicht versucht, nochmal zu formatieren.
Coole Sache - mir ist damals auch aufgefallen, dasses ühaupt keinen Unterschied macht.
Nur dachte ich (gestern, nachträglich), dass wenn es diese Property gibt, dann liegt man sicherlich auf der sichereren Seite, wenn man sie dann auch setzt, wenn man eine Formatierung ausgeführt hat.
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „ErfinderDesRades“ ()
-
ErfinderDesRades schrieb:
Weil wenn 2 Handler dasselbe Event abonnieren, wird jedem auch dasselbe Eventargs gegeben. Und wenn das im ersten Handler verändert wurde, kommts im 2. Handler eben verändert an.
* Ich habe den 2. EventHandler auch in Deinem Tut-Sourcecode eingebaut. Da wird natürlich durch die Abänderung im 1. EventHandler auch gemeldet, dass e.Value nun vom Typ Bitmap ist. Aber wenn eben das Event nochmal kommt, dann ist auch bei Dir wieder im 1. EventHandler e.Value vom Typ Integer. Der 2. EventHandler hat keinen Einfluss. Weder auf meinen noch auf Deinen Code.
Nochmal zusammengefasst:
Bei Dir:- Event wird gefeuert
- 1. EventHandler meldet: Typ von e.Value ist Integer
- 1. EventHandler ändert den Typ von e.Value von Integer auf Bitmap
- 2. EventHandler meldet: Typ von e.Value ist Bitmap
- 2. Event wird gefeuert
- 1. EventHandler meldet: Typ von e.Value ist Integer
- 1. EventHandler ändert den Typ von e.Value von Integer auf Bitmap
- 2. EventHandler meldet: Typ von e.Value ist Bitmap
- Event wird gefeuert
- 1. EventHandler meldet: Typ von e.Value ist Integer
- 1. EventHandler ändert den Typ von e.Value von Integer auf Bitmap
- 2. EventHandler meldet: Typ von e.Value ist Bitmap
- 2. Event wird gefeuert
- 1. EventHandler meldet: Typ von e.Value ist Bitmap
- 1. EventHandler rebelliert beim Änderungsversuch von nun Bitmap auf Bitmap
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. - Event wird gefeuert
-
Bei einer gebundenen DGV-Spalte?
Und die für diese Spalte angebundene DataRow-Property ist vom Typ Integer? Und kommt im Formatting-Event trotzdem als Bitmap raus?
Sehr Merkwürden.
Und - wenn du FormattingApplied setzst - welchen Wert hat das in dem Moment, wenn das nächste FormattingEvent dann mit der Bitmap ankommt?
-
Ah, Problem gefunden und gelöst. Der Knackpunkt war, dass es erlaubt war, dass dem DGV neue Zeilen hinzugefügt werden dürfen. Und in der "letzten" Zeile (die für neue Daten vorgesehen ist), verhaspelt sich der Compiler. Klar, ist ja kein Integerwert, sondern ein(e) Default-Bitmap drin.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. -
-
Argh, ich vergaß. Unabhängig davon, ob
FormattingApplied
explizit im 1. EventHandler aufTrue
oderFalse
gesetzt oder eben gar nicht auf irgendeinen Wert von mir gesetzt wird, wird der 2. EventHandler mite.Value
alsBitmap
aufgerufen. Ich hoffe, dass das die Frage beantwortet und das Interesse befriedigt.
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.Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „VaporiZed“ ()
-
ja das ist schon klar, das sagte ich ja bereits: Wenn der 1. Eventhandler in e.value eine Bitmap reinmacht, dann kann im 2. Eventhandler logischerweise nix anneres drinne sein als eine Bitmap.
Deswegen hatte ich ja gedacht, man solle auf .FormattingApplied testen, so:
Weil - das habich jetzt nachgeguckt - dann steht .FormattingApplied nämlich auf false.
Also sichert man ab entweder indem man den Typ abfragt, oder indem man die Zufügezeile vonne Formatierung ausschließt:VB.NET-Quellcode
-
Ähnliche Themen
-
ICEMAN-Wappen - - Sonstige Problemstellungen
-
6 Benutzer haben hier geschrieben
- guccini (14)
- ErfinderDesRades (11)
- VaporiZed (9)
- RodFromGermany (3)
- Gonger96 (1)
- exc-jdbi (1)