Speichern mit DataGridView

  • VB.NET

Es gibt 31 Antworten in diesem Thema. Der letzte Beitrag () ist von Vatter.

    Speichern mit DataGridView

    Haii Ihr VB'ler.. :D
    ich möchte mich gerne weiterentwickeln indem ich lerne, Daten in einem DataGridView einzufügen und zu speichern, sie wieder auszulesen.
    Einen WebSpace besitze ich nicht. Wie kann ich die Daten noch speichern?

    Hier eine Beispielerklärung:

    Ich gebe den Namen "Günther" ein, im DGV werden entsprechende Einträge angezeigt, die zu dem Namen passen. Als weiteres Kriterium gebe ich den Vorname "Klaus" ein, sodass die Suche weiter eingeschränkt wird. So soll es später dann funktionieren.

    Wer kann mir in verständlicher Weise weiterhelfen?! :)
    Bilder
    • 1.JPG

      56,08 kB, 695×351, 397 mal angesehen
    Danke zunächst für deine Links @SystemUnknow :)


    So richtig bin ich jetzt nicht weiter gekommen! Ich habe mit DataTables bisher nicht gearbeitet.... Kannst du mir einen Anstoß geben, wie ich zB. Inhalt der TextBox1 in die Zeile 1/Spalte 1 eines DGV bekommen und TextBox2 in die Zeile 1/Spalte 2 ?!
    Ein DataGridView ist ja lediglich zum Darstellen von Daten da.
    Verwende für das Behandeln/Bearbeiten von Daten ein DataSet und weise dem DGV ein DataTable zu.
    (via .DataSource)

    Speichern/Laden:

    VB.NET-Quellcode

    1. DataSet.SaveXML(..)
    2. DataSet.LoadXML(..)


    Hinzufügen von Rows:

    VB.NET-Quellcode

    1. DataTable.Rows.Add({args})


    Für dein Problem mit dem Suchen/Filtern gibt es meines Erachtens noch keine hauseigene Funktion im DGV.
    Musst du dir ggf. etwas mit LINEQ basteln.

    Liebe Grüße
    /nicht getestet

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

    rotherford schrieb:

    Für dein Problem mit dem Suchen/Filtern gibt es meines Erachtens noch keine hauseigene Funktion im DGV.
    Musst du dir ggf. etwas mit LINEQ basteln.
    Danke für den Hinweis. Ich besitze keinen Server, sodass eine ext. Speicherung der Daten nicht zutreffen wird. Wie kann ich meine Daten noch speichern? In eine .txt-Datei finde ich zu unsicher und aufwendig :D
    Ein kleiner Crashkurs:

    -Du gehst in den Designer und ziehst ein DataSet aus der Toolbox auf deine Form.
    -Selektier das DataSet und Öffne die Property "Tables".

    -Füge ein Table hinzu.
    Gib dem Table den Namen "Main".

    -Jetzt öffnest du bei deinem frisch erstellten Table die Property "Columns" od. "Headers" (Bin mir nicht sicher)
    -Füge deine 'Tabellenköpfe' (bzw. Columns) hinzu.

    Im @OnLoad Ereignis deiner Form (od. ApplicationEvents)

    VB.NET-Quellcode

    1. Main.ReadXML("Data.xml")


    Im Closing-Event das Selbe - nur .WriteXML(..).

    Um Daten hinzuzufügen:

    VB.NET-Quellcode

    1. 'Achte darauf, dass die Anzahl der Obj. der Anzahl der Columns entsprechen.
    2. Main.Rows.Add({Objects})

    Siehe auch:
    [VB.NET] Daten laden, speichern, verarbeiten - einfachste Variante

    Hoffe das hat geholfen.
    Liebe Grüße
    /nicht getestet

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „rotherford“ ()

    Danke @rotherford für deinen Crashkurs! :)

    Ich bin jetzt ein bisschen verwirrt, ich hoffe jedoch, dass du mich aufklären wirst! :)

    Ich dachte, dass ich das DataSet über "Neues Element hinzufügren" & "DataSet.xsd" hinzufügen zu muss, nicht etwa über die ToolBox. Ist es vielleicht der selbe Weg/die gleiche Variante?


    Was ich bisher gemacht habe:
    Ich habe nun das DataSet aus der ToolBox genommen, bin auf Tables und
    habe ein Member "Main" hinzugefügt. In dessen Eigenschaften bin ich auf
    Columns gegangen und habe die Member "Name" & "Vorname"
    hinzugefügt.
    Ist doch schon mal richtig! ;)
    Nimm einfach das aus der Toolbox:

    rotherford schrieb:

    Main.LoadXML("Data.xml")

    Jetzt musst du nur noch gucken, dass das DataTable gespeichert/geladen wird.

    Und natürlich Rows (Spalten) hinzufügen.

    Liebe Grüße
    /nicht getestet
    Ah nice :D

    Wo schreibe ich denn "Main.LoadXML(Data.xml)" rein? Ins Form_Load-Event? Wenn ich das verstehe, wird die Tabelle automatisch dann beim Öffnen der Form geladen und im Closing-Event gespeichert? :)

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

    VB.NET-Quellcode

    1. @Form_Load
    2. Main.ReadXML("Data.xml")
    3. @Form_Closing
    4. Main.WriteXML("Data.xml")


    Um Daten hinzuzufügen:

    VB.NET-Quellcode

    1. Main.Rows.Add(TextBox1.Text,TextBox2.Text,CheckBox1.Checked)

    Liebe Grüße
    /nicht getestet

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

    Hm, nun habe ich mich mal daran probiert, zumindest die Table zu laden und zu speichern - jedoch ohne Erfolg.

    Ich habe ins Form_Load geschrieben,

    VB.NET-Quellcode

    1. Main.LoadXML("Data.xml")


    mit der Fehlermeldung: "LoadXML" ist kein Member von "System.Data.Data.Table"

    Mein DataGridView konnte ich also bisher mit keinem Datensatz füllen.
    :D

    ("WindowsApplication1.xml") - lautet der Name meiner Table.

    So weit - so gut! Es funktioniert ersteinmal. Wie bekomme ich denn nun die Daten in meine Table, bzw. in das DataGridView? Ich möchte schließlich mit dem SAVE-Btn. einen Eintrag anlegen, und mit dem SEARCH-Btn. suchen. Wenn ich richtig der Annahme bin, haben wir zunächst nur eine Lösung zum speichern gefunden?!? :)
    Bilder
    • 1.JPG

      37,67 kB, 482×378, 296 mal angesehen

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „FreShmaKer“ ()

    So:

    VB.NET-Quellcode

    1. @Form_Load
    2. DataGridView1.DataSource = Main
    3. @Save_Click
    4. Main.Rows.Add{NameTextBox.Text,FirstNameTextBox.Text,PhoneTextBox.Text}


    Für deine Suchen Funtion musst du mir noch sagen, nach welcher Cell gesucht werden soll (nur Name? od. Alle?)
    Soll die Row, mit dem Suchergebniss Selektiert werden?

    Liebe Grüße
    /nicht getestet
    Die Filterung wird über die Bindingsource realisiert. Diese Bindingsource wird automatisch vom Designer auf die Form gesetzt, wenn man das DGV oder eine Detailview aus dem Datenquellen-Fenster auf die Form zieht. Die Bindingsource verfügt über eine Filtereigenschaft, der man einen Filterausdruck (String) zuordnet. Der sieht dann beispielsweise so aus: "Spaltenname like 'Textbox.Text' "
    @rotherford, es wird auch nicht nur die Tabelle (bei dir Main genannt) sondern das gesamte Dataset mit ReadXML/WriteXML gespeichert bzw. geladen.
    Auch ist ein Casten der Werte für das Hinzufügen einer neuen Datarow unnötig, wenn man die vom Dataset bereitgestellten Methoden benutzt. Deswegen heißt des denn auch typisiertes Dataset. Das wandelt die Werte der Propertys selbsttätig um.
    dazu instanzierst du eine neue Datarow Dim row = DeinDataset.NewDeineTabelleRow. Hier kannst du auf die Values mit Intellisense-Unterstützung zugreifen mit row.DeinSpaltenname=xyz.

    Fiel Fergnügen

    Vatter
    :thumbsup: Seit 26.Mai 2012 Oppa! :thumbsup: