C# Formatierung von Datagridview

Nighthawk1977

Cadet 4th Year
Registriert
Sep. 2009
Beiträge
113
Hallo zusammen,

ich arbeite gerade an einer größeren Auswertung und habe bei der Formatierung von einem Datagridview Schwierigkeiten.
Vorab: Ich arbeite in der Entwicklungsumgebung unseres ERP Systems, Syntax ist C#, aber grundsätzlich geht nicht immer alles. Außerdem bin ich kein gelernter Programmierer.

Ich setze die Formatierung meines Gridviews über eine Funktion

Code:
public void format_dgv_kundenebene()
{
	try
	{
		progress_kunde.Value = 0;
		datensaetze = dgv_kundenebene.Rows.Count;
		progress_kunde.Maximum = datensaetze;
		progress_kunde.FillColorBottom = Color.Red;
		progress_kunde.FillColorTop = Color.Orange;
		
		Planat.Controls.PDataGridViewBase grid = dgv_kundenebene;
		grid.Columns[11].HeaderCell.Style.Font = new Font("Microsoft Sans Serif", 8, FontStyle.Bold);
		grid.Columns[14].HeaderCell.Style.Font = new Font("Microsoft Sans Serif", 8, FontStyle.Bold);
		grid.Columns[16].HeaderCell.Style.Font = new Font("Microsoft Sans Serif", 8, FontStyle.Bold);
		grid.Columns[20].HeaderCell.Style.Font = new Font("Microsoft Sans Serif", 8, FontStyle.Bold);
		grid.Columns[23].HeaderCell.Style.Font = new Font("Microsoft Sans Serif", 8, FontStyle.Bold);
		
		foreach (DataGridViewRow rows in dgv_kundenebene.Rows)
		{
			zaehlen = zaehlen + 1;
			progress_kunde.Value = zaehlen;
			
			rows.Cells["knd_rohertrag"].Style.BackColor = Color.FromArgb(204, 255, 204);
			rows.Cells["knd_rohertrag"].Style.Font = new Font("Microsoft Sans Serif", 8, FontStyle.Bold);
			if (Convert.ToDouble(rows.Cells["knd_rohertrag"].Value) < 0)
			{
				rows.Cells["knd_rohertrag"].Style.ForeColor = Color.Red;
			}
			
			rows.Cells["knd_db1"].Style.BackColor = Color.FromArgb(204, 255, 204);
			rows.Cells["knd_db1"].Style.Font = new Font("Microsoft Sans Serif", 8, FontStyle.Bold);
			if (Convert.ToDouble(rows.Cells["knd_db1"].Value) < 0)
			{
				rows.Cells["knd_db1"].Style.ForeColor = Color.Red;
			}
			
			rows.Cells["knd_db2"].Style.BackColor = Color.FromArgb(204, 255, 204);
			rows.Cells["knd_db2"].Style.Font = new Font("Microsoft Sans Serif", 8, FontStyle.Bold);
			if (Convert.ToDouble(rows.Cells["knd_db2"].Value) < 0)
			{
				rows.Cells["knd_db2"].Style.ForeColor = Color.Red;
			}
			
			rows.Cells["knd_db3"].Style.BackColor = Color.FromArgb(204, 255, 204);
			rows.Cells["knd_db3"].Style.Font = new Font("Microsoft Sans Serif", 8, FontStyle.Bold);
			if (Convert.ToDouble(rows.Cells["knd_db3"].Value) < 0)
			{
				rows.Cells["knd_db3"].Style.ForeColor = Color.Red;
			}
			
			rows.Cells["knd_ebit"].Style.BackColor = Color.FromArgb(204, 255, 204);
			rows.Cells["knd_ebit"].Style.Font = new Font("Microsoft Sans Serif", 8, FontStyle.Bold);
			if (Convert.ToDouble(rows.Cells["knd_ebit"].Value) < 0)
			{
				rows.Cells["knd_ebit"].Style.ForeColor = Color.Red;
			}
		}
		
		this.dgv_kundenebene.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.DisplayedCells;
	}
	catch(Exception ex)
	{
		ShowError("Fehler: format_dgv_kundenebene", ex);
	}
}

Aktuell rufe ich das so auf: Ich lasse zuerst das Datagridview befüllen und kann dann auf Knopfdruck die o.g. Funktion ausführen. Das geht beim allerersten Aufruf sehr schnell und ist quasi sofort erledigt.

Der User kann das Datagridview z.B. umsortieren, die Formatierung ist dann weg. Ruft man dann erneute die Funktion zum Formatieren auf, dauert das locker 30 Sekunden. Ich habe daher aktuell erst mal keine automatische Neuformatierung bei geänderter Sortierung aktiviert.

Ich glaube, mein zeilenweises Durchgehen um Farbe und Schriftart zu setzen ist "rustikal", ich hatte vorher das Problem, dass die farbliche Formatierung nicht bei der wechselweisen Farbmarkierung der Zeilen funktionierte. Eleganter wäre vermutlich, wenn ich nur für gewisse Spalten RowsDefaultCellStyle und AlternatingRowsDefaultCellStyle definieren könnte, das ist mir aber nicht gelungen.

Kann mir jemand einen Tipp geben, warum die Formatierung beim erstmaligen Ausführen sofort da ist und bei erneutem Ausführen nach Umsortierung so ewig dauert?
 
Wie schon angedeutet bin ich in der Entwicklungsumgebung („BI Designer“) unseres ERP Systems unterwegs. Da hab ich nur recht eingeschränkte Möglichkeiten. Mehr als eine Syntaxprüfung hab ich da nicht zur Verfügung.
 
Zurück
Oben