
Hallo Robert,
Robert, Dein Quellcode missachtet zun??chst recht extrem
das DRY-Prinzip:
[CcdRoterGrad ??? clean-code-developer]
http://www.clean-code-developer.de/wiki/CcdRoterGrad#DontRepeatYourselfDRY
Daraus resultieren schon mal eine Menge zus??tzlicher
Aufrufe, die Du eigentlich alle schon gemacht hast, was
ggf. Performance kostet. Weiterhin wird es recht
un??bersichtlich. Ganz unten habe ein Beispiel, wie man
es etwas verbessern k??nnte.
________________
Das CellFormatting-Ereignis tritt jedesmal auf, wenn
eine Zelle gezeichnet wird. Du solltest deshalb
beim Behandeln dieses Ereignisses eine langwierige
Verarbeitung vermeiden.
________________
Es k??nnen ggf. Exceptions entstehen
Vielleicht behandelst Du das DataError Ereignis,
so dass Du sie nicht siehst, das kann enorm
verz??gern.
_______________
Um anzugeben, dass keine weitere Formatierung
von Werten erforderlich ist, solltest Du die
e.FormattingApplied-Eigenschaft auf true festlegen.
Ist aber wohl bei Dir nicht der Fall.
______________
Es ist merkw??rdig, dass Du jedesmal zu decimal
konvertieren musst, denn normal nimmt man dann
DataGridViewColumn's die schon decimal als ValueType
haben. Dadurch wird die Performance besser und der
Aufwand ebenfalls niedriger.
______________
// Beispiel: (grober Ansatz)
//
using System;
using System.Drawing;
using System.Windows.Forms;
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
DataGridView dgvMfsShareFlow = new DataGridView();
DataGridView dgv;
private void Form1_Load(object sender, EventArgs e)
{
dgv = dgvMfsShareFlow;
Controls.Add(dgv); dgv.Dock = DockStyle.Fill;
dgv.CellFormatting += new DataGridViewCellFormattingEventHandler(
dgv_CellFormatting);
dgv.AllowUserToAddRows = false;
DgvAddColumn("Diff%", typeof(decimal));
DgvAddColumn("Richtlinie%", typeof(decimal));
DgvAddColumn("Toleranz%", typeof(decimal));
DgvAddColumn("DiffNetto%", typeof(decimal));
for (int i = 0; i < 1000; i++)
dgv.Rows.Add(4000m + i, 300m + i, 20m + i, 1m + i);
this.Width = 500;
}
private void DgvAddColumn(string name, Type type)
{
DataGridViewColumn c = new DataGridViewTextBoxColumn();
c.ValueType = typeof(string); c.Name = name;
dgv.Columns.Add(c);
}
private void dgv_CellFormatting(object sender,
DataGridViewCellFormattingEventArgs e)
{
Color col;
var cells = dgv.Rows[e.RowIndex].Cells;
var diffCell = cells["Diff%"];
var richtlinieCell = cells["Richtlinie%"];
var toleranzCell = cells["Toleranz%"];
var diffNettoCell = cells["DiffNetto%"];
decimal diff = (decimal)diffCell.Value;
decimal richtlinie = (decimal)richtlinieCell.Value;
decimal toleranz = (decimal)toleranzCell.Value;
if (diff > 0)
{
if (diff >= richtlinie)
{