2016-05-17 11 views
1

私はパニーエ内に記事を表示するモーダルフォームを持っています。ウェブコントロールの読み込みを改善しました

私のパニーでは、私はタブを持っていて、私のタブの各行に対して、私はイベントハンドラで8つのWebコントロール(5 ImageButton、1 LinkBut​​ton、1 TextBox、1 DropDownList)を持っています。

例として、私のパニエに98個の記事がある場合、98行と784(98 * 8)のWebコントロールがあります。ロードに時間がかかりました。

どうすれば読み込みを改善できますか?あなたのアドバイスのための

foreach (LignePanier lp in liste) 
      { 
       TableRow tr = new TableRow(); 
       tr.CssClass = "lignePanier"; 
       tr.Width = Unit.Percentage(100); 
       tr.Attributes["style"] = "background-color:" + couleur; 

       TableCell celluleLogo = new TableCell(); 
       celluleLogo.CssClass = "celluleTabArticle"; 
       celluleLogo.Width = Unit.Percentage(5); 
       celluleLogo.Attributes["style"] = "text-align:center;"; 

       if (!String.IsNullOrEmpty(lp._ARTICLE._FOURNISSEUR._LOGO)) 
       { 
        System.Web.UI.WebControls.ImageButton logoF = new System.Web.UI.WebControls.ImageButton(); 
        logoF.ImageUrl = ToolsImage.obtenirUrl(Request.Url.ToString()) + lp._ARTICLE._FOURNISSEUR._LOGO; 
        logoF.ID = "logoF" + i; 
        logoF.Width = Unit.Pixel(50); 
        logoF.Height = Unit.Pixel(50); 
        logoF.Click += new ImageClickEventHandler(logoF_Click); 

        celluleLogo.Controls.Add(logoF); 
       } 

       TableCell tcITMREF = new TableCell(); 
       tcITMREF.CssClass = "cellulePanier"; 
       tcITMREF.Width = Unit.Percentage(7); 
       tcITMREF.Text = lp._ARTICLE._ITMREF; 

       TableCell tcFAM = new TableCell(); 

       if (j == 0) 
       { 
        tcFAM.CssClass = "cellulePanier"; 
        tcFAM.Width = Unit.Percentage(6); 
        tcFAM.RowSpan = item.Count(); 

        tcFAM.Text = lp._ARTICLE._FAM1._FAM1 + "-" + lp._ARTICLE._FAM2._FAM2 + "-" + lp._ARTICLE._FAM3._FAM3 + 
         "-" + lp._ARTICLE._FAM4._FAM4; 

        String chaineFamille = "Famille 1 : " + lp._ARTICLE._FAM1._FAM1 + " (" + lp._ARTICLE._FAM1._FAMDES + ") \n"; 
        chaineFamille += "Famille 2 : " + lp._ARTICLE._FAM2._FAM2 + " (" + lp._ARTICLE._FAM2._FAMDES + ") \n"; 
        chaineFamille += "Famille 3 : " + lp._ARTICLE._FAM3._FAM3 + " (" + lp._ARTICLE._FAM3._FAMDES + ") \n"; 
        chaineFamille += "Famille 4 : " + lp._ARTICLE._FAM4._FAM4 + " (" + lp._ARTICLE._FAM4._FAMDES + ")"; 

        tcFAM.ToolTip = chaineFamille; 
       } 

       TableCell tcLIBLONFOUR = new TableCell(); 
       tcLIBLONFOUR.CssClass = "cellulePanier"; 
       tcLIBLONFOUR.Width = Unit.Percentage(21); 

       Label lb = new Label(); 
       lb.Text = lp._ARTICLE._LIBLONFOUR.Split('[')[0]; 
       lb.Attributes["style"] = "text-decoration:underline;"; 

       Label label = new Label(); 
       label.Text = "<br/>" + lp._ARTICLE.obtenirChaineVenduParPourCommandeType(); 

       LinkButton lbLIBLONFOUR = new LinkButton(); 
       lbLIBLONFOUR.ID = "lbLIBLONFOUR" + i; 
       lbLIBLONFOUR.Controls.Add(lb); 
       lbLIBLONFOUR.Controls.Add(label); 
       lbLIBLONFOUR.Click += new EventHandler(liblonfour_Click); 

       tcLIBLONFOUR.Controls.Add(lbLIBLONFOUR); 

       TableCell tcDelai = new TableCell(); 
       tcDelai.CssClass = "cellulePanier"; 
       tcDelai.Width = Unit.Percentage(4); 
       tcDelai.Text = lp._ARTICLE._LTI + " j"; 
       tcDelai.Attributes["Style"] = "text-align:center"; 

       TableCell tcPANQTVVAL = new TableCell(); 
       tcPANQTVVAL.CssClass = "cellulePanier"; 
       tcPANQTVVAL.Width = Unit.Percentage(8); 
       tcPANQTVVAL.Attributes["Style"] = "text-align:left"; 

       TextBox txtPANQTVVAL = new TextBox(); 
       txtPANQTVVAL.ID = "txt" + i; 
       txtPANQTVVAL.AutoPostBack = true; 
       txtPANQTVVAL.Width = Unit.Pixel(30); 
       txtPANQTVVAL.CssClass = "txtLignePanier"; 
       txtPANQTVVAL.TextChanged += new EventHandler(txtQTE_TextChanged); 

       if (lp._PANQTVVAL == 0) 
       { 
        txtPANQTVVAL.Attributes["style"] = "color:Red;"; 
       } 

       if (lp._CREDAT == maxCREDAT) 
       { 
        txtPANQTVVAL.Attributes["style"] += "background-color:#8BEAB7"; 
       } 

       Label labelLIBCOND = new Label(); 
       labelLIBCOND.Text = lp._ARTICLE._LIBVTE; 

       ImageButton buttonMoins = new ImageButton(); 
       buttonMoins.CssClass = "buttonMoins"; 
       buttonMoins.ID = "buttonMoins" + i; 
       buttonMoins.Click += new ImageClickEventHandler(buttonMoins_Click); 
       buttonMoins.ImageUrl = "~/App_Themes/eWare_Theme/images/moins.png"; 

       ImageButton buttonPlus = new ImageButton(); 
       buttonPlus.CssClass = "buttonPlus"; 
       buttonPlus.ID = "buttonPlus" + i; 
       buttonPlus.Click += new ImageClickEventHandler(buttonPlus_Click); 
       buttonPlus.ImageUrl = "~/App_Themes/eWare_Theme/images/plus.png"; 

       if (lp._PANQTVVAL == 0) 
       { 
        txtPANQTVVAL.Text = "0"; 
        this.buttonSubmit.Enabled = false; 
       } 
       else 
       { 
        txtPANQTVVAL.Text = ToolsString.obtenirNombreArrondi(lp._PANQTVVAL, 2); 
       } 

       tcPANQTVVAL.Controls.Add(txtPANQTVVAL); 
       tcPANQTVVAL.Controls.Add(labelLIBCOND); 

       TableCell tcButton = new TableCell(); 
       tcButton.CssClass = "cellulePanier"; 
       tcButton.Attributes["style"] = "text-align:left;"; 
       tcButton.Width = Unit.Percentage(2); 

       tcButton.Controls.Add(buttonPlus); 
       tcButton.Controls.Add(buttonMoins); 

       TableCell tcPANPRIUF = new TableCell(); 
       tcPANPRIUF.CssClass = "cellulePanier"; 
       tcPANPRIUF.Width = Unit.Percentage(7); 
       tcPANPRIUF.Text = ToolsString.obtenirNombreArrondi(lp._ARTICLE._PRI * lp._ARTICLE._COEFCOND, 4) + " €"; 
       tcPANPRIUF.Attributes["Style"] = "text-align:left"; 

       TableCell tcTotal = new TableCell(); 
       tcTotal.CssClass = "cellulePanier"; 
       tcTotal.Width = Unit.Percentage(7); 
       tcTotal.Attributes["Style"] = "text-align:left"; 

       decimal total = lp._PANQTVVAL * lp._ARTICLE._PRI * lp._ARTICLE._COEFCOND; 

       tcTotal.Text = ToolsString.obtenirNombreArrondi(total, 2) + " €"; 

       TableCell tcPoubelle = new TableCell(); 
       tcPoubelle.Width = Unit.Percentage(27); 
       tcPoubelle.ToolTip = "A l'entrepôt le " + lp._RCPDAT.ToString("D", CultureInfo.CurrentCulture); 

       DropDownList ddl = new DropDownList(); 
       ddl.ID = "ddl" + i; 
       ddl.AutoPostBack = true; 
       ddl.SelectedIndexChanged += new EventHandler(listeLivraisonPanier_SelectedIndexChanged); 

       if (lp._ARTICLE._PRODINDISPO == 0) 
       { 
        List<String> _liste = MgtDateLivraison.obtenirInstance().obtenirJourLivraison(lp._ARTICLE._FOURNISSEUR._FOURNISSEUR, heureLimite, lp._ARTICLE._LTI); 

        if (lp._DLVRCPDAT < DateTime.Parse(_liste[0].Split('*')[0])) 
        { 
         String s = lp._DLVRCPDAT.ToString("D", 
        CultureInfo.CreateSpecificCulture("fr-FR")); 

         ddl.Items.Add(new System.Web.UI.WebControls.ListItem(s, s)); 
        } 

        foreach (String s in _liste) 
        { 
         ddl.Items.Add(new System.Web.UI.WebControls.ListItem(s, s)); 
        } 

        //Si ma date est inférieur au premier élément de ma liste, c'est que je suis hors borne 
        if (lp._DLVRCPDAT < DateTime.Parse(_liste[0].Split('*')[0])) 
        { 
         ddl.CssClass = "dateHorsBorne"; 
         //this.buttonSubmit.Enabled = false; 
        } 
       } 

       if (ddl.Items.FindByValue(lp._DLVRCPDAT.ToString("D", 
        CultureInfo.CreateSpecificCulture("fr-FR"))) != null) 
       { 
        ddl.SelectedValue = lp._DLVRCPDAT.ToString("D", 
        CultureInfo.CreateSpecificCulture("fr-FR")); 
       } 
       else 
       { 
        ddl.SelectedValue = lp._DLVRCPDAT.ToString("D", 
        CultureInfo.CreateSpecificCulture("fr-FR")) + "*"; 
       } 

       ImageButton buttonDuplicateRow = new ImageButton(); 
       buttonDuplicateRow.ID = "buttonDuplicateRow" + i; 
       buttonDuplicateRow.CssClass = "buttonPlus"; 
       buttonDuplicateRow.ToolTip = "Dupliquer la ligne"; 
       buttonDuplicateRow.Click += new ImageClickEventHandler(buttonDuplicateRow_Click); 
       buttonDuplicateRow.ImageUrl = "~/App_Themes/eWare_Theme/images/plus.png"; 

       ImageButton buttonSupprimer = new ImageButton(); 
       buttonSupprimer.ID = "buttonSupprimer" + i; 
       buttonSupprimer.CssClass = "buttonSupprimer"; 
       buttonSupprimer.OnClientClick = "return supprimerArticlePanier();"; 
       buttonSupprimer.Click += new ImageClickEventHandler(buttonSupprimer_Click); 
       buttonSupprimer.ImageUrl = "~/App_Themes/eWare_Theme/images/logo_delete.png"; 

       tcPoubelle.Controls.Add(ddl); 
       tcPoubelle.Controls.Add(buttonDuplicateRow); 
       tcPoubelle.Controls.Add(buttonSupprimer); 

       TableCell tcInfos = new TableCell(); 
       tcInfos.Text = lp._ARTICLE._FOURNISSEUR._FOURNISSEUR + "." + lp._ARTICLE._ITMREF + "." + 
        lp._DLVRCPDAT.ToString().Split('*')[0] + "." + lp._RCPDAT.ToString() + "." + lp._ARTICLE._VENDUPAR + 
        "." + lp._ARTICLE._LIBCOND; 

       tcInfos.Attributes["style"] = "display:none"; 

       //Si j == 0, je suis sur un nouveau regroupement, j'ajoute donc ma cellule à ma ligne. 
       if (j == 0) 
       { 
        tr.Cells.Add(tcFAM); 

        j = 1; 
       } 

       tr.Cells.Add(celluleLogo); 

       tr.Cells.Add(tcITMREF); 
       tr.Cells.Add(tcLIBLONFOUR); 
       tr.Cells.Add(tcPANQTVVAL); 
       tr.Cells.Add(tcButton); 
       tr.Cells.Add(tcPANPRIUF); 
       tr.Cells.Add(tcTotal); 
       tr.Cells.Add(tcDelai); 
       tr.Cells.Add(tcPoubelle); 
       tr.Cells.Add(tcInfos); 

       tabPanier.Rows.Add(tr); 

       i++; 
      } 

ありがとう:

はここでタブを構築するために私のコードです。

+1

私はわかりません - 「パニエ」はパネルですか?その場合は、どのタブがアクティブであるかを確認し、そのタブのコントロールのみをロードします。また、 "UpdatePanels"をチェックしてください - あなたを助けることができるかもしれません。 –

答えて

0

プログラムですべてのテーブルセルを作成してコントロールコレクションに追加するのではなく、リピータコントロールを使用しないのはなぜですか?それらはかなり軽量であり、リピーター内の100行はパフォーマンスの観点からは問題ではありません。次に、あなたの分離コードで

 <asp:Repeater runat="server" ID="rptMyData"> 
      <HeaderTemplate> 
       <table> 
        <thead> 
         <tr> 
          <th>Field1</th> 
          <th>Field2</th> 
          <th>Field3</th> 
          <th>Field4</th> 
         </tr> 
        </thead> 
      </HeaderTemplate> 
      <ItemTemplate> 
       <tr> 
        <td><asp:ImageButton runat="server" ImageUrl="<%# ((MyObject)Container.DataItem).Image1Url %>" /></td> 
        <td><asp:ImageButton runat="server" ImageUrl="<%# ((MyObject)Container.DataItem).Image2Url %>" /></td> 
        <td><asp:ImageButton runat="server" ImageUrl="<%# ((MyObject)Container.DataItem).Image3Url %>" /></td> 
        <td><%# ((MyObject)Container.DataItem).SomeTextProperty %></td> 
       </tr> 
      </ItemTemplate> 
      <FooterTemplate> 
       </table> 
      </FooterTemplate> 
     </asp:Repeater> 

:リピータのドキュメントのトンがあり

List<MyObject> myObjects = SomeClass.GetData(); 
rptMyData.DataSource = myObjects; 
rptMyData.DataBind(); 

+0

ありがとう、私はこの解決策を試してみます:) –

+0

私はリピータに複数のheaderTemplateを持つことができますか? –

+0

リピータには1つのヘッダーテンプレートしか定義できません。各項目のヘッダーが変更された場合は、ヘッダーとフッターのテンプレートをスキップして項目テンプレートにすべてを配置します。 – DVK

関連する問題