Datagridview Checkbox SQLite

  • VB.NET

Es gibt 15 Antworten in diesem Thema. Der letzte Beitrag () ist von Madde.

    Datagridview Checkbox SQLite

    Hallo Zusammen,

    unter Zuhilfenahme eines Tutorials bin ich grad dabei ein kleines Auftragsbuch zu erstellen.
    Es werden Eingaben mittels Textboxen und Comboboxen in ein Datagridview übernommen und mit einer SQLite-Datenbank abgeglichen.
    Lesen/Schreiben funktioniert auch alles. Eine Update-Funktion ist ebenfalls noch mit dabei, sodass nachträglich auch Änderungen vorgenommen werden können.
    So, nun zum Problem. Meine Spalte 15 ist in der Datenbank als Boolean eingestellt und wird somit als DatagridviewCheckBoxColumn dargestellt. Der Standardwert ist immer 0 und wird auch so in die Datenbank übernommen.

    Wie kann ich im Datagridview die Checkbox markieren und das "Checked" in die Datenbank übernehmen? Praktisch mit dem Wert 1.
    Danke schonmal im voraus.

    Mein Status: Anfänger

    MfG Madde
    Hallo zusammen,

    ich komme langsam mit meinem Auftragsbuch voran. Jetzt stehe ich vor einem Problem, was sicher eine simple Lösung bereithält, welche sich mir als Laie aber eben nicht eröffnet.
    Im DGV sollen Aufträge, die erledigt sind, mittels Klick auf Button, ausgeblendet werden. Funktioniert soweit auch, bis zu dem Punkt wenn alle Einträge erledigt sind, ergo alle Zeilen ausgeblendet werden sollen.
    Mit diesem Code blende ich die Zeilen aus. Ich meine, ich kann mir vorstellen, dass es einfach daran liegt, dass ich eben nicht unter Null zählen kann, weiß aber nicht, wie ich das sonst lösen kann.

    Quellcode

    1. For i = 0 To DataGridViewTable.Rows.Count - 1
    2. If DataGridViewTable.Rows(i).Cells(16).Value.ToString.Trim = "Ausgeliefert" OrElse
    3. DataGridViewTable.Rows(i).Cells(16).Value.ToString.Trim = "Abgeholt" OrElse
    4. DataGridViewTable.Rows(i).Cells(16).Value.ToString.Trim = "Versandt" Then
    5. DataGridViewTable.Rows(i).Visible = False
    6. End If
    7. Next


    MfG Madde
    Erstmal Danke aber der Code scheint nicht zu funktionieren.
    BeimTest hat er abgebrochen aber das lag an der Schreibweise, da der Status groß geschrieben ist ("Ausgeliefert").
    Wenn ich das in Deinem Code ändere, passiert dann aber gar nichts mehr.
    Ich habe soeben festgestellt, wenn das DGV geladen wird, sind mit dem alten Code die betreffenden Zeilen ausgeblendet. Wenn ich dann den Button mit dem neuen Code betätige werden die Zeilen plötzlich sichtbar, obwohl ja nichts passieren dürfte, da die Zeilen bereits ausgeblendet sind.
    Nochmal kurz wie ich es gern hätte.
    2 Button, einer zum Ausblenden der Zeilen mit den vorgegebenen Werten (Ausgeliefert ....) und den zweiten Button, wo diese Zeilen wieder eingeblendet werden.

    Madde schrieb:

    BeimTest hat er abgebrochen aber das lag an der Schreibweise, da der Status groß geschrieben ist ("Ausgeliefert").
    Nein sowohl das Array enthält klein geschriebene Werte als auch der Zellvergleich enthält klein geschriebene Werte. Diese werden mit dem ToLower forciert.

    Madde schrieb:

    2 Button, einer zum Ausblenden der Zeilen mit den vorgegebenen Werten (Ausgeliefert ....) und den zweiten Button, wo diese Zeilen wieder eingeblendet werden.
    In dem einen Button führst du den obigen Code aus.
    Im anderen Button setzt du in der Schleife Row.Visible = True
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Nein sowohl das Array enthält klein geschriebene Werte als auch der Zellvergleich enthält klein geschriebene Werte. Diese werden mit dem ToLower forciert.

    Ok, nochmal getestet, funktioniert soweit ABER nur solange Zeile 1 keinen der Werte enthält, wenn Zeile 1 auch ausgeblendet werden soll, kommt der Abbruch

    In dem einen Button führst du den obigen Code aus.

    Im anderen Button setzt du in der Schleife Row.Visible = True

    Funktioniert leider nicht, er meldet "Fehler BC30205 end of-Anweisung erwartet" nach True

    petaod schrieb:

    Fehlermeldung?
    Hat dein DGV Header oder nur Datenzeilen?

    System.InvalidOperationException: "Die mit der Position des Währungs-Managers verknüpfte Zeile kann nicht unsichtbar gemacht werden.
    Der Header wird mit dargestellt

    Quellcode

    1. Private Sub ButtonAusblenden_Click(sender As Object, e As EventArgs) Handles ButtonAusblenden.Click
    2. For Each Row In DataGridViewTable.Rows
    3. Row.Visible = Not {"ausgeliefert", "abgeholt", "versandt"}.Contains(Row.Cells(16).Value.ToString.Trim.ToLower)
    4. Next
    5. End Sub
    6. Private Sub ButtonAnzeigen_Click(sender As Object, e As EventArgs) Handles ButtonAnzeigen.Click
    7. For Each Row In DataGridViewTable.Rows
    8. Row.Visible = True {"ausgeliefert", "abgeholt", "versandt"}.Contains(Row.Cells(16).Value.ToString.Trim.ToLower)
    9. Next
    10. End Sub

    Madde schrieb:

    VB.NET-Quellcode

    1. DataGridViewTable.Rows(i).Visible = False
    Das ist eher keine gute Idee, in Dgv-Zeilen drin rumzuhühnern.
    Die Dgv-Zeilen gehören dem Dgv, und man kann nicht wissen, wann es die erneuert. ZB wenn du die 3. Row.Visible.False gemacht hast, und jemand klickst auf einen Spalten-Header, um umzusortieren - welcher Datensatz wird dnn in der 3. Zeile nicht angezeigt?
    Ansonsten gehe ich davon aus, dass du BindingSources verwendest. Bitte bestätige das oder verneine - nicht ignorieren!
    BindingSources haben eine Property Filter, und deren KönigsDisziplin ist, unerwünschte Datensätze auszufiltern.
    Ein einfaches, aber verblüffend mächtiges Instrument - habich Tut zu gemacht: DataExpressions: Filter und berechnete Spalten im Dataset.
    Damit in Zusammenhang stehen auch die "berechneten Spalten" - aber musste dich erstmal nicht drum kümmern.

    Wie gesagt: Im Dgv herumhühnern - sowas tut man besser nicht.

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

    ErfinderDesRades schrieb:

    Ansonsten gehe ich davon aus, dass du BindingSources verwendest. Bitte bestätige das oder verneine - nicht ignorieren!

    Die Daten liegen in einer Sqlite-Datenbank und werden ins DGV geladen. Eine Aktualisierung der Daten erfolgt bei einem Neueintrag oder bei einem Datenupdate.
    Ansonsten soll das DGV einfach nur die Daten anzeigen oder eben die genannten Zeilen ausblenden.
    Mehr muss es eigentlich nicht können.
    Ok - das heisst wohl: "Nein, BindingSource ist mir unbekannt."
    Erstaunlich, weil normal, wenn man DataAdapter verwendet, erzeugt VisualStudio BindingSources automatisch, wenn man seine Datagridviews im Form-Designer gestaltet.
    Aber egal - du hast scheints eine Vorgehensweise gewählt, wo man mit BindingSources nicht in Berührung kommt.
    Ja, scheint wirklich, dasses der hinbekommt, an Bindingsources vorbei zu programmieren.
    Alles schön bunt, aber kein Databinding nirgends.
    Aber grosses Kompliment an dich!
    Nur von gugge diese Video ohne Worte etwas aufbauen was läuft - aussergewöhnlich :thumbup:

    Nu gugge aber auch mal diese Vids: vier Views-Videos
    Uralt, schlechte Bildqualität, keine Musik.
    Aber dafür mit schriftlichen und verbalen Erklärungen, sowie den BeispielSources.
    Allerdings wird da nur Databinding gezeigt - mit Sqlite fuchtel ich da nicht herum.
    Aber es gibt dort auch weiterführende Links zum Anschluss von Datenbanken.
    Ich rate aber immer erstmal davon ab, weil bis zu 20000 Datensätzen ist dieselbe Datenverarbeitung ohne Datenbank performanter, resourcenschonender, unabhängig von Zusatz-Installationen, einfacher zu warten und zu verteilen.
    Und 20000 Datensätze muss man erstmal zusammenkriegen.
    Und dann(!) kann man eine DB hinterlegen.
    Nicht vorher - verfrüht quasi: wo man noch kaum eine Ahnung hat.

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

    Danke für Dein Feedback und Deine Hinweise!

    Ich werde mich da mal reinlesen. Ist zwar ärgerlich, da der jetzige Aufbau scheinbar eben falsch und somit für die Katz ist aber was solls.
    Mal schauen wie ich das, mit meinen mageren Kenntnissen und nach Studium der Links, hinbekomme.

    MfG Madde