Laden...

Farbe einer DataGridView-Zelle dynamisch anpassen

Erstellt von Coding vor 15 Jahren Letzter Beitrag vor 15 Jahren 5.578 Views
C
Coding Themenstarter:in
9 Beiträge seit 2008
vor 15 Jahren
Farbe einer DataGridView-Zelle dynamisch anpassen

Hallo zusammen,

könnt ihr mir sagen, wie man eine Zelle einer DataGridView farbig hinterlegen kann?

Folgendes Szenario:

Ich hole mir Daten aus einem SQL-Server und speichere diese in einem DataSet. Dieses DataSet wird dann als DataSource der DataGridView-Komponente zugewiesen. Es soll nun eine Funktionalität implementiert werden, die Werte einer bestimmten Spalte des DataSets überprüft und je nach Wert eine bestimmte Farbe in der DataGridView-Zelle anzeigt.

Bsp.:

Spalte: Status

Wert: 1 -> Farbe = weiß
Wert: 2 -> Farbe = grün
Wert: 3 -> Farbe = rot
etc.

Wie kann ich diese Funktionalität am besten realisieren? Sollte ich die Farben dann setzen, wenn das DataSet schon dem DataGridView zugewiesen wurde, oder sollte man es anderst realisieren? Es soll also überprüft werden, welcher Wert in der Zelle steht und je nach wert soll eine Farbe gesetzt werden.

Vielen Dank für eure Ratschläge!!
Gruß

F
84 Beiträge seit 2008
vor 15 Jahren

Moin

ein ähnliches Thema wurde bereits hier angeschnitten.

Mir würden auf Anhieb 2 Zeitpunkte einfallen die Farbmarkierungen zu setzen.

Entweder nachdem die Daten an das DGV übergeben wurden eine foreach - Schleife durch laufen lassen und die entsprechenden Zellen einfärben oder du verzichtest auf DataSource und schaufelst die Daten via foreach vom DataSet in das DGV und in dieser Schleife kannst du dann gleichzeitig die Werte prüfen und gleich farblich übergeben.

J
3.331 Beiträge seit 2006
vor 15 Jahren

... oder du verzichtest auf DataSource und schaufelst die Daten via foreach vom DataSet in das DGV und in dieser Schleife kannst du dann gleichzeitig die Werte prüfen und gleich farblich übergeben.

Vergiss den zweiten Vorschlag: Das DGV ist nicht als Datenspeicher gedacht, sondern zur Anzeige und ggf. manuellen Bearbeitung. Als Datenspeicher ist das DataSet vorgesehen; warum sollte man auf dessen Vorteile verzichten?

Aber der Rest von fod's Antwort ist vollkommen richtig. Vor allem hättest Du durch genaues Hinschauen den Thread von gestern/vorgestern sehen können.
Wie poste ich richtig? Punkt 1.1

Jürgen

5.299 Beiträge seit 2008
vor 15 Jahren

Ich tu fods 1. Hinweis auswalzen: [0313] Datagridview colorieren](http://www.activevb.de/cgi-bin/tippupload/preview.pl?tippnr=313&sid=) scheint mir ziemlich genau das gewünschte Verhalten zu produzieren (colorierte Temperatur-Angaben). Ist aber VB.Net, müssteste dir also übersetzen, etwa mit codeconverter

Der frühe Apfel fängt den Wurm.

71 Beiträge seit 2008
vor 15 Jahren

so kannst du es machen:

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 == "Deine Spalte") 
            {
                    if (Convert.ToInt32(e.Value) == 1) 
                    e.CellStyle.ForeColor = Color.White; 
            }
}
J
3.331 Beiträge seit 2006
vor 15 Jahren

so kannst du es machen:

Willst Du nicht den **Code **als solchen markieren? Beitrag editieren, Bereich markieren, #-Button drücken. Danke!

Außerdem sind die Convert-Methoden zu vermeiden. Besser sind fast immer **Parse, TryParse, ParseExact, TryParseExact **(hier der int-Klasse). In dieser Situation ist vielleicht sogar der direkte cast mit (int) möglich.

Jürgen

U
102 Beiträge seit 2008
vor 15 Jahren
GridView1.Rows[GridView1.SelectedIndex].BackColor = Color.LightGreen;

"GridView1.SelectedIndex" ist bei dir entsprechend der index der zeile mit einem bestimmten inhalt...

also zeilen auf inhalt prüfen, index bei übereinstimmung merken, hintergrundfarbe von zeile bei index setzen...

richtig?
effektiv?

😁

Does Visual Studio Rot the Mind?