Databind-Liste von Objekten für eine WinForms-DataGridView, aber bestimmte öffentliche Eigenschaften nicht anzeigen

8

Ich bin mir nicht einmal sicher, ob ich das richtig mache. Aber im Grunde habe ich eine Liste von Objekten, die aus einer Klasse aufgebaut sind. Von dort binde ich die Liste an eine Datagrid-Ansicht, die sich in einem Windows Form (C #)

befindet

Von dort werden alle öffentlichen Eigenschaften des Objekts in der Datagrid-Ansicht angezeigt. Allerdings gibt es einige Eigenschaften, auf die ich noch von anderen Teilen meiner Anwendung aus zugreifen muss, die aber nicht unbedingt in der DataGridView sichtbar sein müssen.

Es gibt also ein Attribut oder etwas ähnliches, das ich über die Eigenschaft schreiben kann, um es von der Anzeige auszuschließen.

P.S. Ich bin zur Laufzeit gebunden. Also kann ich die Spalten nicht über den Designer bearbeiten.

P. P. S. Bitte keine Antworten, nur um öffentliche Variablen zu machen (Obwohl, wenn das der einzige Weg ist, lass es mich wissen :)).

    
MindingData 12.03.2010, 23:43
quelle

4 Antworten

14

Fügen Sie den öffentlichen Eigenschaften, für die Sie keine Spalte erstellen möchten, das Attribut [Browsable(false)] hinzu.

    
Vivek 13.03.2010, 00:37
quelle
2

Ich sollte genauso antworten wie @ Vivek in seinem Kommentar sagt. Ich weiß nicht, warum er hier keine Antwort hinzugefügt hat ...

Nun, wenn Sie ein DataGridView-Steuerelement zum automatischen Generieren seiner Spalten zulassen, werden alle Eigenschaften in den gebundenen Objekten angezeigt. Zuallererst müssen Sie DataGridView.AutoGenerateColumns = false aktivieren.

Dann können Sie zur Laufzeit Spalten hinzufügen. Zum Beispiel:

%Vor%     
Javier 12.03.2010 23:58
quelle
0

Zusätzlich zu meiner vorherigen Antwort, da Sie lieber angeben, dass die Spalten nicht manuell hinzugefügt werden sollen, empfehle ich Ihnen eine andere Option: Verwenden von benutzerdefinierten Attributen in Ihrer Eigenschaftendefinition .

Zuerst müssen Sie Ihr benutzerdefiniertes Attribut codieren:

MyPropertyAttribute-Klasse

%Vor%

Sie könnten es in Ihren Klassen verwenden, einfach so:

Foo-Klasse

%Vor%

Sie könnten eine Methode schreiben, die die Eigenschaften Ihrer gebundenen Objekte iteriert, indem Sie Reflektionen verwenden und testen, ob sie als sichtbar oder unsichtbar markiert sind, um Spalten hinzuzufügen oder nicht hinzuzufügen. Sie könnten sogar eine benutzerdefinierte DataGridView mit diesem Verhalten haben, so dass Sie dies nicht jedes Mal wiederholen müssen. Sie verwenden nur Ihre benutzerdefinierte DataGridView und markieren die Sichtbarkeit in den Eigenschaften.

So etwas ...

%Vor%     
Javier 13.03.2010 00:33
quelle
0

Ich weiß, dass es ein bisschen ein alter Post ist, aber nur aus Gründen der Klarheit möchte ich hinzufügen, dass dies auch erreicht werden kann, indem man die benutzerdefinierte Typdefinition unter Verwendung von ICustomTypeDescriptor -Schnittstelle. Es sieht aus wie ein bisschen mehr Arbeit, aber Sie können nur implementieren, was Sie brauchen (in diesem Fall GetProperties). Es macht die Dinge später einfacher, da die meisten aufgelisteten Spalten automatische Grids / Listen diesen Ansatz unterstützen.

    
mmix 03.02.2011 12:12
quelle