WCM - Das österreichische Computer Magazin Forenübersicht
 

Zurück   WCM Forum > Rat & Tat > Programmierung

Programmierung Rat & Tat für Programmierer

Microsoft KARRIERECAMPUS

Antwort
 
Themen-Optionen Ansicht
Alt 11.02.2009, 10:30   #1
3of4
Elite
 
Registriert seit: 14.11.1999
Alter: 39
Beiträge: 1.429


Standard .Net C#; Persönliche Usereinstellungen in config speichern

Hallo!

Ich schreibe gerade eine Applikation, bei sich für jeweils spezielle Userkreise spezielle Items öffnen. Es gibt für die Items eine eigene Datenbank, die User-Berechtigungen erfolgen über eine eigene Zentralkomponente, die ich eingebunden habe, sprich ich setze das ganze dynamisch in der Applikation zusammen und es kann sich für jeden eine eigene individuelle Zusammenstellung ergeben.
Die Items werden häufig geändert, auch die Nutzer und Berechtigungen, aber es sollte nicht jede Änderung zu einem neuen SW-Rollout führen (daher sind die Items ja in einer DB).
Allerdings kann der User jetzt auch zu seinen Items individuelle Einstellungen treffen (ausblenden[Ja/Nein],Reihenfolge[Zahl]).
Für mich stellt sich jetzt die Frage, wo ich diese Einstellungen speichern soll, in der config oder muss ich wirklich eine neue DB dafür aufreißen?
Mir fehlt leider noch immer der .Net-Grundkurs, aber ich hätte mir vorgestellt, ich kann, sobald der Benutzer für ein Item eine Einstellung trifft (z.b. in interessiert von allen Items nur das unterste, er will aber nicht immer 2 A4-Seiten scrollen, kriegt aber aus verwaltungstechnischen Gründen keine eigene Gruppe) ich in der App.config eine Struktur in den Usersettings hätte, die in etwa so aufgebaut wäre:
Code:
<usersettings>
   <setting name="ignore">
      <value = "1" />
      <value = "2" />
      <value = "3" />
      <value = "4" />
      <value = "5" />
      <value = "8" />
   </setting>
   </setting>
   <setting name = "Reihenfolge">
      <value = "3" />
      <value = "2" />
      <value = "4" />
      <value = "6" />
      <value = "5" />
      <value = "1" />
   </setting>
</usersettings>
Jetzt habe ich nur keinen Schimmer und die falschen google-Parameter, wie ich so etwas dynamisch erzeuge, ich finde zwar mit allen meine Suchanfragen immer die ersten 5 Seiten Beispiele für das normale Ändern von Settings, aber nirgends, wo ich dynamisch solche Schachtelungen erzeuge.

ps: Falls sich jemand unter meiner latenten Beschreibungsschwäche leidet, versuche ich noch ein anderes Beispiel:
Jeder User kriegt ein Grid (Excel-Sheet), wobei jeder andere columns (Spalten) hat. Jeder User soll aber seine Spalten indiviudell reihen können und sie müssen beim nächsten Start so wiederhergestellt werden.
____________________________________
Resistantium est futilius
3of4 ist offline   Mit Zitat antworten
Alt 11.02.2009, 14:23   #2
Farkarich
Senior Member
 
Registriert seit: 19.09.2000
Alter: 40
Beiträge: 122


Farkarich eine Nachricht über ICQ schicken
Standard

Hallo,

also so weit ich weiß ist es in .net möglich objekte einfach zu serialisieren, sprich einfach das ganze object weg zu schreiben

da gibts mehrere Serializer (ich hab mal was mit dem XmlSerializer gemacht) geht eigentlich ganz gut, eventuell musst du mal google anstarten..

ich glaube das ist in etwa das was du machen willst...

mfg
Bernd
Farkarich ist offline   Mit Zitat antworten
Alt 17.02.2009, 21:46   #3
Biri
Hero
 
Registriert seit: 04.09.2001
Beiträge: 894


Standard

hallo,

grundsätzlich sollte man "user settings" im isolated storage des users speichern, nicht in der "app.config", weil auf diese hat man unter z.B. Vista kein Schreibrecht ohne Admin Rechte, außerdem ist es "good practice".
Da deine Settings im XML Format aufgebaut sind, würde ich da keinen Klasse als XML rausserialisieren sondern direkt ein z.B. XmlDocument, welches eine .Save() Methode bereitstellt.
Ist etwas schwierig, genauer zu helfen, da die Anfrage relativ umfassend aber ungeau ist. Bei konkreten Fragen: Nur her damit!

Ich verwende für einen Applikation, welche für einzelen User individuelle Einstellungen enthalten kann sog. "Profile".
Diese Profile sind in einer DB abgelegt z.B. in einer VarChar(Max) oder Xml Spalte => eine gute imho. sogar bessere Alternative zum Isolated Storage, weil du in deinem Fall ja bereits eine DB verwendest.

fg
hannes
Biri ist offline   Mit Zitat antworten
Alt 18.02.2009, 11:20   #4
3of4
Elite
 
Registriert seit: 14.11.1999
Alter: 39
Beiträge: 1.429


Standard

Zitat:
Zitat von Biri Beitrag anzeigen
hallo,

grundsätzlich sollte man "user settings" im isolated storage des users speichern, nicht in der "app.config", weil auf diese hat man unter z.B. Vista kein Schreibrecht ohne Admin Rechte, außerdem ist es "good practice".
Da deine Settings im XML Format aufgebaut sind, würde ich da keinen Klasse als XML rausserialisieren sondern direkt ein z.B. XmlDocument, welches eine .Save() Methode bereitstellt.
Ist etwas schwierig, genauer zu helfen, da die Anfrage relativ umfassend aber ungeau ist. Bei konkreten Fragen: Nur her damit!

Ich verwende für einen Applikation, welche für einzelen User individuelle Einstellungen enthalten kann sog. "Profile".
Diese Profile sind in einer DB abgelegt z.B. in einer VarChar(Max) oder Xml Spalte => eine gute imho. sogar bessere Alternative zum Isolated Storage, weil du in deinem Fall ja bereits eine DB verwendest.

fg
hannes
Hallo!
Der Hinweiß mit der app.config ist natürlich gut, so weit habe ich bis dato nicht gedacht.
Genauere Fragen hätte ich nur mal jene nach einem Beispiel, wie ich in den "isolated storage" des users schreibe und wenn fürs xml-schreiben ein Code-schnipsel abfällt wäre ich auch dankbar (xml habe ich noch nicht unter C# angesehen, allerdings wirds vermutlich nicht so komfortabel wie unter Dome ablaufen.)
____________________________________
Resistantium est futilius
3of4 ist offline   Mit Zitat antworten
Alt 17.03.2009, 10:31   #5
Yoghurt
Jr. Member
 
Benutzerbild von Yoghurt
 
Registriert seit: 28.12.2000
Alter: 48
Beiträge: 49


Yoghurt eine Nachricht über Skype™ schicken
Standard

Hi,

also ich hab mir angewöhnt Settings, die ich auch in Datenbanken ablegen möchte gleich als DataTable zu erzeugen. DataTables kann man leicht serialisieren und als XML Datei wegschreiben. Kleines Beispiel (DataTable mit Ignore Values im Isolated User Store speichern und wieder laden)...

Settings erzeugen und speichern...

Code:
// Create DataTable for Settings
DataTable mySettings = newDataTable("Ignore");
mySettings.Columns.Add("Value", typeof(System.Int32));
// Add Test Settings
mySettings.Rows.Add(newobject[1] { 1 });
mySettings.Rows.Add(newobject[1] { 2 });
mySettings.Rows.Add(newobject[1] { 3 });
// Create Isolated Storage Stream
IsolatedStorageFile isoStore =
IsolatedStorageFile.GetStore(IsolatedStorageScope.User 
| IsolatedStorageScope.Assembly, null, null);
IsolatedStorageFileStream myIsolatedStream =
newIsolatedStorageFileStream("MyConfigFile.xml", FileMode.Create, isoStore);
// Write to Isolated Storage
mySettings.WriteXml(myIsolatedStream, XmlWriteMode.WriteSchema);
// Close Stores
myIsolatedStream.Close();
isoStore.Close();
Settings laden und anzeigen...

Code:
// Create Isolated Storage Stream
IsolatedStorageFile isoStore =
IsolatedStorageFile.GetStore(IsolatedStorageScope.User
| IsolatedStorageScope.Assembly, null, null);
try
{
// Open Config File
IsolatedStorageFileStream myIsolatedStream =
newIsolatedStorageFileStream("MyConfigFile.xml", FileMode.Open, isoStore);
// Create Settings Table
DataTable mySettings = newDataTable("Ignore");
mySettings.ReadXml(myIsolatedStream);
// Read 1. Ignore Setting
MessageBox.Show("First Ignore Value is " + mySettings.Rows[0]["Value"].ToString());
myIsolatedStream.Close();
}
catch (Exception ex)
{
MessageBox.Show("Error. File not found or error reading config file. " + ex.ToString());
}
Kann dir das kleine Test Projekt auch schicken wenn du willst.
____________________________________
lg Yoghurt

--
Rettet unsere Wälder, esst mehr Biber!
Yoghurt ist offline   Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.

Gehe zu


Alle Zeitangaben in WEZ +2. Es ist jetzt 12:52 Uhr.


Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Forum SEO by Zoints
© 2009 FSL Verlag