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
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
@marc_bee: Nicht Web 😉
@marc_bee: Nicht Web 😉
Hast recht, habe nicht auf den Forum Titel geschaut, Asche auf mein Haupt.
Gruß
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.
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
}
}
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.
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.