Laden...

Datagridview (zelle mit dem höchsten Wert Farbig hinterlegen )

Erstellt von erzincan24 vor 8 Jahren Letzter Beitrag vor 8 Jahren 4.078 Views
E
erzincan24 Themenstarter:in
17 Beiträge seit 2015
vor 8 Jahren
Datagridview (zelle mit dem höchsten Wert Farbig hinterlegen )

HAllo Community,

folgende Situation, ich habe ein Datagridview diese besitzt eine Spalte die heisst (wirtschaftlichkeit) an der [0] stelle, nach der Berechnung der wirtschaftlichkeit soll die Zelle mit dem höchstenwert Farbig hintelegt werden. Die spalte wird nicht sortiert der höchste Wert kann nämlich auch in der mitte dieser Spalte sich befinden.

Bedanke mich vorraus

Grüße

Erzincan24

2.207 Beiträge seit 2011
vor 8 Jahren

Hallo erzincan24,

was hast du bisher versucht? Wo hängt es?

Gruss

Coffeebean

E
erzincan24 Themenstarter:in
17 Beiträge seit 2015
vor 8 Jahren

hi Danke für dei schnelle hilfe,

bin ratlos ich weiss wie ich aus der DB direkt den MAX wert herausfilter oder nach größe Sortiert Anzeige.

Aber bei mir wird die wirtschaftlichkeit neu berechnet, kann man da einen Befehl wie;

..."Select MAX("Name der ID Spalte") FROM Tabellenname"...

anwenden oder ist das völlig sinnfrei 8o
hoffe ich kann mich klar ausdrücken

Gruß
Erzincan24

2.207 Beiträge seit 2011
vor 8 Jahren

Hallo erzincan24,

probiers doch aus? Wo hängt es denn jetzt genau? Das Auslesen aus der Datenbank, das Darstellen oder der Hintergrund der Zeile /Zelle, in der das Ganze dargestellt wird?

Im ersten Beitrag war vom Hintergrund einer Zelle die Rede, jetzt sind wir bei der DB.

[Hinweis] Wie poste ich richtig? Punkt 5

Gruss

Coffeebean

E
erzincan24 Themenstarter:in
17 Beiträge seit 2015
vor 8 Jahren

Hallo Cofeebean,

nein, ich lese nichts aus einer DB aus,wirtschaftlichkeit wird Berechnnet und eine neue Spalte erzeugt nach dem Klick eines Buttons, ich möchte lediglich das die Zelle[n] in der Spalte [0]= wirtschafltichkeit z.B die Hintergrundfarbe "grün" hat.

Weiss nicht wie ich da rangehen soll

Danke für die Geduld 😃

Gruß
erzincan24

2.207 Beiträge seit 2011
vor 8 Jahren

Hallo erzincan24,

es gibt eine DataGridViewCellStyle Class, das kannst du erstellen und per Style.ApplyStyle auf deiner Cell anwenden. Davor natürlich das Background-Property setzen. Ungetestet, aber das würde ich jetzt mal probieren.

Gruss

Coffeebean

E
erzincan24 Themenstarter:in
17 Beiträge seit 2015
vor 8 Jahren

Hallo Cofeebean,

danke, ich versuch mal mein Glück.

Meistens sind die beispiele lediglich um alle Zellen zu foramtieren.

Oder wenn die Zellen einen bestimmt wert besitzen
wie z.B = durch eine Case Anweisung
zelle x = 1 dann färbe rot;
zelle x = 2 dann färbe green;
zelle x = 3 dann färbe blau;

Aber ich möchte den MAX Wert in einer bestimmen farbe haben.

Gruß

Erzincan24

T
64 Beiträge seit 2011
vor 8 Jahren

Na dann mach das doch. 🤔
Zelle x=MAX dann färbe rot
Wo hängt es denn genau? Das Maximum musst du natürlich vorm färben suchen aber dazu gibt es viele Mittel und Wege.

E
erzincan24 Themenstarter:in
17 Beiträge seit 2015
vor 8 Jahren

Ja Danke aber mein problem ist es es ja das MAX aus dieser Spalte zu suchen 😕

Bekomms net gebacken ehrlich gesagt.(Amateur Programmierer )

Kannst du mir eine Möglichkeit zeigen, Ohne die Spalte erst mal nach der Größe zu Sortieren.
Die Spalte hatt keine festen Werte die anzahl der Zeilen können auch variieren.
Gruß

Erzincan24

1.040 Beiträge seit 2007
vor 8 Jahren

Wo stehen denn die berechneten Daten? Die müssen ja irgendwo vorgehalten werden.

E
erzincan24 Themenstarter:in
17 Beiträge seit 2015
vor 8 Jahren

Steht im Datagridview[0] Sie heisst wirtschaftlichkeit.

folgende Schleife habe ich angewendet:

// For Each Schleife für die Berechnung 

     foreach (DataGridViewRow item in dgv1.Rows)
                {
                    int n = item.Index;

                    // Berechnung                  
  
dgv1.Rows[n].Cells[0].Value = (betrag / Double.Parse(dgv1.Rows[n].Cells[3].Value.ToString().ToString())) -
                                                  (verbrauch * ((Double.Parse(dgv1.Rows[n].Cells[2].Value.ToString()))*2) / 100);

                }
            }

Wollte nun lediglich das sich die Zelle mit dem höchsten Wert sich hervorhebt

Gruß

D
261 Beiträge seit 2015
vor 8 Jahren

Speicher dir den ersten Index in einer Variable und vergleiche bei jeder Iteration ob der Wert vom aktuellen Index größer (bzw. größer gleich) ist als der Wert vom zuletzt gespeicherten Index. Ist die Schleife fertig, hast du den Index des größten Wertes in deiner Variable. (bzw. musst du dir etwas überlegen falls es gleichwertige Einträge gibt und daraufhin mehrere markiert werden müssen)

E
erzincan24 Themenstarter:in
17 Beiträge seit 2015
vor 8 Jahren

Habs Gelöst habe nun folgenden Code angwende, danke nochmals für eure Hilfe

double d = 0.0;
                int i = 0;
                // For each Schleife
                foreach (DataGridViewRow item in dgv1.Rows)
                {
                    int n = item.Index;
                    // Defintion Parse https://msdn.microsoft.com/de-de/library/xbtzcc4w%28v=vs.110%29.aspx
                    // Berechnung = (Betrag / Preis) - (Verbrauch * distanz )
                    
                    
                    dgv1.Rows[n].Cells[0].Value = (betrag / Double.Parse(dgv1.Rows[n].Cells[3].Value.ToString().ToString())) -
                                                  (verbrauch * ((Double.Parse(dgv1.Rows[n].Cells[2].Value.ToString()))*2) / 100);
                    //Schleife höchster wert wird farbig Markiert
                    if (Convert.ToDouble(dgv1.Rows[n].Cells[0].Value) < d)
                        i=n;

                }
                    dgv1.Rows[i].DefaultCellStyle.BackColor = Color.Red;

Grüße

Erzincan24

F
10.010 Beiträge seit 2004
vor 8 Jahren

Und genau so sollte man es auf keinen Fall machen.

Double.Parse(dgv1.Rows[n].Cells[3].Value.ToString().ToString())

Merkst du was hier passiert?
Du hast a, die Daten ins DGV gefrickelt, was man nicht macht, und 2. wandelst du hier den double Wert ( der es sein sollte ) 2 x in einen string um ihn dann zu parsen.
Und dann weiter irgendwelchen frickel kram zu machen.

Wenn du dir eine Klasse erstellst die einer Zeile entspricht, kannst du eine BindingList<DeineKlasse> an das DGV binden, dann erstellst du noch eine Variable die den Wert des MaxWerts beinhaltet und dann benutzt du das CellFormatting Ereignis zum färben.

Alles viel einfacher, und du musst nicht ständig konvertieren.

E
erzincan24 Themenstarter:in
17 Beiträge seit 2015
vor 8 Jahren

Ok, Danke 👍

ich nehm dann mal manche unnötigen Convrtierungen raus.

gruß
erzincan24