Hallo,
ich möchte in meinem DataGridview eine Zeile anders formatieren in Abhängigkeit eines Wertes in einer Spalte des zugrunde liegenden Datasets, die aber nicht als Spalte im DataGridView erscheint. Also wenn eine Zeile eine bestimmte ID in der Spalte ID hat soll die Zeile im DataGridView anders formatiert werden... Hat jemand eine Idee?
:::
Ohne wahnsinnig viel Ahnung davon zu haben, wie man so etwas möglichst gut und performant macht, würde ich hier mit einer for-Schleife die Dataset.Rows[zeile][spalte] durchlaufen und beim entsprechenden Value den Zähler der Schleife dazu heranziehen, um die Zeile des DataGridViews anzuspringen und einzufärben oder anderweitig zu formatieren.
Also in etwa so:
for (int i=0; i<dataset.rows.count; i++)
{
if (dataset.rows[i][SpalteID] == wert)
{
formatiereGridRow(dataGridView.rows[i][SpalteID]);
}
}
Dazu natürlich noch entsprechend die methode "formatiereGridRow(DataGridRow row)" implementieren oder die Formatierung direkt in der Spalte vornehmen.
Was liegen für Daten vor die bearbeitet werden?
Grundsätzlich ist es aber meiner Meinung nach am einfachsten, von einer passendn Column bzw. Cell zu erben und diese dann zu überschreiben. Hab das auch schon gemacht um z.B double Werte nur mit einen Komma darzustellen.
Gutes Beispiel (auch wenns hier um eine grafische Celle geht) findest du hier: Sample Code: DataGridView Rating/Ranking column like in Windows Media Player ?
So denn,
Ich hab sowas mal im CustomDrawCell Event gemacht.
war von der Performance nicht so schrecklich. wenn man sich nur auf bereits geladene Daten bescchränkt ist sollten sich die Performance einbussen in Grenzen halten.
mbg
Rossegger Robert
mehr fragen mehr wissen
Montag morgen ist die beste Zeit um eine erfolgreiche Woche zu beginnen
Sowas macht man im CellPainting. Als Sample kannichgrad nur Vergleich DatagridView - ListView - da wird in Abhängigkeit eines Wertes ein Image reingemalt.
stattdessen könnteste ja iwas anneres reinmalen, auch mit .DrawString.
Und die EventArgs liefern sogar eine Methode, mit der du Standard-Mal-Elemente zu zeichnen beim DGV lassen kannst
Der frühe Apfel fängt den Wurm.
Hallo
Wenn die ganze Zeile formatiert werden soll empfehle ich hierfür das **RowPrePaint **und zwar in dieser Form:
DataGridViewCellStyle CustomStyle = new DataGridViewCellStyle() { BackColor = Color.Yellow, ForeColor = Color.LightGray };
private void TheDataGridView_RowPrePaint(object sender, DataGridViewRowPrePaintEventArgs e)
{
if (e.RowIndex >= 0)
{
DataGridViewRow row = TheDataGridView.Rows[e.RowIndex];
YourEntity ent = (YourEntity)row.DataBoundItem;
if (CheckVal(ent)/*bitte implementieren*/ )
{
row.DefaultCellStyle = CustomStyle;
}
}
}
EDIT://
Zu beachten ist, dass im Falle einer DataTable natürlich das **YourEntity **in eine **DataRowView ** gecasted werden sollte.
Gruss
Balaban_S