Entwickler-Ecke

Sonstiges (.NET) - Benutzerdefinierte Einstellungen in c#


EdiZ84 - Di 01.12.09 21:14
Titel: Benutzerdefinierte Einstellungen in c#
Hallo Leute, hab ein kleines Problem.

Möchte Einstellungen von Benutzer des Programms speichern. (Ich habe schon viel Beiträge dazu gelesen, und weis wie man die einzelne Einstellungen speichert, nur bei handelt es sich um ein komplexeres Problem, also bitte erst weiterlesen:)))) )

Habe eine Form mit einem DataGridView mit 52 splaten. In diesen DataGridView soll man ja bestimmte einstellungen machen können, wie z.B. spaltengröße, farbe, sortierModus, autosizemode usw.
Dafür müsste ich aber erst für alle Spalten einen Eintrag der Einstellung in einer Setting-File machen.


C#-Quelltext
1:
2:
Properties.Settings dataGridViewSettings = Properties.Settings.Default; 
this.dataGridViewSettings.EinstellungX = wertX;


Dieses möchte ich per Code machen. Ich kann zwar neue Einstellungen per Code erstellen, aber leider nicht Speichern.


C#-Quelltext
1:
2:
3:
4:
5:
System.Configuration.SettingsProperty settingPropertyName = new System.Configuration.SettingsProperty("DataGridViewColumn" + "_" + item.Index.ToString() + "_" + item.SubItems[1].Text);
settingPropertyName.DefaultValue = true;
this.dataGridViewColumnSettings.Properties.Add(settingPropertyName); //Das hinzufügen funktioniert zur Laufzeit, die objekte werden aber nicht in der Settings-Datei gespeichert bzw. geschrieben.  

this.dataGridViewColumnSettings.Save();


Zur Laufzeit erstellt er die Objekte. Aber wenn ich das Programm schließe sollen die neuen Einstellungen , die Per Code hinzugefügt wurden, gespeichert werden und in die Settings-Datei geschrieben werden. Ich möchte nicht jede einzelen einstellungen per Eingabe definieren.

Bitte helft mir, ich kann das zwar alles mit xml speichern, möchte ich aber nicht. Ich denke das dieses Verfahren das bessere ist. Für Verbesserungs-Vorschläge bin ich immer offen. (bin ja kein profi)

Danke euch im Voraus, Ciao
Falls ich mich schlecht ausgedrückt habe , bitte Info;))


Moderiert von user profile iconChristian S.: Topic aus Programmierwerkzeuge verschoben am Di 01.12.2009 um 20:35


EdiZ84 - Di 01.12.09 21:16

Ach ja, ein link falls einer nicht weis wovon ich rede!!!! http://msdn.microsoft.com/de-de/library/bb397750.aspx

Leider wird dort alles angesprochen, bis auf mein Problem!!!!!!!!!


JüTho - Mi 02.12.09 12:42

Hallo,

das DataGridView ist für so etwas nicht vorgesehen. Es dient (wie der Name schon sagt) dazu, Daten in einem Grid zur Anzeige zu bringen. Du solltest also niemals Daten direkt im DGV speichern und bearbeiten, sondern dazu eine Daten-Klasse benutzen - vorzugsweise DataTable, aber auch anderes ist denkbar - siehe die Erläuterungen zu DataGridView.DataSource.

Wenn du DataTable nimmst, kannst du die Daten mit ReadXml und WriteXml ganz einfach speichern und einlesen.

Gruß Jürgen


UGrohne - Mi 02.12.09 13:37

@Jürgen: Du solltest Dir angewöhnen, Beiträge komplett zu lesen!

@Edi: Ich bin mir nicht ganz sicher, aber ich glaube, dass Dein Vorhaben so von dieser Funktionalität nicht abgedeckt wird. Probier mal Folgendes aus: Erweitert die UserSettings-Datei im Benutzerprofil um eine Einstellung und versuche genau diese auszulesen. Wenn das nicht klappt, füge diese Einstellung in die zentrale config-Datei ein. Wenn es dann klappt, wird Dein Vorhaben schon von vornherein scheitern.

Grund: Um eine Einstellung hinzuzufügen, müsste die application.config erweitert werden und ein normaler User wird das Recht dazu nicht haben.

Was ich empfehlen würde: Erstell eine Eigenschaft GridSettings und speichere Deine Einstellungen dort in einem Dir bekannten Format. Mit Extension Methods würde ich dann das DataGrid erweitern, um diese Einstellungen aus dem String zu lesen oder in einen zu schreiben.


Kha - Mi 02.12.09 14:55

Durch direktes Bearbeiten der Settings.Designer.cs sollten sich beliebige Properties (also auch eine Property, die eine Liste der Spalteneinstellungen enthält) definieren lassen, was der VS-Designer anscheinend nicht unterstützt. Aber ich sehe darin keinen großen Vorteil gegenüber dem direkten Serialisieren per XmlSerializer in ein AppData-Verzeichnis :nixweiss: .


JüTho - Mi 02.12.09 15:56

user profile iconUGrohne hat folgendes geschrieben Zum zitierten Posting springen:
@Jürgen: Du solltest Dir angewöhnen, Beiträge komplett zu lesen!

In der Tat. Entschuldigt bitte vielmals, dass ich immer so voreilig und vorlaut etwas Unpassendes schreibe; ich muss mir wirklich angewöhnen, zuerst zu lesen, dann nachzudenken und erst am Schluss (soweit noch angemessen) etwas von mir zu geben. Jürgen