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.:
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ß
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.
... 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
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.
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;
}
}
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
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?