2016-04-06 7 views
-1

Ich habe eine Datagridview, wo ich Zeilen muß deaktivieren, wenn der Checkbox Wert in dieser Zeile nicht, hier ist der Code überprüft:Kann nicht Farbe von Datagridview oder auf Readonly ändern

 foreach (DataGridViewRow row in catView.Rows) 
     { 
      if (row.Cells[1].FormattedValue.ToString() != "true") 
      { 
       for (int i = 0; i < row.Cells.Count; i++) 
       { 
        row.Cells[i].Style.ForeColor = Color.Gray; 
        row.Cells[i].ReadOnly = true; 
       } 
      } 
     } 

Problem ist, dass dieses doesn Stellen Sie die Farbe nicht ein oder deaktivieren Sie das Kontrollkästchen, was mache ich falsch?

Danke.

Weitere Informationen:

Zellen [1] ist die Checkbox Spalte.

+1

'für (int i = 1; i == row.Cells.Count; i ++)' was zum Teufel ist das - Körper höchstwahrscheinlich nie ausführen –

+0

Loops über alle Zellen in der Zeile und setzt ihre ForeColor und ReadOnly Werte, zumindest sollte das tun. –

+0

Danke, bearbeitet die Schleife, aber das Problem steht immer noch, dass selbst wenn die Schleife auf jede Zelle verweist diese Zellen nicht ihre Werte für ForeColor und ReadOnly gesetzt haben. –

Antwort

0

Versuchen Sie for Ausdruck mit diesem ersetzen:

for (int i = 0; i < row.Cells.Count; i++) 
+0

Danke , das war ein Fehler, aber das Problem steht immer noch mit der korrigierten Schleife, die Werte für jede Zelle sind nicht gesetzt, ich bin mir wirklich nicht sicher warum. –

+0

Haben Sie in Ihrer Schleife einen Haltepunkt gesetzt, um zu sehen, ob die Linien, die die Farbe und die Nur-Lese-Werte festlegen, gerade berührt werden? – devuxer

+0

Keine Möglichkeit zum Debuggen, da es komplexe Abhängigkeiten für die Anwendung gibt, auf die bei direkter Ausführung von Visual Studio nicht zugegriffen werden kann. Ich habe die Debug-Ausgabe jedoch zur Schleife hinzugefügt und es zeigt, dass die Zellen definitiv durchlaufen werden. –

0

Sie müssen eine neue DataGridViewRow dimensionieren und eingestellt. In VB.NET würde ich tun:

dim MyLine as new DataGridViewRow 
with MyLine 
     .Cells[i].DefaultCellStyle.ForeColor = Color.Gray; 
     .Cells[i].ReadOnly = true; 
end with 

es versuchen.

-1

Ich konnte keine Möglichkeit finden, das Datagrid direkt zu aktualisieren, wenn es sich bei der Quelle um ein Datagrid handelt. Der Code funktioniert nach dem manuellen Erstellen der Spalten und dem manuellen Hinzufügen der Zeilen zum Datagrid.

Ich denke, diejenigen, die eine Datentabelle verwenden, um das Datagrid aufzufüllen, müssen die Zellen mithilfe eines Formatwechsel-Ereignishandlers aktualisieren, der die Änderungen festschreibt, während das Datagrid gezeichnet wird.

Verwandte Themen