DataGridView Events

  • VB.NET

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von SidezockingLP.

    DataGridView Events

    Hey,

    Um eine Sammlung von Daten anzeigen zu lassen kann man ja ganz einfach das Listbox Control verwenden. Nur ist diese Art der Anzeige vom "design" nicht wirklich schön und sehr einfach. Beispielsweise lässt sich ein kleines bild neben dem Item oder ein Farbwechsel beim mouse-enter event eines Items nicht wirklich realisieren.

    Meine Idee wahr, während der Laufzeit Controls zu erstellen, z.b für jedes Item einer Array ein Label und Bild. Allerdings wurde mir bei meinem letzten Beitrag hier oft gesagt dass das keine gute Lösung ist aufgrund der möglichen Ausnahmen.

    Deshalb währe es schön wenn ihr mir eure Ideen schreiben könntet, wie man eine Liste wie z.b in diesem Bild in VB.net mit beliebig vielen Items realisieren kann. Danke :)

    SidezockingLP schrieb:

    kann man ja ganz einfach das Listbox Control verwenden
    Man kann aber auch noch einfacher das deutlich bessere DataGridView verwenden.
    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!
    Hallo

    ​Beispielsweise lässt sich ein kleines bild neben dem Item oder ein Farbwechsel beim mouse-enter event eines Items nicht wirklich realisieren.


    ​Verratest du uns auch um was für eine Applikation es sich handelt? WinForms oder WPF?

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    @RodFromGermany Stimmt für so eine Tabelle ist das echt gut. Kleine Frage kann man bei einem DataGridView wie in meinem Bild die Border der Zeilen wegmachen und könnte man auch die Headertexte ausblenden? Also nur Spalten ohne Header anzeigen?
    MFG

    Edit: Punkt 2 hab ich gefunden.

    Quellcode

    1. ​ColumnHeadersVisible = false
    Ja, dafür gibt's ja in den DGV-Eigenschaften ganz viele Möglichkeiten (Stichwort GridColor). Anschauungs-Beispiel siehe auch hier.
    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.

    SidezockingLP schrieb:

    Kleine Frage
    Such einfach mal im Forum nach DataGridView und schmökere da ein wenig rum.
    Mach Dich vertraut mit diesem gewaltigen Control.
    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!
    Also wenn ich mir das Bildle angugge, mit verschieden-farbige Herzle, und bunte Texte, und verschieden viele Icons in der Extra-Spalte - son Klickibunti ist imo in WinForms nicht mehr mit vertretbarem Aufwand umsetzbar, sondrn Wpf.
    Und auch in Wpf wird das nicht einfach, sondern verlangt zuallererst ein supergut durchdachtes Viewmodel.
    Hey,
    Ich habe mich jetzt mal ein bisschen in das Datagridview eingearbeitet und die vielen tollen Möglichkeiten kennengelernt. Leider stehe ich jetzt doch vor einem Problem für das ich momentan keine Lösung habe.

    Also ich habe in einen DataGridViewButtonColumn erstellt und möchte jetzt natürlich dass beim klick auf einen Button Code ausgeführt wird. Im Internet habe ich als Lösung nur das Event CellContentClick gefunden.

    Das Event funktioniert auch ganz gut denn man kann ja mit DataGridViewCellEventArgs den Index herausfinden und so für jeden Button was anderes ausführen.

    Mein 1. Problem. Ich habe bei meinem Datagridview festgelegt dass bei einem Click die ganze Row selected wird. Also mit SelectionMode = DataGridViewSelectionMode.FullRowSelect --> Problem bei 5Columns wird das Event CellContentClick 5 mal ausgeführt :( Gibt es noch ein anderes Event dafür?

    Mein 2. Problem. Ich würde gerne beim klicken auf einen Button einen Sub mit mehreren Parametern aufrufen.
    Wenn ich das so mache:

    Quellcode

    1. AddHandler DataGridView1.CellContentClick, AddressOf Open_details
    kann ich ja keine parameter mehr hinzufügen.
    Wenn ich das so mache:

    Quellcode

    1. AddHandler DataGridView1.CellContentClick, Sub() Open_details(i)
    dann kann ich nicht mehr die DataGridViewCellEventArgs abfragen.
    Kenne nur diese 2 Möglichkeiten, gibt es denn noch eine Alternative beides zu verbinden? :)

    Hoffe ihr könnt mir helfen :) Thx
    zu 1) Das glaub ich nicht, dass bei einem Click das ContentClicke-Event 5 mal gefeuert wird.
    Es wird genau einmal gefeuert, und den EventArgs kannst du genau Zeile und Spalte entnehmen, welche Zelle das war.

    zu 2)
    das CellContentClick kann nur CellContentClick-Handler-Methoden aufrufen - keine anderen.
    Am besten lässt du dir den richtigen Handler generieren, durch Doppelklick im Designer auf das Dgv.
    Andere komische Sachen gehen auch, aber da sollte man genau wissen, was man tut, und einen guten Grund für haben, es anderes zu machen.
    Du musst prüfen, ob auch die Zelle mit dem Button angeklickt wurde. Das ist da nicht wie beim richtigen Button.

    Gugst du auch MSDN:
    msdn.microsoft.com/de-de/libra…ttoncolumn(v=vs.110).aspx
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    @ErfinderDesRades 1) Hey, ich habe jetzt herausgefunden warum bei mir das 5mal ausgeführt wurde, sah nur so aus als ob das von dem Event kam.
    2) Aber wie kann ich bei dem richtigen Handler noch weitere parameter hinzufügen?

    @mrMo Danke für den Denkanstoß. Hab das jetzt so gemacht:

    VB.NET-Quellcode

    1. AddHandler DataGridView1.CellContentClick, Sub() If DataGridView1.Rows(aktindex).Selected Then Open_details(i)