Entwickler-Ecke

WinForms - PropertyGrid


scw1963 - Fr 11.03.11 15:42
Titel: PropertyGrid
Hallo zusammen,

kann mir jemand sagen, ob und wie ich einzelne Daten(zeilen) eines PropertyGrid enabled/NOTenabled setzen kann? Bisher habe ich nur gefunden, dass das mit dem gesamten Control geht.

Vielen Dank

Stefan


Moderiert von user profile iconChristian S.: Topic aus C# - Die Sprache verschoben am Fr 11.03.2011 um 14:50


Trashkid2000 - Fr 11.03.11 16:14

Hallo,

naja, selber auf enabled/ disabled setzen?
Wenn eine Property einen öffentlichen Getter hat wird sie überhaupt erst im Grid angezeigt.
Und wenn sie einen öffentlichen Setter hat kann sie auch geändert werden, und wenn nicht, kann sie halt nicht geändert werden.
Halt so, wie sich Zugriffsmodifizierer verhalten...


scw1963 - Fr 11.03.11 16:29

Hm, diese Antwort überfordert mich ein wenig. Ich kann ja PropertyGrid1.Enabled = false setzen. Aber wie komme ich an Zeilen heran, die erst zur Laufzeit erzeugt werden. Hättest du vielleicht ein Stück Codebeispiel?

Vielen Dank


Ralf Jansen - Fr 11.03.11 16:31

Im einfachsten Fall den Properties jeweils das ReadOnlyAttribute verpassen(Wenn die ReadOnly Information statisch ist).
Wenn du zur Laufzeit den ReadOnly Status einer Property ändern willst wird es glaube ich komplizierter.

Dazu müsstest du einen TypConverter [http://msdn.microsoft.com/de-de/library/system.componentmodel.typeconverter.aspx] für deine spezielle Klasse die du im PropertyGrid anzeigen willst schreiben dort die GetProperties [http://msdn.microsoft.com/de-de/library/fh8bbs91.aspx] Methode überschreiben und die zurückzugebenden PropertyDescriptoren [http://msdn.microsoft.com/de-de/library/3cfx2yfs.aspx] je Property entsprechend zusammenbasteln. Zum Beispiel könnte man dort per TypeDescriptor.AddAttributes den Properties zur Laufzeit das oben genannte ReadOnlyAttribute unter jubeln.


Th69 - Fr 11.03.11 16:52

Die Frage ist, ob überhaupt ein PropertyGrid hier überhaupt das beste Control ist (unter http://www.mycsharp.de/wbb2/thread.php?threadid=93838 hat er ja geschrieben, das es sich um
XML-Daten handelt)?

Btw. Crossposts sind im myCSharp-Forum nicht erlaubt - also nicht wundern, wenn dein Beitrag dort bald geschlossen sind - und hier hättest du auch besser darauf hinweisen können...


scw1963 - Mo 14.03.11 09:24

Welches Control würdest du denn alternativ empfehlen?


Th69 - Mo 14.03.11 11:21

Hallo scw1963,

was sind denn deine genauen Anforderungen? Soll der Anwender denn alle Eigenschaften des Objekts verändern können (oder ist das genau der Grund für die Frage nach enabled/disabled?)?

Alternativ bliebe ein DataGridView (hier wären dann die einzelnen Zellen dann horizontal angeordnet, d.h. du würdest nur Header und genau 1 Zeile anzeigen).

Ich selber habe für das Editieren von XML-Daten (d.h. einer konkreten Datenklasse) ein eigenes Control geschrieben, welches ein TableLayoutControl beinhaltet.
Und anhand einer Konfiguration werden dann dynamisch die entsprechenden Controls (z.B. TextBox, ComboBox, DateTimePicker etc.) angezeigt.