Laden...

DataGridView - Einzelne Spalten readonly=false setzen

Erstellt von blureg vor 17 Jahren Letzter Beitrag vor 17 Jahren 1.894 Views
B
blureg Themenstarter:in
7 Beiträge seit 2006
vor 17 Jahren
DataGridView - Einzelne Spalten readonly=false setzen

Hallo,

mein Programm holt sich Daten aus einer DB und speichert diese in einer DataTable dt ab. Visualisiert wird diese durch Setzten der Eigenschaft DataSource in einem DataGridView.

datagridview1.DataSource = dt;

Für diese Spalten soll der Anwender und ausschließlich Leserechte haben. Also,

datagridview1.readonly = true;

Nun sollen aber, nachdem die Tabelle im DataGridView dargestellt wurde vom Anwender noch Spalten hinzufügbar sein. Diese sollen dann beschreibar sein.

datagridview1.Columns.Add("x","x_name");
datagridview1.Columns["x"].readonly = false;

Allerdings wird die letzte Anweisung vom Compiler anscheinend ignoriert (beim debuggen bleibt true) und die Spalte "x_name" wird angezeigt, ist aber nicht beschreibar.

Hat jemand eine Idee wie man das realisiert (oder wo mein Fehler liegt😉)?

Grüße und Danke

B
53 Beiträge seit 2007
vor 17 Jahren

Hallo,

Du musst jede Spalte einzeln auf ReadOnly=true setzen. Wenn du das gesamte DataGridView auf ReadOnly setzt dann überschreibt diese Einstellung alle Einstellungen der Spalten.

B
blureg Themenstarter:in
7 Beiträge seit 2006
vor 17 Jahren

Die Einstellung ist für das "start datagridview" readonly = true gesetzt. Später wird eine Spalte hinzugefügt und die soll dann readonly= false gesetzt sein (der Rest soll weiterhin readonly = true sein). Das funktionniert bei mir nicht.
Bizarrerweise geht es aber umgekehrt, dass heißt ich setze das gesammte Datagridview mit

datagridview1.readonly = false;

und eine später hinzugefügte Spalte x mit

datagridview1.Columns["x"].readonly = true;

Andersrum funktionniert es unerfindlichen Grund nicht.

F
10.010 Beiträge seit 2004
vor 17 Jahren

Das sind keine unerfindlichen gründe.

Es ist genau so spezifiziert.

Es nutzt Dir ja auch nichts, wenn Du die Erlaubnis hast eine Tür in einem
Haus zu öffnen, wenn Du nicht ins Haus darfst.

187 Beiträge seit 2005
vor 17 Jahren

du musst wissen, dass das readonly des datagridviews in einer höheren ebene liegt als die columns. Sprich: Das ReadOnly des DataGridViews hat eine höhere Priorität als das ReadOnly von DataGridViewColumns.

Ist ReadOnly von DataGridView = true sind alle darunterliegenden objekte auch readonly
ist aber readonly von DataGridView = false gelten die ReadOnly eigenschaften der darunterliegenden Objekte.

Sobald bei einem Objekt ReadOnly = true ist, sind alle darunterliegenden Objekte automatisch auch ReadOnly.

Das selbe hast du auch z.B. bei Panels und der Enabled Eigenschaft.

Füg mal in einer Form ein Panel hinzu und in setze in diesem Panel ein Button. Dann geh mal folgende Konstelationen durch:
Panel.Enabled = true, Button.Enabled = true <-- Der Button wird aktiviert sein
Panel.Enabled = true, Button.Enabled = false <-- Button ist nicht aktiviert
Panel.Enabled = false, Button.Enabled = true <-- Button ist nicht aktiviert
Panel.Enabled = false, Button.Enabled = false <-- Button ist nicht aktiviert

Der Grund dafür ist der, dass die Enabled Eigenschaft des Panels eine höhere Priorität hat als die des Buttons. Genauso wie beim DataGridView und der ReadOnly Eigenschaft