Suche in Datagridview

  • VB.NET
  • .NET (FX) 4.0

Es gibt 59 Antworten in diesem Thema. Der letzte Beitrag () ist von Shadow336.

    Shadow336 schrieb:

    IDMitarbeiterSchlüsselAbgeholtAbgegeben
    1Testperson 1Lager 1Ja
    2Testperson 2Lager 2ja
    3Testperson 1Lager 1
    Ja
    4




    Wie aus Tabelle zu erkennen ist, hatte Testperson 2 den Schlüssel für Lager 2 abgeholt, aber noch nicht abgegeben. So, Wenn ich Deinen Code ausführe, dann werden auch abgeholte Schlüssel angezeigt, die schon wieder zurückgegeben sind! Ich möchte mir aber lediglich die Schlüssel anzeigen lassen, die noch unterwegs sind!

    For Each row As DataRow in DataTable.Rows
    MessageBox.Show(row("Abgeholt").ToString)
    Next


    Lade nur die Datensätze ins Grid, die Abgeholt sind. Oder mache in der Schleife eine Prüfung "Wenn Abgeholt dann".
    "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
    @VB1963 & @Shadow336: Existiert in dem Projekt denn ein DataSet, in das die Daten kommen und mit dem das DGV verbunden ist?
    Thema LINQ:
    Das Folgende setzt zwar voraus, dass ein typisiertes DataSet mit der genannten DataTable existiert, aber die Namen lassen sich ja anpassen. Und eben, dass es eine Tabellenspalte namens "Abgeholt" vom Typ System.Boolean gibt.
    Dim TestpersonenDieIhrenSchluesselNochNichtAbgegebenHaben = DeinDataSet.DeineDataTable.Where(Function(a) a.Abgeholt)
    man könnte auch schreiben: .Where(Function(a) a.Abgeholt = True); ist zwar redudant, aber ggf. besser zu lesen/verstehen.

    Das ergibt eine Auflistung von allen Tabellenzeilen (= allen "Datensätzen" bestehend aus ID, Mitarbeiter, Abgeholt und Abgegeben), in denen ausschließlich "Abgeholt" auf True gesetzt ist.
    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.
    Ein DataTable ist kein DataGrid. Hier mal ein kleines Demo Projekt, evtl. hilf dir das weiter.

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Option Strict On
    2. Public Class Form1
    3. Dim dt As DataTable
    4. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    5. dtg_schluessel.DataSource = GetDataFromDataBase()
    6. For Each row As DataRow In dt.Rows
    7. If (Convert.ToBoolean(row("Abgegeben"))) Then
    8. MessageBox.Show("Schlüssel für " & row("Schlüssel").ToString & " wurde abgegeben von " & row("Mitarbeiter").ToString)
    9. End If
    10. Next
    11. End Sub
    12. Private Function GetDataFromDataBase() As DataTable
    13. 'Daten aus der Datenbank in ein DataTable laden
    14. 'Hier von Hand da keine DB zur Hand
    15. dt = New DataTable("Schlüssel")
    16. dt.Columns.Add(New DataColumn("ID", GetType(Integer)))
    17. dt.Columns.Add(New DataColumn("Mitarbeiter", GetType(String)))
    18. dt.Columns.Add(New DataColumn("Schlüssel", GetType(String)))
    19. dt.Columns.Add(New DataColumn("Abgeholt", GetType(Boolean)))
    20. dt.Columns.Add(New DataColumn("Abgegeben", GetType(Boolean)))
    21. dt.Rows.Add(1, "Max Mustermann", "Lager1", True, False)
    22. dt.Rows.Add(2, "Petra Müller", "Lager2", False, True)
    23. dt.Rows.Add(3, "Frank Becker", "Lager1", True, True)
    24. Return dt
    25. End Function
    26. End Class

    "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
    @mrMo, zunächst vielen Dank dafür! Die Ausführung Deines „Demo-Projekt“ ergibt eine Auflistung der Schlüssel, die schon von Mitarbeiter abgegeben sind.
    Allerdings sollte eigentlich durch die Abfrage die Schlüssel angezeigt werden, die abgeholt aber noch nicht abgegeben sind.
    Noch eine Frage, ich habe die Daten aus der Datenbank in ein DataGridView Table geladen. Ist es korrekt? Oder sollte ich die in ein DataTable laden?

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

    Shadow336 schrieb:

    Die Ausführung Deines „Demo-Projekt“ ergibt eine Auflistung der Schlüssel, die schon von Mitarbeiter abgegeben sind. Allerdings sollte eigentlich durch die Abfrage die Schlüssel angezeigt werden, die abgeholt aber noch nicht abgegeben sind. Noch eine Frage, ich habe die Daten aus der Datenbank in ein DataGridView Table geladen. Ist es korrekt? Oder sollte ich die in ein DataTable laden?


    Ja, ist doof das der Code nicht genau so ist wie du ihn brauchst, ne? Den muss man anpassen :D
    Die letzten Schritte muss du ohne mich gehen. Hier kurz nochmal der Ablauf zum gewünschten Ergebnis:

    1. Daten aus der Datenbank in eine Datatable(!) laden

    VB.NET-Quellcode

    1. Dim dt As DataTable = DeineMethodeZumLadenDerDatenInDataTable()


    2. DataTable als DataSource an dein DataGrid hängen

    VB.NET-Quellcode

    1. DeinDataGrid.DataSource = DeineDataTable


    3. per Schleife durch Zeilen der DataTable (NICHT DataGrid) gehen

    VB.NET-Quellcode

    1. For Each row As DataRow In DeineDataTable.Rows
    2. ' Hier passiert dann die Magie mit dem If und so Sachen
    3. Next


    4. In der Schleife die Werte der benötigten Spalte ermitteln

    VB.NET-Quellcode

    1. Dim s As String = row(NameDerSpalte).toString()

    -> Achtung: Datentypen beachten

    5. Deine If Anweisung in der Schleife machen

    VB.NET-Quellcode

    1. If (s = "foo" )Then
    2. 'Irgend etwas machen
    3. End If


    P.s. Die Varaiante auf die @VB1963 heraus möchte, wäre die sauberste/eleganteste Lösung. Willst du darauf nicht eingehen?
    "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
    hier mal eine Lösung mit typDataset

    Das Datenmodell geht aber anders als bei dir.
    Bei mir gibts Schlüssel, Mitargbeiter und eine Zuordnungstabelle, die aussagt, welcher Schlüssel bei welchem Mitarbeiter ist.
    Ganz einfach - oder?
    Mittels Comboboxen im Datagridview kann man einstellen, welcher Schlüssel bei wem ist.

    Der Mitarbeiter "Kerberos" gilt als Verwalter der Schlüssel.
    Und dann kann man einen Filter setzen, sodass nurnoch alle Schlüssel angezeigt werden, die nicht bei Kerberos sind - das wäre, was bei dir "abgeholt, aber nicht abgegeben" wäre.
    Jo - feddich.
    Dateien
    @ErfinderDesRades, Deine Lösung ist echt sehr einfach sowie geschickt und elegant! Ein dickes Kompliment!
    Dennoch geht’s bei meinem Projekt um „Connect & Query a Microsoft Access Database in VB.NET“.
    Das Ziel des Projektes ist, dass am Ende des Dienstschlusses die nicht abgegebenen Schlüssel per Schleife in einer MessageBox angezeigt werden sollten.
    @Shadow336 Jetzt hast du nen Fahrplan von mir und nen ganzen Bus von EDR. Welchen Weg wirst du jetzt gehen? Weil das sind 2 komplett unterschiedliche Lösungsansätze. Bringt ja nix wenn ich dir hier Zeug beschreibe, du aber mit dem typ. DataSet arbeitest... oder umgekehrt.

    Sag uns bitte kurz wie du weiter machen möchtest und an welcher Stelle du nun hängst.
    "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
    @mrMo, ich habe in meiner letzten Post erneut erwähnt, was genau das Ziel des Projektes sein sollte.
    Ich arbeite gerade an Deinem Code, jedoch bin am Überlegen, wie die Schleife durch Zeilen der DataTable (NICHT DataGrid) gehen soll.
    Ich erstellte halt lediglich DataGrid und kein DataTable! Siehe Datenmodel

    Im Anhang sende ich JFI das Datenmodel.

    PS. sorry, wenn das Ganze etwas dilettantisch von mir dargestellt wird!
    Dateien
    • Datenmodel.pdf

      (161,59 kB, 111 mal heruntergeladen, zuletzt: )

    Shadow336 schrieb:

    Das Ziel des Projektes ist, dass am Ende des Dienstschlusses die nicht abgegebenen Schlüssel per Schleife in einer MessageBox angezeigt werden sollten.
    ist das allereinfachste:

    VB.NET-Quellcode

    1. Private Sub Report()
    2. Dim rwKerberos = LagerschluesselDts.Mitarbeiter.First(Function(rw) rw.Name = "Kerberos")
    3. Dim Ausstand = From rw In LagerschluesselDts.SchluesselMitarbeiter Where rw.RowState <> DataRowState.Deleted AndAlso rw.MitarbeiterRow IsNot rwKerberos
    4. For Each rw In Ausstand
    5. MessageBox.Show(String.Format("{0}: {1}", rw.MitarbeiterRow.Name, rw.SchluesselRow.Name))
    6. Next
    7. End Sub
    Kriegst du es hin, selbst ein zusätzliches MenuItem einzubauen, von dem aus diese Methode aufgerufen wird?

    Und gut, dass du das ansprichst, so konnte ich auch anführen, wie man Datensätze eines typDataset codeseitig verarbeitet.

    Wie mrMo sagt: Nu weisst du wie das typDataset-Busle fährt.
    Dein Ziel kann aber nur sein, Busfahrer zu werden, und das ist eine umfassende Ausbildung, die offsichtlich bei Adam + Eva anfangen muss (Einrichten des VisualStudios), alle Grundlagen der Sprache abklappern, Datenmodellierung, Databinding.
    Hier ists aufgelistet: Datenverarbeitungs-Vorraussetzungen
    Klingt viel, ist auch viel (je nachdem, wieviel davon dir bekannt ist).
    Meine Datenmodell-Erläuterung-Site ist leider abgeschaltet worden, daher musste dich durch die englische Version kämpfen: Relational Datamodel for Beginners.

    Ein wichtiger Punkt ist, dass du nicht glauben musst, du könntest iwas davon auslassen.
    Was ich dir gebastelt habe - ich wüsste jetzt kein Element des "Lehrplans", was da nicht an irgendeiner Stelle mit verbaut wäre.

    Klar gibts auch andere Wege nach Rom - aber wenn du die gehst, wirst du am Ende feststellen, dass du doch alles gelernt hast.
    Oder deine Lösungen müssen grotesk umständlich und anfällig ausfallen.

    Edit - zu deim Pdf
    Anstatt eines Pdfs mit Bildle stell doch besser das Bildle selber ein. Hilfe dazu: Inhaltlich ist zu sagen: NIcht jedes Bildle mit Kringel und Linien ist ein Datenmodell.
    Du musst wirklich die Tuts durchkauen (das englische), sonst verwendest du Begriffe falsch, und weisst dabei einfach nicht, wovon die Rede wirklich ist.

    Es ist auch garnet schwierig.
    Sondern es sind meist alles kleine Häppchen, und kann man direkt ausprobieren mit Erfolgserlebnis. Und jeder Lernschritt eröffnet die sprichwörtlichen ungeahnten Möglichkeiten - wirste sehen: Wenn man zB den Objektbrowser geschnackelt hat, hat man auf einmal eine ganz andere Sicht auf das Framework.

    Edit:

    us4711 schrieb:

    Vielleicht bin ich gerade blind, aber so kann doch der gleiche Schlüssel an mehrere Mitarbeiter ausgegeben werden?
    Jepp.
    Und besser wärs, wenn der User sich solchens enthalten würde ;)

    "Lösung" kann man mein Werk eiglich noch nicht nennen - es ist eher ein "proof-of-concept" - also zeigt, dass der Ansatzes zur Lösung des Problem geeignet ist.

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

    Shadow336 schrieb:

    Ich erstellte halt lediglich DataGrid und kein DataTable

    Bist Du denn sicher, ob wir hier überhaupt über eine V .net Programmierung reden?
    Irgendwie riecht's für mich nach Access-VBA ...
    Wenn du die Daten im DataTable hast, mache mit Punkt 2. und 3. weiter. Das hier DeineMethodeZumLadenDerDatenInDataTable() war ja nur ein Beispiel für eine Methode, welche die Daten aus der DB läd und als DataTable zurück gibt.
    "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