DataGridView durchsuchen

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 26 Antworten in diesem Thema. Der letzte Beitrag () ist von Luckyhoelm.

    DataGridView durchsuchen

    Hallo Community,

    ich habe ein Problem bei dem ich einfach keine Lösung finde.
    Mit einem Arduino und einem RFID Leser lese ich meine Karte ein
    und gebe den Code der Karte über die Serielle Schnittstelle aus.
    In meiner Form habe ich ein DataGridView mit fünf Spalten: Name, Kartennummer,
    Tür1, Tür2, Tür3. Nun möchte ich die Kartennummer welche bereits in einer
    Variable vorhanden ist im DGV suchen und dann den Inhalt des Feldes daneben haben.
    Also z.B. wenn er im DGV die Kartennummer findet soll er mir den dazugehörigen
    Wert aus Spalte Tür1 geben.

    Ich hoffe ihr könnt mir weiter Helfen, ich sitze den ganzen Abend schon dran :S



    *Topic verschoben*

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()

    Hi,
    das kommt drauf an wie deine Daten ins DGV kommen. Benutzt Du ein DataSet? Dann könntest Du in der DataSet-Klasse eine Klasse für Deine Tabelle erstellen und darin eine Function die dir den Wert aus Tür1 zurück gibt.

    VB.NET-Quellcode

    1. ​Partitial Class DeinDataSet
    2. Partitial Class DeineSataTable
    3. Public Funktion GetDoor1(search As String) as String
    4. Return Me.First(Function(rw) rw.Name = search).Tür1
    5. End Function
    6. End Class
    7. End Class
    "Hier könnte Ihre Werbung stehen..."
    Wenn du das unbedingt direkt im Grid machen möchte, kannst du mit ner Schleife alle Zeilen der Spalte Kartennummer durchgehen und mit der gescannten Nummer vergleichen. Hast du einen Treffer gelandet weißt du die Zeile und nimmst dort den Wert von Tür1.

    So in der Richtung:
    For Each row As DataGridViewRow In DataGridView1.Rows
    'hier prüfen ob Kartennummern übereinstimmen
    Next

    Üblicherweise hat man die Daten in ner Datenbank und ruft diese dann einfach per "(...) WHERE Kartennummer = GescannteKartennummer" ab. Schätze du nimmst das DataGrid nur zu Test-/Übungszwecken ...
    "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 schrieb:

    Ist dein DGV an eine Tabelle gebunden?


    Aktuell nicht, ich füge (noch) die Namen mit DataGridView1.Rows.Add hinzu. Später soll das ganze über eine Access Datenbank auf dem Server laufen.
    Ich hatte schon mal daran gedacht eine Datenbank dafür zu erstellen, ich habe aber leider zu wenig Ahnung von Datenbanken.

    mrMo schrieb:

    Schätze du nimmst das DataGrid nur zum Test-/Übungszwecken ...


    Ich nutze es um im Programm anzuzeigen, welche Karten bereits registriert sind (eigentlich). Ich sehe schon, ich brauche eine Datenbank...

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

    Luckyhoelm schrieb:

    Später soll das ganze über eine Access Datenbank auf dem Server laufen.
    Der Weg ist schon vernünftig, dass du dich erst am Schluss für eine DB entscheidest. Ob du dann überhaupt eine benötigst, zeigt dir der Datenumfang. Man kann locker mit einer .XML viele Daten halten. Kommt darauf an, welche Erwartungen (MultiUser etc.) man sich von einer Datenhaltung vorstellt.
    Du kannst dir zuerst einmal über das Datenmodel Gedanken machen, wie es aufgebaut sein soll, damit es deiner erwarteten Funktionsweise entspricht...
    Anbei einige Verlinkungen von versch. Tut's von @ErfinderDesRades wie man da am besten vorgehen kann:
    Daten laden, speichern, verarbeiten - einfachste Variante
    die vier Views auf Video
    codeproject.com/Articles/1030969/Relational-Datamodel
    typisierter Db-Zugriff mit Connectoren
    @VB1963

    Ich habe es nun geschafft, das die Daten in einem DataSet und in einer .xml Datei gespeichert werden und beim
    Start auch wieder eingelesen werden (Danke für die Hilfe bis hierhin). Ich müsste nur in dem DataSet nach der
    Kartennummer suchen und abfragen ob
    in dem Feld daneben True oder False steht. Dabei bräuchte ich noch ein wenig Hilfe.
    Hi,
    ich würd es so machen, wie ich in #3 geschrieben habe.
    Rechte Maustaste auf deine Dataset.xsd Datei -> Code anzeigen
    Dort dann eine Partitial Class deiner Datatabel anlegen und die obige Function rein kopieren.
    Dann kannst Du mit

    VB.NET-Quellcode

    1. If DeinDataset.DeineDataTable.GetDoor1("Kartennummer") = True Then
    deine Tür1 abfragen.
    "Hier könnte Ihre Werbung stehen..."
    @MichaHo

    Ich habe deinen Vorschlag eingebaut, allerdings wirft er mir beim einlesen der Karten
    den Fehler "System.InvalidOperationException" aus.

    Ich weiß nicht, ob es hilft, aber hier ist mal der Code für die Abfragen....


    Quellcode

    1. Private Sub RichTextBox1_TextChanged(sender As Object, e As EventArgs) Handles RichTextBox1.TextChanged
    2. abfragen()
    3. End Sub
    4. Private Sub abfragen()
    5. If DataSet1.DataTable1.GetDoor1(abfrage) = True Then
    6. SerialPort1.Write("a" & vbCr)
    7. abfrage = ""
    8. Else
    9. SerialPort1.Write("b" & vbCr)
    10. abfrage = ""
    11. End If
    12. End Sub



    In der RichTextBox1 stehen die gescannten Kartennummern die der Scanner auswirft
    und in abfragen das was er Senden soll, wenn die Karte durch die Tür darf. (a: Tür offen, b: Tür zu)

    Luckyhoelm schrieb:

    Also z.B. wenn er im DGV die Kartennummer findet soll er mir den dazugehörigen
    Wert aus Spalte Tür1 geben.

    Ich denke, da kommst du mit einfachen LINQ aus...

    VB.NET-Quellcode

    1. Dim Tuer1 = (From rw In DataSet1.DataTable1 Where rw.Kartennummer = deinegewünschteKartennummer Select rw.Tuer1).FirstOrDefault

    Du solltest dir eine ordentliche Benamung deines DS und deiner Tabelle überlegen. Weiters sollte man Umlaute in der Benamung vermeiden...
    In Tuer1 steht dann also entweder True oder False, richtig?

    Tuer1 bleibt leer.


    MichaHo schrieb:

    Ist denn die Spalte Tür1 eine Boolche Spalte oder String?


    Es war gerade noch auf String (im DataSet) versuche es mal mit System.Boolean

    EDIT: Geht auch nicht: Die Sequenz enthält kein übereinstimmendes Element. (Kartennummer ist aber in der Tabelle)


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

    Hast du mal versucht, die Kartennummer direkt in die Abfrage von @VB1963 rein zu kopieren und bei der Abfrage von Tür1 das Ergebnis im Haltepunkt nachzuschauen?
    ich vermute, die Kartennummer wird nicht richtig übergeben.
    "Hier könnte Ihre Werbung stehen..."