Laden...

Wie DataGridView richtig "färben"?

Erstellt von Voidcore vor 14 Jahren Letzter Beitrag vor 14 Jahren 1.780 Views
V
Voidcore Themenstarter:in
106 Beiträge seit 2007
vor 14 Jahren
Wie DataGridView richtig "färben"?

Hallo,

ich weiß das ich Zellen im Datagridview färben kann.
Anfangs habe ich das DGV Zeile für Zeile gefüllt, bis mir jemand sagte, es sei mit DataTAbles sinnvoller. Dies tu ich nun.

Wenn ich nun bestimmte Zellen färben will, muss ich dann Datagridview / DataTable durch parsen und färben oder gibt es da bessere, konfortablere Möglichkeiten?

Danke im vorraus

M
24 Beiträge seit 2009
vor 14 Jahren

Hallo Voidcore,

versuche es mal in etwa so:


protected void gridResult_RowDataBound(object sender, System.Web.UI.WebControls.GridViewRowEventArgs e)
  {
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
      if (e.Row.RowIndex == 0)
      {
        e.Row.Cells[0].Style["font-weight"] = "bold";
      }
      e.Row.Cells[4].Style["font-weight"] = "bold";
      e.Row.Cells[5].Style["font-weight"] = "bold";
      
      if (e.Row.RowIndex > 3)
      {
        int countCells = e.Row.Cells.Count;
        Decimal decimalVal;


        for (int i = 5; i != countCells; i++)
        {
          // Nicht Dezimalzahlen/IntegerWerte rot färben
          if (!Decimal.TryParse(e.Row.Cells[i].Text, out decimalVal))
            e.Row.Cells[i].ForeColor = Color.Red;
        }
      }
    }
  }


fürs Rendern, das nicht vergessen:


public override void VerifyRenderingInServerForm(Control control)
  {
    return;
  }

Gruß marc_bee

2.760 Beiträge seit 2006
vor 14 Jahren

@marc_bee: Nicht Web 😉

M
24 Beiträge seit 2009
vor 14 Jahren

@marc_bee: Nicht Web 😉

Hast recht, habe nicht auf den Forum Titel geschaut, Asche auf mein Haupt.
Gruß

5.299 Beiträge seit 2008
vor 14 Jahren

Hi!

Sowas geht im _CellPaint, oder, wenn Zeilenweises Colorieren gewünscht ist, im _RowPrepaint

Auf Datagridview colorieren habichwas mit Zeilenweise gemacht, und eigentlich ohne Ownerdrawing.

OwnerDrawing wäre flexibler, und - ja - würde die Werte der angebundenen DataTable auslesen.
Aber immer nur diejenigen der Zellen, die grade neu zu zeichnen sind, und dassis sehr performant, da das ja nicht so viele sind.

Der frühe Apfel fängt den Wurm.

71 Beiträge seit 2008
vor 14 Jahren

viel Spaß beim Färben 😄


this.dataGridView1.CellFormatting += new System.Windows.Forms.DataGridViewCellFormattingEventHandler(this.dataGridView1_CellFormatting);

private void dataGridView1_CellFormatting(object sender, System.Windows.Forms.DataGridViewCellFormattingEventArgs e)
        {
            if (dataGridView1.Columns[e.ColumnIndex].Name == "Spaltenname")
            {
                    if (Convert.ToInt32(e.Value) == 1)  //zellen mit dem wert 1 werden 
                    e.CellStyle.BackColor = Color.White;  //weiß gefärbt
            }
}
5.299 Beiträge seit 2008
vor 14 Jahren

naja, das Formatting wird ja im Zusammenhang mit dem Cellpainting gefeuert.
Und wenn man da nun den CellStyle ändert, zieht das einen erneuten Paint-Vorgang nach sich.

Da würde ich lieber gleich das CellPainting nehmen, und die Celle eben painten.

Der frühe Apfel fängt den Wurm.

5.299 Beiträge seit 2008
vor 14 Jahren

also hier nochmal der (auch oben) korrigierte Link zum Ansatz mit RowPrepaint: http://www.activevb.de/tipps/vbnettipps/tipp0108.html

Der frühe Apfel fängt den Wurm.