none
Aus- und Einblenden von Spalten im Gridview zur Laufzeit langsam RRS feed

  • Allgemeine Diskussion

  • Hallo,

    ich suche zu folgendem Problem eine Lösung bzw. Erklärung.
    Ich habe eine Gridview in dem ca. 34 Spalten gebunden sind. Zur Laufzeit kann der Benutzer in der Webanwendung über eine Checkbox Zusatzinformationen anzeigen lassen. Standard ist die Checkbox leer. Wird diese nun ausgewählt, wird die Seite neu geladen und manche Spalten ausgeblendet und andere dafür eingeblendet. Über Debuggen haben ich herraus gefunden das der Befehl für die Zuweisung des Zustandes (Visible = true / false) länger dauert. Dies kann ich mir nicht wirklich erklären. Hier mal ein Teil des Codes:

     for (int i = 0; (GridView.Columns.Count - 1) >= i; i++)
            {
              //Liste der als dauerhaft unsichtbar definierten Spalten wird durchlaufen
              if (SpListUnsichtbar.GetList().Contains(GridView.Columns[i].HeaderText))
              {
                GridView.Columns[i].Visible = false;
              }
              //Liste der in SortExpression mit "X_ ... " bezeichneten Spalten wird durchlaufen
              else if (SpListCheckedFalse.GetList().Contains(GridView.Columns[i].HeaderText))
              {
                GridView.Columns[i].Visible = false;
              }
              //Liste der in SortExpression mit "Z_ ... " bezeichneten Spalten wird durchlaufen
              else if (SpListCheckedTrue.GetList().Contains(GridView.Columns[i].HeaderText))
              {
                GridView.Columns[i].Visible = true;
              }
              //Liste der nur für den Druck relevanten Spalten wird durchlaufen
              else if (SpListDruckTrue.GetList().Contains(GridView_ASListen.Columns[i].HeaderText))
              {
                GridView.Columns[i].Visible = false;
              }
              else
              {
                GridView.Columns[i].Visible = true;
              }
            }
    

    "SpListCheckedTrue" und andere Syntaktisch änhliche Bezeichnungen beinhalten Listen für die jeweiligen veränderlichen Spalten.
    Trotz der Tatsache das hier nur die Spalten behandelt werden ist die Zeit für den aufbau des Gridviews je nach Datenmenge unverhältnismäßig hoch. Bei 10 Datensätzen ca. 14s und bei 20 Datensätzen ca. 40s.

    Danke schon mal für die Hilfe.

    MFG

    Sebastian Schicker

    Montag, 14. März 2011 14:14

Alle Antworten

  • Hallo Sebastian,

    die Laufzeit für den Aufbau ist natürlich viel zu hoch. Maximal 1/100 der Zeit sollte für die rein serverseitige Abarbeitung benötigt werden. Bis zur vollständigen Übertragung an den Client kann - je nach Downloadgeschwindigkeit bzw. nach einem Postback wegen des ggfs. sehr großen Viewstates auch der Uploadgeschwindigkeit - natürlich mehr Zeit vergehen. Aber 14 bis 40 Sekunden sind erheblich zu hoch.

    Ich kann das hier auch so nicht nachvollziehen. Wenn ich das nachbaue, komme ich immer auf weniger als 1 Sekunde, egal, was ich da fabriziere.

    Daher bitte mal die folgenden Fragen beantworten bzw. Codeausschnitte posten. Alternativ bitte die Webform (aspx) bzw. das Control (ascx), welches das GridView Control enthält, inkl. der dazugehörigen CodeBehind Daten (.aspx.cs bzw. .ascx.cs) als Download bereitstellen und hier den Link posten.

    a) Innerhalb welcher Methode liegt der Code für die gezeigte Schleife?

    b) Wie sieht die Deklaration des GridView Controls aus?

    c) Ist es sicher, dass wirklich die Verarbeitung der Daten solange benötigt (Zeit, die nach <GridView>.DataBind() bis zum nächsten Befehl verstreicht)?

    d) Schau mal in die HTML Ausgabe der Seite. Da steht irgendwo was mit "viewstate". Wie groß ist das Hidden-Field bzw. dessen Value?

     


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community
    Montag, 14. März 2011 15:42
    Moderator