Alternative zu Dataset ? (Notizbuch)

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

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

    Alternative zu Dataset ? (Notizbuch)

    Hallo an alle,

    ich habe vor für meine Arbeit ein kleines Notizbuch zu schreiben, in dem ich schnell nach Informationen suchen kann, dafür wäre ein DataSet an sich ideal, aber nach mittlerweile einigen hundert Stunden (ja mehrere Hundert, ist ja nicht das erste Projekt in dem ein DataSet praktisch wäre) des versuchens und testens, des Tutorials welzens und dennoch scheiterns, wird das mit mir und einem DataSet wohl leider nichts (DataGridView sowohl hässlich als auch nicht das was ich suche, ettliche Komplikationen durch Databinding, keinerlei manuelle Kontrolle über die Daten (eintrag erstellen, löschen, bearbeiten usw.)) daher wollte ich mich mal erkundigen was ich benutzen könnte für :

    Kategorien anlegen, erstellen, Notizen, Bilder, Dateipfade hinzufügen und das ganze auch durchsuchen können.
    Mein aktueller Ansatz hierzu wäre die Kategorien als Ordnerstruktur anlegen und die jeweiligen Einträge als .txt File zu nutzen (alternativ .ini File), allerdings erscheint mir dies unpraktisch und ist sicherlich nicht die sauberste Umsetzung des gewünschten.

    Habt Ihr hier evtl. ein paar Vorschläge/Ideen ?

    Liebe Grüße
    AsusDK
    If Energy = Low Then
    Drink(aHugeCoffee)
    Else
    Drink(aHugeCoffeeToo)
    End If
    und wenn alles nichts hilft..... back to Basics

    nur mal so als Philosophische Antwort...

    Es gibt nichts das man nicht auch mit dem normalem Handwerkszeug lösen kann, oder?
    Wenn das Verständnis für Datasets nach einigen hundert Stunden noch nicht da ist und jemand Datsets mit einem Datagridview (wo der Namensteil View schon sagt, dass das Control zum Daten anzeigen, nicht aber zum Daten speichern taugt), dann weiß ich nicht was der OP mit Datenbanken anfangen soll. Da bekommt der OP sicher gleich jede Menge zusätzlicher Probleme. Daten und GUI zu trennen hat der OP rein vom Kopf her schon mal nicht hinbekommen.

    @asusdk: Was hält Dich den ab auch ungebunden zu arbeiten wenn es notwendig ist? Zum Ändern von Datensätzen kann man den Inhalt eines DS aus eine Query ja auch ohne Datenbindung bearbeiten. Nach Validierung schreibst Du den Inhalt dann in die DataRow.Felder zurück und bist schon fertig. Du kannst Dir alles über die GUI zusammenstellen und erts mal ist das auch ganz okay, aber es wird immer Sonderbehandlungen geben, wo man per Code was machen muss. @ErfinderDesRades hat mit den vier Views (ich bin zu Faul zum suchen jetzt) und auch an vielen anderen Stellen sehr schöne Beispiele zu streng typisierten Datasets. Oft finden sich da auch andere Perlen in seinem Code, die man eben so nicht von der GUI gezeigt bekommt.

    asusdk schrieb:

    kleines Notizbuch

    mrMo schrieb:

    Datenbank


    Ähm, das ist wohl etwas oversized oder nicht? Ne komplette Datenbank zu installieren für ein "Notizbuch"? Also SQLite oder wie diese kleinen "ToGo" Tools alle heißen, ja das wäre schon ok. Also für mich hat ne Datenbank eine Mindestmenge von keine Ahnung, je nachdem, ca. 100 000 Einträge aufwärts. Also ich meine da muss ja schon eine gewisse Datenmenge, oder komplizierte Verknüpfungen dahinter stecken um den Aufwand zu rechtfertigen oder? DataSets sind eigentlich ziemlich praktisch für sowas, die funktionieren wie eine Datenbank, sind gut optimiert, laufen im Speicher und man kann sie mit einem Befehl speichern und laden. Aber gut, ich glaube da hat jeder so seine eigene Vorstellung. :)
    @Dksksm Ja genau diese Tutorials meine ich ja, die haben mir bislang leider nicht verständlich machen können wie ich manuell an der DB arbeiten kann, er betont in diesen Tuts ja immer wieder aufs neue, das man den GUI-Teil per Databinding machen soll, spätestens hier fangen die Probleme ja an, ich möchte das Dataset, ja nur zum speichern (und lesen) der Daten verwenden, aber wie kann ich von Hand, also nur wenn ich es möchte (z.B. ich habe ein GUI, worin ich sämtliche Daten eintrage) diesen Eintrag auch anlegen, wie kann ich einen vorhandenen Bearbeiten(im Listview auswählen, öffnen daten verändern, speichern), oder eben löschen, in sämtlichen Tutorials wird auf das Databinding eingegangen, da er dieses vorgehen als einzig richtig ansieht, jedoch wir in keinem dieser bereiche erklärt wie ich das alles manuell machen kann.

    Genaueres Beispiel:
    Programmstart > liest jeden Eintrag in dem DataTable aus > Einträge werden einzeln in z.B. Listview/Box whatever angezeigt > klicke ich auf einen Eintrag werden die Daten aus eben diesem Eintrag geladen/angezeigt, klicke ich auf bearbeiten, geht ein neues Fenster auf, ich verändere dort Daten, wenn ich jetzt auf Speichern klicke werden die Daten gespeichert, selbes Prinzip für hinzufügen usw.

    wie ich dies alles manuell lösen kann ohne das Bindinggedöns, finde ich einfach nirgends....
    If Energy = Low Then
    Drink(aHugeCoffee)
    Else
    Drink(aHugeCoffeeToo)
    End If

    Bluespide schrieb:

    das ist wohl etwas oversized oder nicht? Ne komplette Datenbank zu installieren für ein "Notizbuch"?

    Access? Muss ja nicht gleich nen SQL Server sein...
    "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
    Also @asusdk, dann hast Du nicht alles angeguckt: Daten laden, speichern, verarbeiten - einfachste Variante

    Da steht genau, wie du einen Datensatz aus eine Tabelle aus der Bindingsource puhlst.
    In dem Beipsiel holt @ErfinderDesRades den aktuellen Datensatz der Tabelle Person aus der Bindingsource.

    VB.NET-Quellcode

    1. Dim person = DirectCast(DirectCast(PersonBindingSource.Current, DataRowView).Row, PersonRow)
    2. With person
    3. MessageBox.Show(String.Format("{1} {2}{0}Geb: {3:d}{0}Tel: {4}", Lf, .FirstName, .Name, .Birth, .Mobil))
    4. End With


    Du kannst auch Textboxen jetzt den Inhalt der Felder (was eine Spalte im DS-Designer ist) zuweisen und vom Benutzer bearbeiten lassen.
    Als gedachtes Beispiel, Du wählst den Datensatz über ein DGV oder einer ComboBox (jeweils an die Bindingsource gebunden) aus und hast einen Button "Edit".
    In der Funktion des Buttons holst Du den Datensatz aus der bs (Bindingsource) und übergibst sie z.B. Textboxen NUDs etc.
    Wenn der Benutzer auf den Button "Speichern" drückt, machst Du eine Prüfung der Daten und schreibst sie nach erfolgreichem Bestehen der Prüfung zurück.

    In etwas so (Sorry wenn das nicht wie VB.Net aussehen sollte):
    tbFName.Text = person.Firstname
    tbNName.Text = person.Name
    tbTelMob = person.Mobil

    und nach dem prüfen:
    person.Firstname = tbFName.Text
    person.Name = tbNName.Text
    person.Mobil = tbTelMob

    Es läßt sich übrigens alles hier im Forum finden, wirklich alles. Was VB.Net angeht ist es die allerbeste Quelle. Nur musst Du mitdenken, ausprobieren, experimentieren. Erst dann lernst Du was.
    Wenn Du im Web suchst, dann sich nach C# und nicht nach VB.Net. Die Syntax ist nicht identisch aber es ist alles leicht in die jeweils andere Sprache umzusetzen.
    @Dksksm ja diese tutorials habe ich auch gelesen...

    ________Beispiel zum laden_________
    Programmstart
    hdds (HelpdeskDataSet) . readxml(".filename")
    For Each r As HDDS.HDDTRow In Hdds1.HDDT
    Next
    'die listbox ist per databinding verbunden und liest bei Programmstart auch alle einträge aus
    ________Beispiel zum laden_________(das funktioniert auch bei programmstart)

    in form2 erstelle ich einen neuen eintrag

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    2. Me.Validate()
    3. Hdds1.HDDT.AddHDDTRow(TextBox1.Text, RichTextBox1.Text)
    4. Hdds1.WriteXml("db.xml")
    5. Me.Close()
    6. End Sub


    aber auf form1 erscheint der neue eintrag nicht, auch ein Listbox.refresh bewirkt hier nix, starte ich das programm neu, dann ist der eintrag aber da.


    Und das ist nur eines von vielen Problemchen im Umgang mit datasets.....

    (ja ich weiss daas man seine Controls besser benennen sollte, bei richtigen Projekten mache ich dies auch, aber hier handelt es sich ja nur um "Tests")
    If Energy = Low Then
    Drink(aHugeCoffee)
    Else
    Drink(aHugeCoffeeToo)
    End If
    Laaangsam. Such mal nach Highlander-Prinzip. Wie EdR immer zu schreiben pflegt: Es kann nur eines geben. Wenn Form1 eine tDS-Instanz hat und Form2 auch. Dann sind das zwar die gleichen, aber nicht die selben. Form2 hat ein eigenständiges tDS mit eigenen DataTables und eigenen Daten. Das ist die Tücke. Man muss dafür sorgen, dass es dieselben Daten werden. Ich such mal da nen Thread ...; da, Lesefutter :P

    ##########

    oder hier ab Post#20
    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.

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

    Oder hier - aus meim Tut: Form-übergreifendes Databinding

    (Also das Problem liegt eiglich nicht am Dataset - folglich wird eine Alternative zum Dataset das auch nicht lösen.
    Vlt. ist auch unglücklich, dass du gleich mit mehreren Forms angefangen hast - zum Einarbeiten mit Dataset einfacher ist, erstmal nur 1 Form zu bemühen)
    @VaporiZed und @ErfinderDesRades

    Ich bin schon mal ein gutes stück weiter gekommen !!! habe es jetzt noch einmal mit Databinding versucht und bekomme es jetzt tatsächlich ganz gut zum laufen (das feier ich grad hart :P), aber.. ich verstehe leider noch nicht wie das mit beziehungen funktioniert, im Prinzip will ich links die category wählen und dann soll mir rechts nur angezeigt werden was auch dieser category zugeordnet wurde... aber da versaag ich grad wieder auf ganzer linie...

    mag evtl. jemand drüber schauen ob ich die beziehung faalsch eingestellt habe oder wo mein fehler liegt... ich habe das Projekt mal angehängt

    LG
    Dateien
    If Energy = Low Then
    Drink(aHugeCoffee)
    Else
    Drink(aHugeCoffeeToo)
    End If
    In Post 11 hatte ich den Link zu der Tut-Reihe auch gegeben, wenn auch nicht explizit auf Formübergreifendes Binding, weil das gar nicht zur Debatte stand.
    Aaaaaber, in #12 sagte der OP er hätte diesen Tut auch schon gelesen. Ich weiß nicht was man ihm noch sagen soll. In deinen Tuts findet man locker 90% von allem was es über Datasets zu wissen gibt. Und das gilt für VB.Net und C#. Du kannst das Net durchflöhen auf deutsch oder englisch. Mehr und besser gibt es nicht. Und das schöne ist, es ist auf deutsch und in diesem Forum, alles da. Deine alten Beiträge in früheren Foren und das Tut auf CodeProject.com gar nicht mitgerechnet.
    ich hab mal den ParentChildView gradegezogen - in den Daten fehlten die ForeignKey-Values - wie auch immer du das hingekriegt hast.

    Das mit den Buttons - da weiß ich nicht, was die sollen - Button1 - Button6 sowie Form2 - Form3 - das ist zu nichtssagend, als das man da iwie einen Sinn erkenntete und was dran-coden könnte.
    Versuchs mal mit einer etwas sprechenderen Benamung - das wirkt of Wunder.
    Dateien
    • HD Notes200.zip

      (32,01 kB, 125 mal heruntergeladen, zuletzt: )
    @ErfinderDesRades vielen Dank das du dir die Mühe gemacht hast, aber, was genau hast du gemacht,ich habe doch gar kein Childfenster oder was meinst du ? Welche Keys haben gefehlt, mehr als Primärschlüssel festlegen habe ich nicht gemacht ? Habe auch mal meine Version, mit deiner Verglichen (Das DataSet, Die Relation) und keinerlei Unterschied feststellen können

    und funktionieren tut jetzt leider auch nicht mehr als davor, stattdessen, wenn ich jetzt eine Notiz anlegen will, erstellt er diese in den Categorys usw.
    Ich vermute mal das es auch aufgrund der Bezeichungen für dich sehr schwer zu lesen war, (ja ich mache leider noch den Fehler bei Testprojekten nicht zu bennennen)
    ich hab mal, alle Bezeichnungen nachgetragen, und unnötigen Code rausgeschmissen(verwende ja immer meine Vorlagen, so dass ich einige Funktionen gleich zur Verfügung habe)

    Evtl. magst du mir ja nochmal die Ehre erweisen und da drüber gucken, mit jetzt ja hoffentlich Problemfrei lesbaaren Code =)

    LG
    Dateien
    If Energy = Low Then
    Drink(aHugeCoffee)
    Else
    Drink(aHugeCoffeeToo)
    End If
    Ich hab auf Form1 die Databindings so gebastelt, dass sich ein ParentChild-View ergibt, sowie die Richtextbox als DetailView angeschlossen ist, die ein Detail des untergeordneten angewählten Datensatzes anzeigt.
    Zusätzlich hab ich in den Daten ForeignKey-Werte zugefügt, damit die Daten ühaupt verknüpft sind.

    Ahhh! Die DatenDatei ist im Zip nicht enthalten, sorry - also im Anhang.

    Für das annere erst heut abend zeit.
    Dateien
    • db.xml

      (761 Byte, 157 mal heruntergeladen, zuletzt: )
    Hmm ok das ist eine datenbankfile, aber was ändert das denn an dem Programm ? diese file sollte ja von selbst erstellt werden wenn das DataSet korrekt arbeitet oder nicht ?
    Und kein Problem wenn du Zeit hast hast du zeit wenn nicht dann eben nicht :P
    If Energy = Low Then
    Drink(aHugeCoffee)
    Else
    Drink(aHugeCoffeeToo)
    End If