Benutzereinstellungen sinnvoll speichern

  • VB.NET
  • .NET (FX) 4.0

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

    Benutzereinstellungen sinnvoll speichern

    yo Leute,

    ich habe eine eher generelle Frage zum Speichern von Benutzereinstellungen. Ich will diese in einer SQL-Server Datenbank hinterlegen. Aber ich möchte diese so hinterlegen, dass ich die unterschiedlichsten Werte darin speichern kann. Beispiele:
    • Angefangen von einfache Checkbox.Checked Values jedoch von unterschiedlichen Formen (WinForms)
    • Filter Einstellungen (Comboboxen, CheckedListboxen, ...)
    • Treeview-Expanded Values welche aber unterschiedlich sein können welches Monat zB ausgewählt wurde (Zeitaufzeichnung)

    Dass diese Tabelle eine ID und einer BenutzerID hat ist klar. Wie jedoch sollte ich die jeweiligen Spalten oder noch besser die darin befindlichen Werte aufbauen, damit ich solch Szenarien speichern und auch wiederherstellen kann.

    Hat hier jemand einen Ansatz?

    lg
    ScheduleLib 0.0.1.0
    Kleine Lib zum Anlaufen von Code zu bestimmten Zeiten
    Weil es gewünscht ist diese in der DB zu speichern.
    Und ich denke im Prinzip ist es egal wohin ich das speichere. Mir geht es eher um den Aufbau bzw. die Logik wie man sich solch eine Struktur aufbaut.

    lg
    ScheduleLib 0.0.1.0
    Kleine Lib zum Anlaufen von Code zu bestimmten Zeiten
    Deswegen auch Konjunktiv ;) Ich habe geschrieben, da war deine Antwort noch nicht da. Er hat explizit gefragt, welche Tabellen er haben soll, ich habe ihm geantwortet. Dass er sie gar nicht braucht, wenn er deine Lösung nimmt, habe ich schon verstanden :) Nur war es reine Denkaufgabe für mich jetzt, was er nehmen sollte, WENN er sie braucht.
    @sonne75 mehrere Tabellen sind keine Option. Es soll eine Settings Tabelle geben eben mit der BenutzerID hinterlegt. Hierbei gibt es dann halt dementsprechende Zeilen mit den jeweiligen Werten.

    @ErfinderDesRades puh. Das Beispiel was dabei ist funktioniert zwar, jedoch muss ich mich mit dem erst mal beschäftigen um das alles zu durchschauen wie die Klasse so funzt.

    lg
    ScheduleLib 0.0.1.0
    Kleine Lib zum Anlaufen von Code zu bestimmten Zeiten
    Naja ich kann jetzt nicht 15 Tabellen machen für jegliche mögliche Settings die ich speichern will. Mir ist schon klar, dass es so machbar wäre aber genau deswegen will ich es ja nicht.
    Vielleicht hat ja jemand schon etwas ähnliches gebraucht. Die Klasse von EDR ist halt sehr komplex aufgebaut (für meinen Wissensstand zumindest).

    lg
    ScheduleLib 0.0.1.0
    Kleine Lib zum Anlaufen von Code zu bestimmten Zeiten
    Warum musst du verstehen, wie die Klasse funktioniert, um sie zu verwenden? EDR sagt doch, das Auseinandernehmen passiert INTERN. Du musst nur speichern und wieder holen.

    Und die Anzahl der Tabellen wird durch das reale Datenmodell bestimmt, nicht die Tabellen bestimmen die Daten... Wenn die Relationen so sind, wie sie sind, dann brauchst du eben so viele. Vielleicht lässt sich einiges in eine Tabelle packen, wenn Propertys gleich sind. Allerdings musst du noch wissen, in welchem Container sie sich befinden (ob Panel, Groupbox usw), um sie von da aufrufen zu können. Denn in Me.Controls sind sie ja dann nicht enthalten.

    Mit My.Settings wäre es sehr einfach, aber das willst du ja nicht.
    Ich weiß nicht wies bei dir ist, aber ich verwende ungern irgendwelche Klassen oder Code von anderen Quellen den ich nicht zu 100% verstehe.

    Es wird gefordert, dass dies in einer Tabelle ist. Kann ich mir halt nicht aussuchen. Abgesehen davon finde ich es nicht gerade übersichtlich wenn ich 10 Datentabellen jedoch 20 Settingstabellen habe.

    lg
    ScheduleLib 0.0.1.0
    Kleine Lib zum Anlaufen von Code zu bestimmten Zeiten
    also wer einen Timer verwenden kann oder gar einen Backgroundworker, der sollte auch den ComplexConverter anschmeißen können: Es ist halt ein Dingens mit einem Event, und man kanns in 2 Weisen aufrufen:
    Dim DataString = converter.CreateDatastring()
    und converter.ApplyDatastring(datastring)

    beide Aufrufe führen zum Feuern des Events, und in dem Event muss man halt auf alles "zeigen", was man persistiert haben möchte - fertig.

    also es ähnelt insofern dem BW, bei dem man ja auch mit bw.DoWork das Working-Event auslöst, in dem dann eiglich geworkt wird.
    Es ist auch nicht gerade übersichtlich, die Settings von allen Controls ohne My.Settings zu speichern.

    Wie gesagt, die Realität bestimmt das Modell, nicht umgekehrt.

    Aber wenn ich das ganze Helpersprojekt von EDR verstehen wollte, um es anwenden zu können, dann hätte ich was zu tun... (wobei es ja geht).

    Egal, was wir vorschlagen, willst du nicht. Aber es gibt nunmal keine einfache Lösung, um alle Controls (egal, wo sie liegen) vollständig zu speichern. Bzw. die von EDR, nur gefällt sie dir ja auch nicht.
    - Ich habe in keinem Post erwähnt, dass mir die Methode von EDR nicht gefällt.
    - Deine Methode gefällt mir nicht ja. Da ich keine x Tabellen für Settings machen werde/darf.
    - Ich bin mal gespannt wenn dieses Helpersprojekt nicht funktioniert wie es soll und du den Fehler finden musst. Ich will den Code verstehen den ich verwende um diesen auch bei Bedarf anpassen zu können.

    Was hier vorgeschlagen wurde:
    - Alles in einem relationalen Muster speichern -> sagte ich bereits irgendwo oben, dass es nicht geht aus mehreren Gründen
    - Die Methode von EDR -> ist eventuell eine Option wenn ich die Klasse verstanden habe. (Was mir leichter fällt mir der kurzen Info aus Post 16)

    Ich habe mir mittlerweile die Klasse angesehen und denke auch, dass ich diese bald zu 100% verstehen werde und auch einsetzen kann.
    Nun bedarf es Tests ob ich mit dieser so arbeiten kann wie ich es mir vorstelle.

    lg
    ScheduleLib 0.0.1.0
    Kleine Lib zum Anlaufen von Code zu bestimmten Zeiten

    fichz schrieb:

    Ich bin mal gespannt wenn dieses Helpersprojekt nicht funktioniert wie es soll und du den Fehler finden musst. Ich will den Code verstehen den ich verwende um diesen auch bei Bedarf anpassen zu können.

    DANN kann ich immer noch danach suchen (musste ich schon), aber nur den Teil, der nicht geht.

    Es ist sehr lobenswert, dass du alles verstehen willst, spricht ja auch nichts dagegen. Nur hast du es als Argument verwendet, warum du es nicht am Anfang verwenden wolltest (sah kompliziert aus).
    Benutzt du nie eine fremde DLL? Ich habe bei mir einige DLL eingebunden, Treiber z.B., den Code besitze ich nicht mal. Wie willst du dann damit vorgehen? Nie anwenden?
    Nur weil sie kompliziert aussieht, heißt es ja nicht automatisch, dass ich diese nicht verwenden will.

    DLLs verwende ich eigentlich fast ausschließlich von Quellen welche man soweit vertrauen kann, dass dies funktioniert (CompnentOne, DotNetZip zB). Nur bei diesen Gäbe es im Falle des Falles meist einen Support.

    Ich meine hierbei auch eher Codes ala Codeplex, activevb, etc. Wo halt diverse Programmierer Snippets der Welt zur Verfügung stellen. Diese will ich natürlich verstehen, da hier ja nicht gesagt ist, dass ich von irgendwem Hilfe erhalte wenn mal was nicht funzt. (Was natürlich noch schlimmer ist, wenn das Tool bereits im Produktivbetrieb ist).

    lg
    ScheduleLib 0.0.1.0
    Kleine Lib zum Anlaufen von Code zu bestimmten Zeiten