2013-01-03 6 views
5

Ich möchte fragen, wie eine Reihe automatisch die Farbbasis ihrer Schrift auf den Wert einer Spalte in dataGridView aktualisiert.(datagridview) Aktualisiere die Schriftfarbenbasis einer Zeile auf einen Spaltenwert

Zum Beispiel hat eine Tabelle 4 Spalten: id, name, rentPayMent and check.

prüfen für jede Zeile zu sehen, ob der Wert von check == 0 Wenn ja, dann Schrift dieser Zeile der color = red Else do nothing

an der Bewegung, ich den Code wie folgt verwenden, aber es Fehler bringen mit

Objektverweis nicht auf eine Instanz eines Objekts festgelegt, war System.NullReferenceException unhandled

private void dataGridView1_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e) 
{ 
    foreach (DataGridViewRow row in dataGridView1.Rows) 
    { 
     if (row.Cells[3].Value.ToString() == "0") //**Object reference not set to an instance of an object** 
     { 
      row.DefaultCellStyle.BackColor = Color.Red; //then change row color to red 
     } 
    } 
} 

Danke für alle, ich habe die Lösung schon.

private void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e) 
    { 
     if (dataGridView1.Rows[e.RowIndex].Cells[3].Value != null && !string.IsNullOrWhiteSpace(dataGridView1.Rows[e.RowIndex].Cells[3].Value.ToString())) 
     { 
      if (dataGridView1.Rows[e.RowIndex].Cells[3].Value.ToString().Trim() == "0") 
       dataGridView1.Rows[e.RowIndex].DefaultCellStyle = new DataGridViewCellStyle { ForeColor = Color.Red }; 
     } 
     else 
     { 
      dataGridView1.Rows[e.RowIndex].Cells[3].Style = dataGridView1.DefaultCellStyle; 
     } 

    } 
+1

folgt Ich denke, Sie sollten diese Verbindung Refar meine Hilfe Be You [staskoverflow] [1] [1]: http://stackoverflow.com/questions/12202751/how-can-i-make-a-datagridview-cells-font-a-particular-color –

+1

winforms oder asp.net? –

+0

ist es in winforms. – Kam2012

Antwort

1
private void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e) 
{ 
    if (dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value != null && !string.IsNullOrWhiteSpace(dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString())) 
    { 
     dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Style = new DataGridViewCellStyle { ForeColor = Color.Orange, BackColor = Color.Blue }; 
    } 
    else 
    { 
     dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Style = dataGridView1.DefaultCellStyle; 
    } 
} 
0

Ich habe das auf winform.

versuchen, meinen Code unten:

private void dataGridView1_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e) 
     { 

      foreach (DataGridViewRow row in dataGridView1.Rows) 
      { 

       if (row.Cells["YourDatagridColumnName"].Value.ToString() == "0") //if check ==0 
       { 
        row.DefaultCellStyle.BackColor = Color.Red; //then change row color to red 
       } 

      } 

     } 

Mit freundlichen Grüßen

+0

Ich habe eine Fehlermeldung erhalten, nicht die Spalte mit dem Namen check kann nicht gefunden werden. Parametername: columnName, auch wenn ich versuche, den Spaltennamen in ID oder Name zu ändern, gibt es immer noch dieselbe Warnung. – Kam2012

+0

Bitte sehen Sie meinen aktualisierten Beitrag. Sie müssen die vorhandene DataGrid-Spalte festlegen. Stellen Sie sicher, dass Ihre Spalte DataPropertyName und HeaderText gleich ist. – BizApps

+0

hat immer noch das gleiche Problem, konnte die Prüfung nicht finden, auch ich benutze die Prüfung anstelle von "YourDatagridColumnName", und ich habe bestehende DataGrid-Spalte gesetzt. Und die Spalte DataPropertyName und HeaderText ist auch gleich – Kam2012

-1

ich persönlich diese Logik mit JavaScript umgehen würde. Aber wenn es ein absolutes Muss ist, es im CodeBehind zu haben, würde ich prüfen, ob die Zelle einen Wert von "0" hat. Wenn dies der Fall ist, würde ich eine CssClass von "rot" (oder den von Ihnen gewählten Namen) hinzufügen und dann das CSS schreiben, um den Farbwert zu erhalten. Dies erleichtert zumindest die Pflege, anstatt dass die Farbe Server-seitig behandelt wird.

0

ich etwas Ähnliches wie folgt aus:

private void dataGridView1_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e) 
{ 
    foreach (DataGridViewRow row in dataGridView1.Rows) 
    { 
     if(!string.IsNullOrEmpty(row.Cells[3].Value.ToString())) // make sure the value is present 
     (
      if (row.Cells[3].Value.ToString() == "0") 
      { 
       row.DefaultCellStyle.BackColor = Color.Red; //then change row color to red 
      } 
     ) 
    } 
} 
0

Es preffered ist die Spalten in der Datagridview zu nennen. Benennen Sie beispielsweise die Spaltenüberprüfung als colCheck. das Cellformatting-Methode Verwenden Sie die Zeile Schriftfarbe zu ändern, wie

private void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e) 
{ 

    if (e.RowIndex > -1 && e.ColumnIndex == dataGridView1.Columns["colCheck"].Index) 
     { 
      if (e.Value != null) 
      { 

       if (dataGridView1.Rows[e.RowIndex].Cells["colCheck"].Value.ToString() == "1") 
       { 
        for (int i = 0; i < this.dataGridView1.Columns.Count; i++) 
        { 
         this.dataGridView1.Rows[e.RowIndex].Cells[i].Style.ForeColor = Color.Red; 
        } 

       } 
       else 
       { 
        for (int i = 0; i < this.dataGridView1.Columns.Count; i++) 
        { 
         this.dataGridView1.Rows[e.RowIndex].Cells[i].Style.ForeColor = Color.Black; 
        } 
       } 
      } 
     } 


} 
Verwandte Themen