Laden...

DatagridView Anzeige/Formatierung einer Zeile in Abhängigkeit eines Wertes?

Erstellt von diana vor 12 Jahren Letzter Beitrag vor 12 Jahren 3.390 Views
D
diana Themenstarter:in
586 Beiträge seit 2004
vor 12 Jahren
DatagridView Anzeige/Formatierung einer Zeile in Abhängigkeit eines Wertes?

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?

:::

B
357 Beiträge seit 2010
vor 12 Jahren

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.

M
231 Beiträge seit 2007
vor 12 Jahren

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,


Gruß MB

Home of DigiJay - DJ-Freeware

S
443 Beiträge seit 2008
vor 12 Jahren

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

5.299 Beiträge seit 2008
vor 12 Jahren

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.

194 Beiträge seit 2006
vor 12 Jahren

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