Ich versuche, die Breite der Spalten in meinem Datagrid festzulegen. Ich benutze Compact Framework 2.0 und C #
Ich habe das versucht, aber es gibt mir eine Fehlermeldung "out of bonds":
%Vor%Hier ist der Code zum Füllen meines Datagrids mit der Datentabelle (scheitert nur, wenn ich versuche, die Spaltenbreite einzustellen):
%Vor%DataGrid ist jetzt veraltet, aber ich habe das gleiche Problem beim Ändern von Legacy-Code festgestellt, also werde ich meine Lösung veröffentlichen.
Das Problem ist, dass DataGrid ein privates Feld namens hat myGridTable DataGridTableStyle
enthält. Ein aktuelles DataGridTableStyle
existiert auch dann, wenn die TableStyles
Sammlung leer ist. In diesem Fall zeigt es auf ein Standard DataGridTableStyle
welches auch privat / intern ist.
Da DataGrid sowieso veraltet ist und nicht geändert wird, habe ich mich entschieden einfach zu verwenden Reflektion für den Zugriff auf diese privaten Felder . Sie hätten öffentlich sein sollen, und sie privat zu machen, war eine schlechte Design-Entscheidung, IMO.
Der Vorteil der direkten Arbeit mit den aktuellen Stilen besteht darin, dass Sie die Tabellenstile nicht einfach nur zerstören und neu erstellen müssen, um die Breite zu ändern, und es funktioniert jedes Mal ohne unerwartetes Verhalten.
Ich habe einige Erweiterungsmethoden dafür erstellt:
%Vor%Ich verbrachte einen besseren Teil von 2 Tagen nach der Antwort oben suchen. Danke für die tollen Lösungen. Hier ist ein vb-Code mit einer Anpassung der Spaltenbreiten nach Spalten:
%Vor%Tags und Links c# visual-studio-2008 datatable datagrid compact-framework