| 

.NET C# Java Javascript Exception

2
Hallo Zusammen,

ich versuche jetzt schon eine Weile auf den akt. CellStyle der einzelnen Zellen einer DataGridView zuzugreifen, leider ohne Erfolg.
Ich bekomme immer nur einen Standradwert, aber nicht den tatsächlich zugewiesenen Style zurück.
Das Merkwürdige dabei ist, dass ich die korrekten Werte im Überwachungsfenster von VS sehen kann, nur wenn ich sie im Codee abfrage werden anerde Werte zurückgeliefert:
(Hier wollte ich eigentlich einen Screenshot posten, aber leider scheint das nicht zu gehen. :-( )

Dann auf diesem Wege:
So steht es im Überwachungsfenster:
-MyCurrentCell
+InheritedStyle {DataGridViewCellStyle { BackColor=Color [Control], .....
+ BackColor "{Name=PaleGreen, ARGB=(255, 152, 251, 152)}" System.Drawing.Color

Korrekt ist der Farbwert 'PaleGreen' zurück bekomme ich aber 'Control'.

Vielen Dank für Eure Hilfe
Carsten
03.05.2018
ille6 25 5
wie fragst du denn den CellStyle ab? Kannst du den Code posten?
luedi 05.05.2018
5 Antworten
0
Hallo Luedi,

hier der (etwas abgespeckte) Code zum Abfragen der Cellcolor:

DataGridViewCell currentCell = MyDataGridView[cellIndex, rowIndex];
Color backColor = currentCell.InheritedStyle.BackColor;

BackColor enthält jetzt die Farbe 'Control',
obwohl sie laut Überwachungsfenster eigentlich 'PaleGreen' sein sollte.

Carsten
05.05.2018
ille6 25 5
0
Ich habe selber schon länger nicht mehr mit dem DataGridView-Control gearbeitet, deshalb habe ich mir erstmal ein Beispielprogramm geschrieben. Wie es aussieht, verwendest du die falsche Property. Um die aktuelle Hintergrundfarbe einer Zelle im DatagridView auszulesen oder zu setzen, muss du die "Style" Property verwenden.

DataGridViewCell currentCell = MyDataGridView[cellIndex, rowIndex];
Color backColor = currentCell.Style.BackColor;
07.05.2018
luedi 2,1k 1 9
0
Hallo Luedi,
vielen Dank für Deine Bemühungen, aber leider funktioniert das nicht.
Die Style-Property enthält bei mir gar keinen Wert.
Vielleicht liegt es ja an der Art und Weise, wie ich den Farbwert zur Laufzeit setze.
Ich gehe da über das 'CellFormating'-Event des DataGridViews:

MyDataGridView.CellFormatting += (object sender, DataGridViewCellFormattingEventArgs e) => e.CellStyle.BackColor = Color.PaleGreen //Der Wert ist im Code nicht statisch, sondern wird beim Zeichenvorgang erst in Abhängigkeit der darzustellenden Daten ermittelt.

Carsten
07.05.2018
ille6 25 5
die Farbe wird aber gesetzt? (d.h. die Zelle ist korrekt formatiert) Alternativ könntest du versuchen, die Zelle über die RowIndex inf ColumnIndex properties des Events direkt anzusprechen und die Style-Property zu setzen, wie ich es beschrieben habe.
luedi 08.05.2018
0
Wie sieht es mit der Abfrage via CellStyle aus, etwa so:
Color bgColor = currentCell.CellStyle.BackColor;

Die Eigenschaft ist laut MS lesbar und schreibbar.
Vielleicht hilft es...
07.05.2018
edvservice 1,4k 1 6
Die Klasse 'DataGridViewCell' besitzt aber leider keine Eigenschaft 'CellStyle'.
ille6 07.05.2018
0
Sie haben recht - die Eigenschaft ist nicht direkt erreichbar = schwache Leistung von MS.
Dann so:
Color bgColor = MyDataGridView[cellIndex, rowIndex].CellStyle.BackColor;

Das Grid kann auch über die Eigenschaft der aktuellen Zelle ermittelt werden:
DataGridView view = currentCell.DataGridView;
Color bgColor = view[currentCell.ColumnIndex, currentCell.RowIndex].CellStyle.BackColor;

Vielleicht hilft das.
08.05.2018
edvservice 1,4k 1 6

Stelle deine Datagridview-Frage jetzt!