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
Hallo erzincan24,
was hast du bisher versucht? Wo hängt es?
Gruss
Coffeebean
Microsoft MVP // Me // Blog // GitHub // @Egghead // All my talks // Speakerdeck
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
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
Microsoft MVP // Me // Blog // GitHub // @Egghead // All my talks // Speakerdeck
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
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
Microsoft MVP // Me // Blog // GitHub // @Egghead // All my talks // Speakerdeck
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
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.
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
Wo stehen denn die berechneten Daten? Die müssen ja irgendwo vorgehalten werden.
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ß
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)
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
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.
Ok, Danke 👍
ich nehm dann mal manche unnötigen Convrtierungen raus.
gruß
erzincan24