Hallo zusammen,
vielleicht habt Ihr ja einen Tipp.
Ich habe folgende Methode, die mir einen View für ein DataGridView zusammenstellt und dieses dann setzt. Das ganze funktioniert so auch wie es soll. Allerdings sind die Ladezeiten gigangtisch im Verhältnis zu den Datensätzen.
Ich habe den gesamten Code schon gedebugt und alles geht sehr schnell von statten, außer diese Zeile:
Die verdoppelt die Ladezeit gut mal. So braucht er z.B. für eine Zeile fast 1 ganze Sekunde. Für die ganze Berechnung der Zeile gehen aber nur wenige ms drauf.
Ich bin mit meinem Latein hier echt am Ende.
Viele Grüße,
Marvin
vielleicht habt Ihr ja einen Tipp.
Ich habe folgende Methode, die mir einen View für ein DataGridView zusammenstellt und dieses dann setzt. Das ganze funktioniert so auch wie es soll. Allerdings sind die Ladezeiten gigangtisch im Verhältnis zu den Datensätzen.
C#-Quellcode
- private void FillDataGridView(DataTable AufgabenTabRaw)
- {
- lblAnzahl.Text = AufgabenTabRaw.Rows.Count.ToString();
- DataTable AufgabenTab = new DataTable();
- AufgabenTab.Columns.Add("cA_NR", typeof(int));
- AufgabenTab.Columns.Add("cANLAGE_USERID", typeof(String));
- AufgabenTab.Columns.Add("cAUFGABE_FAELLIG", typeof(DateTime));
- AufgabenTab.Columns.Add("cAUFGABE_START", typeof(DateTime));
- AufgabenTab.Columns.Add("cBEARBEITET_USERID", typeof(String));
- AufgabenTab.Columns.Add("cfür", typeof(String));
- AufgabenTab.Columns.Add("cTITEL", typeof(String));
- AufgabenTab.Columns.Add("cBESCHREIBUNG", typeof(String));
- AufgabenTab.Columns.Add("cWichtigkeit", typeof(Image));
- AufgabenTab.Columns.Add("cDauer", typeof(String));
- AufgabenTab.Columns.Add("cGebraucht", typeof(String));
- AufgabenTab.Columns.Add("cERLEDIGT_PROZENT", typeof(int));
- AufgabenTab.Columns.Add("cERLEDIGT_AM", typeof(DateTime));
- AufgabenTab.Columns.Add("bgColor", typeof(Int32));
- AufgabenTab.Columns.Add("frontColor", typeof(Int32));
- AufgabenTab.Columns.Add("cAnGoU", typeof(String));
- AufgabenTab.Columns.Add("cWichtigkeitVal", typeof(Int32));
- AufgabenTab.Columns.Add("cAufgabeAnValue", typeof(Int32));
- AufgabenTab.Columns.Add("cAnlageUserIdValue", typeof(Int32));
- AufgabenTab.Columns.Add("cBearbeitetUserIdValue", typeof(Int32));
- for (int i = 0; i < AufgabenTabRaw.Rows.Count; i++)
- {
- //Berechnung der dar zu stellenden Werte:
- String cAnGoUStr, cFürString = "";
- int.TryParse(AufgabenTabRaw.Rows[i]["ANLAGE_USERID"].ToString(), out int ANLAGE_USERID);
- GlobaleVariabeln.Mitarbeiter.TryGetValue(ANLAGE_USERID, out String ANLAGE_USERID_STR); //cANLAGE_USERID
- int.TryParse(AufgabenTabRaw.Rows[i]["BEARBEITET_USERID"].ToString(), out int BEARBEITET_USERID);
- GlobaleVariabeln.Mitarbeiter.TryGetValue(BEARBEITET_USERID, out string BEARBEITET_USERID_STR);
- int.TryParse(AufgabenTabRaw.Rows[i]["ZEIT_GEBRAUCHT"].ToString(), out int tmpIn);
- int ZeitMinuten = tmpIn % 60;
- tmpIn = 0;
- int.TryParse(AufgabenTabRaw.Rows[i]["ZEIT_GEBRAUCHT"].ToString(), out tmpIn);
- int ZeitStunden = tmpIn / 60;
- string GebrauchtZeit = ZeitStunden + ":" + ZeitMinuten.ToString("00");
- string PlanZeitStr = AufgabenTabRaw.Rows[i]["AUFGABE_DAUER"].ToString();
- int.TryParse(AufgabenTabRaw.Rows[i]["AUFGABE_AN_ID"].ToString(), out int AUFGABE_AN_ID);
- if (AufgabenTabRaw.Rows[i]["AUFGABE_AN_G_ODER_U"].ToString() == "G")
- {
- cFürString = "Gruppe: " + GlobaleVariabeln.Arbeitsgruppen.Where(x => x.GRUPPEN_ID == AUFGABE_AN_ID).Select(x => x.GRUPPEN_NAME).FirstOrDefault();
- }
- else
- {
- int.TryParse(AufgabenTabRaw.Rows[i]["BEARBEITET_USERID"].ToString(), out int BEARBEITET_USERID_INT);
- GlobaleVariabeln.Mitarbeiter.TryGetValue(BEARBEITET_USERID_INT, out String DmaName);
- cFürString = DmaName;
- }
- cAnGoUStr = AufgabenTabRaw.Rows[i]["AUFGABE_AN_G_ODER_U"].ToString() + "," + AUFGABE_AN_ID.ToString();
- int bgfarbe = 0, FrontFarbe = 0;
- Color Hintergrund = Color.White;
- DateTime.TryParse(AufgabenTabRaw.Rows[i]["AUFGABE_FAELLIG"].ToString(), out DateTime AUFGABE_FAELLIG);
- int.TryParse(AufgabenTabRaw.Rows[i]["ERLEDIGT_PROZENT"].ToString(), out int ERLEDIGT_PROZENT);
- if (AktuellerNode.AktiveDB)
- {
- if (AUFGABE_FAELLIG > DateTime.Now)
- {
- double Restzeit = AUFGABE_FAELLIG.Subtract(DateTime.Now).TotalDays;
- if (Restzeit <= 2.5)
- Hintergrund = Color.FromArgb(-17920);
- if (Restzeit <= 1.5)
- Hintergrund = Color.FromArgb(255, 187, 0);
- if (Restzeit <= 0.8)
- Hintergrund = Color.FromArgb(-58112);
- if (Restzeit < 0)
- Hintergrund = Color.FromArgb(-3407872);
- if (ERLEDIGT_PROZENT >= 100)
- {
- Hintergrund = Color.FromArgb(238, 232, 207);
- }
- bgfarbe = Hintergrund.ToArgb();
- FrontFarbe = GetReadableForeColor(Hintergrund).ToArgb();
- }
- else
- { //Fälligkeit liegt in der Vergangenheit - immer Rot:
- bgfarbe = Color.FromArgb(200, 0, 0).ToArgb();
- FrontFarbe = Color.White.ToArgb();
- if (ERLEDIGT_PROZENT >= 100)
- {
- Random r = new Random();
- //bgfarbe = Color.FromArgb(r.Next(0, 256), r.Next(0, 256), r.Next(0, 256)).ToArgb();
- bgfarbe = Color.FromArgb(238, 232, 207).ToArgb();
- FrontFarbe = Color.Black.ToArgb();
- }
- }
- }
- else
- {
- Hintergrund = Color.FromArgb(238, 232, 207);
- bgfarbe = Hintergrund.ToArgb();
- FrontFarbe = GetReadableForeColor(Hintergrund).ToArgb();
- }
- DateTime.TryParse(AufgabenTabRaw.Rows[i]["AUFGABE_START"].ToString(), out DateTime Start);
- DateTime.TryParse(AufgabenTabRaw.Rows[i]["ERLEDIGT_AM"].ToString(), out DateTime ERLEDIGT_AM);
- int.TryParse(AufgabenTabRaw.Rows[i]["WICHTIGKEIT"].ToString(), out int Wichtigkeit);
- int.TryParse(AufgabenTabRaw.Rows[i]["WIEDERHOLUNG"].ToString(), out int WIEDERHOLUNG);
- int.TryParse(AufgabenTabRaw.Rows[i]["KARUSSEL_AUFGABE"].ToString(), out int KARUSSEL_AUFGABE);
- String nTitel = (WIEDERHOLUNG > 0 ? "\u0298 " : "");
- nTitel += (KARUSSEL_AUFGABE > 0 ? "\u2182 " : ""); // u1D25
- nTitel += AufgabenTabRaw.Rows[i]["TITEL"].ToString();
- AufgabenTab.Rows.Add(AufgabenTabRaw.Rows[i]["A_NR"].ToString(), ANLAGE_USERID_STR, AUFGABE_FAELLIG,
- Start, BEARBEITET_USERID_STR, cFürString, nTitel, AufgabenTabRaw.Rows[i]["BESCHREIBUNG"].ToString(),
- StarList.Images[Wichtigkeit], PlanZeitStr, GebrauchtZeit,
- ERLEDIGT_PROZENT, ERLEDIGT_AM, bgfarbe, FrontFarbe, cAnGoUStr, Wichtigkeit,
- AUFGABE_AN_ID, ANLAGE_USERID, BEARBEITET_USERID);
- } //ENDE FOR
- //Alle Aufgaben in die Liste oben einfügen und diese dann zur Anzeige nutzen.
- view.Dispose();
- view = AufgabenTab.DefaultView;
- DataGridViewX source = dataGridViewX1;
- source.SuspendLayout();
- source.AutoGenerateColumns = false;
- source.DataSource = view; // Diese Zeile verlangsamt alles so stark!
- if (AktuellerNode.SubNodeType == SubNodeType.Erledigte)
- {
- source.Columns[cERLEDIGT_AM.Index].AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;
- }
- if (!Properties.Settings.Default.DauerAnzeigen)
- {
- source.Columns["cDauer"].Visible = false;
- source.Columns["cGebraucht"].Visible = false;
- }
- source.Columns["cWichtigkeitVal"].Visible = false;
- source.Columns["cAufgabeAnValue"].Visible = false;
- if (AktuellerNode.AktiveDB)
- {
- source.Columns[cERLEDIGT_PROZENT.Index].Visible = true;
- source.Columns[cfür.Index].Visible = true;
- source.Columns[cERLEDIGT_AM.Index].Visible = false;
- }
- else
- {
- source.Columns[cERLEDIGT_PROZENT.Index].Visible = false;
- source.Columns[cfür.Index].Visible = false;
- source.Columns[cERLEDIGT_AM.Index].Visible = true;
- }
- if (AktuellerDock == dcSuche)
- {
- source.Columns[cERLEDIGT_AM.Index].Visible = true;
- source.Columns[cERLEDIGT_AM.Index].AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;
- }
- source.Columns[cBESCHREIBUNG.Index].Visible = false;
- source.Columns[cAnGoU.Index].Visible = false;
- source.Columns[cBearbeitetUserIdValue.Index].Visible = false;
- source.Columns[cAufgabeAnValue.Index].Visible = false;
- source.Columns[cWichtigkeitVal.Index].Visible = false;
- source.Columns[cAnlageUserIdValue.Index].Visible = false;
- if (this.Cursor == Cursors.WaitCursor)
- this.Cursor = Cursors.Default;
- if (tb_FilterTitel.Text != "")
- view.RowFilter = "cTITEL like '%" + tb_FilterTitel.Text + "%'"; // OR BESCHREIBUNG like '%" + tb_searchTitel.Text + "%'
- else if (tb_FilterFür.Text != "")
- view.RowFilter = "cfür like '%" + tb_FilterFür.Text + "%'"; // OR BESCHREIBUNG like '%" + tb_searchTitel.Text + "%'
- else if (tb_FilterZugewiesen.Text != "")
- view.RowFilter = "cBEARBEITET_USERID like '%" + tb_FilterZugewiesen.Text + "%'"; // OR BESCHREIBUNG like '%" + tb_searchTitel.Text + "%'
- Cursor.Current = Cursors.Default;
- source.ResumeLayout();
- }
Ich habe den gesamten Code schon gedebugt und alles geht sehr schnell von statten, außer diese Zeile:
source.DataSource = view; // Diese Zeile verlangsamt alles so stark!
Die verdoppelt die Ladezeit gut mal. So braucht er z.B. für eine Zeile fast 1 ganze Sekunde. Für die ganze Berechnung der Zeile gehen aber nur wenige ms drauf.
Ich bin mit meinem Latein hier echt am Ende.
Viele Grüße,
Marvin