Feststellen, ob eine DataGridViewZelle markiert ist

  • VB.NET

Es gibt 13 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Feststellen, ob eine DataGridViewZelle markiert ist

    Ich würde gerne mehre Zellen, die boolean sind, in einem Datagridview markieren und durch einen einzigen Mausklick auf eine der markierten Zellen alle markierten Zellen entweder auf True bzw. False setzen.

    Ich habe nach einer Methode gesucht, wie ich feststelle, ob eine Zelle markiert ist? Ich habe bei den Ereignissen bei DataGridView keines gefunden, bei dem ich annehme, dass dies auf markiert oder nicht markiert reagiert.

    Also, wie stelle ich fest, ob eine Zelle markiert ist.
    Probier mal dies:

    VB.NET-Quellcode

    1. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    2. For Each item In DataGridView1.SelectedCells
    3. ' mit item was tun
    4. Next
    5. End Sub
    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!

    ErfinderDesRades schrieb:

    bei bool Zellwerten generiert das DGV doch automatisch eine CheckboxDatagridViewColumn.

    Es geht immer noch um das Gehörprogramm. Es sollen bestimmte Aufgaben ab- oder dazu gewählt werden.
    Jede Checkbox einzeln anzuklicken ist nervig. Deswegen die Idee, durch Mausziehen mehrere Zellen markieren, die anklicken und alle markierten Aufgaben werden (ab)gewählt.

    RodFromGermany schrieb:

    Probier mal dies:

    So weit ich es momentan überblicke, hast Du mich auf die richtige Spur gebracht. Danke.
    Jetzt nimmst Du meinen Code und den Vorschlag vom @ErfinderDesRades: und setzt in der Schleife einfach das Checked-Property auf Deinen Wert.
    Teste, ob es eine CheckboxDatagridViewColumn-Spalte ist, caste das Item auf den richtigen Typ und fertich.
    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 ich habe zwar das Löffelmannbuch bis zur Hälfte durch. Ich stehe aber vor solchen Antworten immer noch, wie der Ochs vor'm Berg.

    RodFromGermany schrieb:

    Jetzt nimmst Du meinen Code und den Vorschlag vom @ErfinderDesRades und
    Bis hierhin verstehe ich das Ganze.

    RodFromGermany schrieb:

    Checked-Property auf Deinen Wert
    Da ahne ich noch, was gemeint ist.

    RodFromGermany schrieb:

    caste das Item auf den richtigen Typ
    Und hier setzt es total aus.

    Dieses Cast und Sender Sache habe ich bisher nur immer aus dem Augenwinkel gesehen. Finde jetzt aber nichts, was mir mal die Grundlagen dieser Technik(?) erklären würde.
    DataGridView mit DataGridViewCheckBoxColumn

    VB.NET-Quellcode

    1. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    2. For Each item In DataGridView1.SelectedCells
    3. If TypeOf item Is DataGridViewCheckBoxCell Then
    4. Dim cell As DataGridViewCheckBoxCell = DirectCast(item, DataGridViewCheckBoxCell)
    5. cell.Value = True
    6. End If
    7. Next
    8. End Sub
    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!

    RodFromGermany schrieb:

    caste das Item auf den richtigen Typ
    Und hier setzt es total aus.
    Naja, ist so ja auch nicht ganz richtig, was Rod sagt.

    Wie man eine typisierte DataRow an einem bestimmten RowIndex von einer BindingSource abruft, ist dir bekannt? - ich meine die BindingSource.At(Of T)(index) - Extension aus meine DBExtensions

    Ansonsten kann mans auch von Hand formulieren, aber das beinhaltet einen zweifachen Cast. Auf jeden Fall mußt du den Datentyp der typisierten DataRow angeben können, sonst sind in deinem Code die Properties der DataRows nicht bekannt.

    Ach naja - soo falsch ist Rods Aussage nu auch nicht - ich brauch nur ne Weile, um zu kapieren, dass er mit "Item" nicht die Daten meint, sondern DatagridViewZellen. Jo, deren Typ kannman testen, und dann casten (wobei TryCast() natürlich sinnvoller wäre, weils beides in einem Aufruf macht).
    Ist auch Quatsch - man braucht die Zelle nur zu testen, und kann dann ihrer Value-Property was zuweisen.

    Aber wie gesagt: Ich würde lieber die SelectedRows - Auflistung bemühen, und mir aus der BindingSource die typisierten DataRows holen, und bei denen die entsprechende Property setzen. Dann kann man auch Bereiche selecten, die sich garnet mit der CheckboxColumn überschneiden, und trotzdem würde ein "AlleMarkieren"-Button funktionieren.

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

    @RodFromGermany: Vielen Dank

    @Erfinder des Rades: Danke, aber meine Verständnisprobleme sind viel elementarer. Ich habe erst einmal herausfinden müssen, was casten als solches bedeutet. Mein Hauptproblem seit Bbetreten dieser Visual-Basic-Welt, dass ich deren Fachsprache bei weitem nicht so intuitiv gut verstehe, wie bei anderen mir fremden Fachbereichen.

    VisualDAU schrieb:

    Danke, aber meine Verständnisprobleme sind viel elementarer. Ich habe erst einmal herausfinden müssen, was casten als solches bedeutet. Mein Hauptproblem seit Bbetreten dieser Visual-Basic-Welt, dass ich deren Fachsprache bei weitem nicht so intuitiv gut verstehe, wie bei anderen mir fremden Fachbereichen.

    Wow! Ganz ausgezeichnete Problem-Analyse ! :thumbsup:

    Damit kommst du direkt bei dieses Buch Lesen heraus, denn ohne die Fachsprache kannst du nicht kommunizieren, ja kannst du im Grunde nichtmal programmiererisch denken.

    "Casten" ist ein gutes Beispiel: Dieser Begriff ist elementar in jeder typisierten Programmiersprache, und man könnte jetzt sich iwelche Erklärungen aus den Rippen leiern, die aber mit Sicherheit nie an die Qualität der Abhandlung durchs genannte kostenlose Löffelmann-buch heranreichen.
    Und weil casten so elementar ist, wäre es dumm von dir, dich mit aussm Forum zusammengestoppelten Halbwissen zufrieden zu geben.
    Weil casten ist nur eine Variante möglicher Typ-Umwandlungen, und um "Typ-Umwandlung" zu verstehen, muß man halt das Typ-Konzept einer typisierten Sprache überhaupt schnackeln, also dass da DatenTypen definiert sind, und der Compiler passt auf, dass man nicht Äpfel mit Birnen verwechselt. Also du siehst: Das kleine Wörtchen "Casten" ist nur die Spitze eines Eisberges, und darunter befinden sich ganz wesentliche Aspekte von OOP überhaupt (zB muß man, um "DatenTyp" zu verstehen, auch den Unterschied von Objekt und Klasse schnackeln - und so weiter...).

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

    ErfinderDesRades schrieb:

    die aber mit Sicherheit nie an die Qualität der Abhandlung durchs genannte kostenlose Löffelmann-buch heranreichen.

    Ich habe mir ja eigentlich das Löffelmannbuch für VB 2010 bis Seite 400 oder 500 angetan. Fand das auch sehr hilfreich. Aber es hat mir nicht dazugeholfen, das hier gängige Deutsch besser zu verstehen. Und ich glaube, dass war auch der Grund, warum ich nicht so richtig weiter gelesen habe, weil mir vermutlich nach Durchlesen oder arbeiten auch nur Durchwursteln bleibt.
    Ja, dann fällt Löffelmann2010 wesentlich hinter die Qualität von Löffelmann2005 zurück.

    Im 2005er befasst sich Kapitel 11 ausführlich mit verschiedensten TypUmwandlungen - u.a. DirectCast und TryCast.

    Ist interessant: Neuerdings finde ich auch gelegentliche Schwächen in dem Buch: ZB die TypÜberprüfung mit TypeOf (s. Rods Post) erwähnt er garnet.

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

    @VisualDAU: Taste Dich langsam ran.
    Wenn Du ein Problemchen hast, erstell Dir dazu ein kleines Testprogramm, in dem Du ausschließlich dieses Problem bearbeitest.
    So kommst Du mit der Zeit zu einer hübschen Sammlung funktionierender Snippets, und wenn Du Dich an ein größeres Projekt rantraust, kannst Du dies dann praktisch aus Deinen Snippets zusammensetzen.
    Da haste eine Menge gelernt und Du hast im Sinne der objektorientierten Programmierung Deine Objekte (die Snippets) ordentlich gekapselt.
    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!