DataSet filtern nach ID

  • VB.NET

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    DataSet filtern nach ID

    Hallo Leute,

    ich brauche Eure Hilfe, da ich einfach nicht mehr weiter komme!
    Ich habe eine DataSet mit einer Tabelle names "Titel" (siehe Bild1)

    Diese Tabelle ist gefüllt mit über 8000 Titel ...

    Was jetzt mein Problem ist
    1. möchte ich gerne alle Daten über den Titel mit der "ID" = "386" herausfinden
    2. möchte ich gerne alle Titel die im "titel" das Wort "the" enthalten in einer Listview anzeigen lassen (Stichwortsuche)


    Zurzeit mache ich das so:

    Quellcode

    1. Dim tb = MediaData1.Titel
    2. For Each rw In tb
    3. If rw.ID = 386 Then
    4. MsgBox(rw.titel)
    5. End If
    6. Next

    Aber bei über 8000 Titel dauert das einfach Ewigkeiten

    Von MySQL kenne ich das so :

    SQL-Abfrage

    1. SELECT * FROM Titel WHERE ID = 386

    geht das auch irgendwie in VB?


    Vielen Dank schon mal !
    Bilder
    • Bild1.PNG

      5,34 kB, 202×281, 179 mal angesehen
    ein Tabelle im Dataset kann man mit .Select druchsuchen. Das .Select steht im prinzip für "SELECT * From DieseTabelle WHERE"
    in deinem Fall wäre das ungefähr: Titel.Select("ID = 386")
    There is no CLOUD - just other people's computers

    Q: Why do JAVA developers wear glasses?
    A: Because they can't C#

    Daily prayer:
    "Dear Lord, grand me the strength not to kill any stupid people today and please grant me the ability to punch them in the face over standard TCP/IP."
    Super Danke!

    Hab das erste Problem jetzt so gelöst:

    Quellcode

    1. ​Dim table As DataTable = MediaData1.Titel
    2. Dim foundRows() As DataRow
    3. foundRows = table.Select("ID = 368")
    4. MsgBox(foundRows(0)(1))


    Geht das Ganze jetzt auch mit LIKE ?
    auch das kenn ich in MySQL wieder so:

    Quellcode

    1. ​SELECT * FROM Titel WHERE titel LIKE '%the%'

    MADI schrieb:

    1. möchte ich gerne alle Daten über den Titel mit der "ID" = "386" herausfinden

    VB.NET-Quellcode

    1. Dim rws = From t In MediaData1.Titel Where t.ID=368
    2. If rws.Count>0 Then
    3. MessageBox.Show(rws(0).titel) 'oder was du sonst willst
    4. End If


    MADI schrieb:

    2. möchte ich gerne alle Titel die im "titel" das Wort "the" enthalten in einer Listview anzeigen lassen (Stichwortsuche)

    VB.NET-Quellcode

    1. Dim titles=From t in MediaData1.Titel Where t.titel LIKE "*the*" Select t.titel

    ListView ist aber schlecht, weil sie kein DataSource hat. Nimm ListBox und dann:

    VB.NET-Quellcode

    1. ListBox.DataSource=titles.ToList


    Das mit Select("ID=386") ist untypisiert, also falsch.
    @MADI Schau dir mal DataView.RowFilter Property an.

    Bzw. was dir wohl eher weiter hilft wäre dies csharp-examples.net/dataview-rowfilter/.

    C#-Quellcode

    1. // operator AND has precedence over OR operator, parenthesis are needed
    2. dataView.RowFilter = "City = 'Tokyo' AND (Age < 20 OR Age > 60)";
    Abgesehen davon ist dein Datenmodell falsch. Ein Titel hat zwar einen Interpret und ein Album, aber ein Interpret kann mehrere Titel und mehrere Alben haben, sowie ein Album mehrere Titel hat. Du brauchst also eine Tabelle "Titel", eine "Album" und eine "Interpret", in "Titel" sind dann nur IDs von Album und Interpret...
    sehr richtiger Hinweis, das mit dem Datenmodell. Und sind wir malwieder beim KardinalFehler beim Datenbänkerei-Einstieg: Die Leuts stürzen sich auf die Datenbanken, bevor sie ühaupt wissen, wie man eine Datengetriebene Oberfläche erstellt. Datenbänkerei-Einstieg, vier Views-Videos

    Und hier sogar, bevor relationale Datenmodellierung überhaupt verstanden ist: die relationale GrundIdee


    Achso - das mittm RowFilter ist natürlich richtig, und das ist natürlich auch in einer datengetriebenen Oberfläche einzusetzen: DataExpressions - eher nicht direkt mitm DataView.