Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
DatagridView Anzeige/Formatierung einer Zeile in Abhängigkeit eines Wertes?
diana
myCSharp.de - Member



Dabei seit:
Beiträge: 586
Herkunft: Sachsen

Themenstarter:

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

beantworten | zitieren | melden

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?
Gruß Diana
private Nachricht | Beiträge des Benutzers
bredator
myCSharp.de - Member



Dabei seit:
Beiträge: 357

beantworten | zitieren | melden

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.
Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von bredator am .
private Nachricht | Beiträge des Benutzers
muntablues
myCSharp.de - Member



Dabei seit:
Beiträge: 231
Herkunft: AUT

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
spike24
myCSharp.de - Member



Dabei seit:
Beiträge: 443
Herkunft: Steiermark Österreich

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
ErfinderDesRades
myCSharp.de - Experte

Avatar #avatar-3151.jpg


Dabei seit:
Beiträge: 5.299

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
Balaban_S
myCSharp.de - Member

Avatar #avatar-3199.jpg


Dabei seit:
Beiträge: 194
Herkunft: Zürich/Schweiz

beantworten | zitieren | melden

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
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Balaban_S am .
private Nachricht | Beiträge des Benutzers