Strukturidee für ein DataSet

  • VB.NET

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von MrTrebron.

    Strukturidee für ein DataSet

    Hi @ all,

    wie der Name des Threads schon sagt, suche ich nach einer Strukturidee für ein Dataset, dank eurer Hilfe, komme ich mittlerweile endlich auf DataSets klar und kann diese in gewissen Zügen nutzen, jedoch scheine ich noch ein Problem damit zu haben ein DataSet richtig zu gestalten, da das ganze ja über ein DataBinding läuft kann ich ja nicht wirklich manuell auf die ganzen Daten zugreifen und muss die Struktur entsprechend erstellen, es scheitert aktuell an der Tatsache, das ich Notizen als DataTable habe, diese wiederum sind dem Table "Category" untergeordnet, jetzt versuche ich irgendwie auch eine "Alle" Category anzulegen, in welchem mir alle Notizen angezeigt werden, nicht nur diejenigen welche der aktuell angewählten Kategorie angehören,

    Kann man also von dem Table "Notizen", quasi eine Kopie erstellen, so dass ich sämtliche Notizen auch in einem Table habe der nicht den Categorys untergeordnet ist und ich quasi nur das Binding umstöpsle ?
    Oder ja, ich weiss nicht mal wie ich diese Frage entsprechend stellen soll ^^

    Im Prinzip passt alles ausser eben das ich dann die notizen "nur" per Kategorie habe, nicht aber alle Notizen anzeigen kann...

    Habt ihr da irgendwelche Ideen/Ansätze

    p.S.(es sei denn Ihr hättet eine bessere Idee was man als "NotizBuch" nutzen kann, bei welchem ich im endeffekt Kategorien anlegen kann, diesem Notizen unterordnen)

    LG Asus
    If Energy = Low Then
    Drink(aHugeCoffee)
    Else
    Drink(aHugeCoffeeToo)
    End If
    Ein Bild Deines tDS-Designers wäre praktisch. Aber: Du hast 2 DataTables. Notizen und Kategorie. Eine Notiz gehört zu einer Kategorie, d.h. die Notiz-Tabelle ist der Kategorie-Tabelle untergeordnet. Wenn Du nun alle Notizen anzeigen lassen willst: Na dann nimm eben alle Einträge der Notizentabelle her und ignorier die Kategorie-Tabelle: Dim AllDeineNotiztabellenzeilen = DeinTds.Notizen
    Wenn Du nun alle Notiztexte in einer Liste haben willst: Dim ListOfRemarks = DeinTds.Notizen.Select(Function(x) x.Text).ToList
    Setzt voraus, dass die Notizen-Tabelle eine Spalte "Text" hat, wo die jeweiligen Texte drinstehen.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Häufig von mir verwendete Abkürzungen: CEs = control elements (Labels, Buttons, DGVs, ...) und tDS (typisiertes DataSet)
    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht in den Spekulatiusmodus gehen.
    Du kannst dir ein Form bauen und dort aus dem Datenquellen die Tabelle mit den Notizen drauf ziehen, dann erstellt Dir der Designer direkt die benötigte Bindingsource. diese Tabelle kennt dann zwar immer noch die "Spalte" CategoryID, aber die kannst du ja auch auf Visible "False" stellen. So arbeitest du auch weiterhin mit Datenbindung.
    Aber du kannst grundsätzlich auch ohne Bindung arbeiten und dir Abfragen erstellen und diese als DataSource verwenden. Suche dazu mal nach den Suchbegriffen "vb.net linq dataset"

    Die Frage ist nur, ob die LINQ QUERYS überhaupt brauchst. Alles was mit Datenbindung geht (in der GUI eigentlich alles) solltest Du auch mit Datenbindung machen.
    Wenn Du zum Beipiel alle Notizen zu einer bestimmten Kategorie als Excel-Tabelle darstellen (ausgeben) willst, wäre so eine Abfrage sinnvoll.

    asusdk schrieb:

    jetzt versuche ich irgendwie auch eine "Alle" Category anzulegen, in welchem mir alle Notizen angezeigt werden, nicht nur diejenigen welche der aktuell angewählten Kategorie angehören,
    Das habich glaub im anderen Thread schon gesagt - das überschreitet den Standard-Anwendungsbereich von tDts.
    Also eine entsprechend strukturiertes Dataset kannste nicht anlegen - sondern die Struktur die du schon hattest, war i.O.

    Aber Natürlich kannste in den Kategorien einen Kategorie-Datensatz anlegen, dessen Name "Alle" lautet.
    Und wenn der angewählt wird, kannste das DGV an eine andere BindingSource binden, welche alle Notizen anzeigt.
    Und wenn wieder die normalen Kategorien angewählt werden - dann bindeste wieder an die "normale" BindingSource, welche gezielt die Notizen der jeweiligen Kategorie anzeigt.
    Welche Kategorie angewählt ist, erfährst du im bsCategory_CurrentChanged-Event, und da kannste "umbinden", entsprechend deinen Vorstellungen.
    bsCategory_CurrentChanged-Event @ErfinderDesRades top, damit sollte es gehen =)

    aber eine Frage hätte ich noch und ich denke dafür muss nicht extra ein neuer Thread her (korrigiert mich wenn ich falsch liege ^^) aber wie verhält es sich / was muss ich beachten, wenn 2 leute zeitgleich auf das DS zugreifen,
    also z.B. Dataset ist noch leer, 2 Leute starten jeweils das Programm und erstellen Einträge, dann würden die ID´s ja doppelt vorhanden sein was ja nicht funktioniert, oder seh ich das falsch ?
    If Energy = Low Then
    Drink(aHugeCoffee)
    Else
    Drink(aHugeCoffeeToo)
    End If
    Tja, schwierig. Erstmal nur so als Hinweis: Es können an 2 PCs wohl nicht beide User am selben tDS arbeiten. Ggf. mit den gleichen Daten der selben Datenquelle. Aber die Datenverwaltung geht nicht über dasselbe tDS. Es sei denn man arbeitet auch mit derselben Programminstanz. Aber das ist ja dann unwahrscheinlich.
    Ein Problem, dass es nicht nur bei nem tDS gibt. Wird die DataTable gesperrt, sodass es immer nur einen User mit Schreibberechtigung gibt? Oder macht man es so, dass der 1. User seine Daten irgendwann commited und später der 2. User und es wird prinzipell beides akzeptiert, allerdings mit der Folge, dass die Änderungen des ersten Users durch die des 2. überschrieben werden? Oder weist man beide User drauf hin, dass beide dran arbeiten? Welche Möglichkeiten gibt es noch? Kommt auf das Datenmanagement an. Wenn es viel kann, kann es auch Daten mergen. Aber das wird bei Start-From-Scratch-Tabellen schwierig. Aber bestimmt fällt den Experten noch was ein.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Häufig von mir verwendete Abkürzungen: CEs = control elements (Labels, Buttons, DGVs, ...) und tDS (typisiertes DataSet)
    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht in den Spekulatiusmodus gehen.
    hm, ja das hatte ich vermutet, aktuell wäre die Idee eine INI File im selben Pfad wie die .xml abzulegen, und sobald jemand auf den Hinzufügen oder den Bearbeiten Button klickt in dieser datei halt z.B. ein Codewort reinzuschreiben alla "Inbearbeitung" nach dem speichern dann z.B. bearbeitet, sollte dann der andere User auf Hinzufügen oder bearbeiten klicken, kommt halt die Meldung das änderungen vorliegen, und das Programm neu gestartet werden muss bevor änderungen vorgenommen werden dürfen, oder so ähnlich ^^
    If Energy = Low Then
    Drink(aHugeCoffee)
    Else
    Drink(aHugeCoffeeToo)
    End If

    asusdk schrieb:

    was muss ich beachten, wenn 2 leute zeitgleich auf das DS zugreifen,
    Dann muss eine Datenbank her, mit der die beiden User ihre Datasetse synchronisieren (also Daten abrufen, einspeichern, sodass die Dataset-Daten wieder mit der Db übereinstimmen).
    Beim Einspeichern kann genau festgestellt werden, welcher Datensatz ein DbConcurrency-Problem verursacht.
    Alternativ kann man auch Sperr-Vermerke setzen und aufheben - (aber da steckt auch der Teufel im Detail: du musst auch damit umgehen können, dass einer sperrt, und dann nach Hause geht).

    Alles schön und gut und kompliziert, aber zuvor musste überhaupt genau konzipieren, was denn nu passieren soll, wenn der Fall eintritt. Oder noch besser so konzipieren, dass der Fall nicht eintreten kann.
    Jo, und dann umsetzen - wie gesagt: ziemlich kompliziert, und es gibt nur so ungefähre Strategien, aber kein Rezept, sondern der Einzelfall ist zu analysieren.

    Tipp: Beschäftige dich damit erst, wenn du ein reales Problem damit hast.
    Je mehr Erfahrungen du zuvor sammeln konntest, desto besser wirste dann damit fertig.
    ich habe es nun folgendermaßen gelöst:

    Das Programm startet immer nur im ReadMode (verstecktes bearbeiten-Menü), wird nun der BearbeitenModus aktiviert, erstellt sich im db-Directory eine datei mit namen Working, ist das bearbeiten fertig, so wird diese datei gelöscht, solange diese Datei existiert, kann niemand anderes in den bearbeiten Modus gehen.

    erschien mir für 2-5 Nutzer des Programms, wobei die meisten eh nur mitlesen, am sinnvollsten gelöst.

    LG
    If Energy = Low Then
    Drink(aHugeCoffee)
    Else
    Drink(aHugeCoffeeToo)
    End If
    Ich würde es eher Explicit Lock nennen, da ein Lock angefordert werden muss ;)

    Nachtrag: Wichtig ist ja dass der TO eine Lösung für sein Problem gefunden hat
    Die deutsche Sprache ist Freeware, du kannst sie benutzen, ohne dafür zu bezahlen. Sie ist aber nicht Open Source, also darfst du sie nicht verändern, wie es dir gerade passt.

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