提高Gridview中的分组速度

时间:2015-02-24 11:09:36

标签: c# asp.net gridview

我有一个网络表单,我需要根据某些条件对项目/行进行分组。它具有多级分组,这就是为什么在网格中渲染项目变得非常繁琐的服务器过程。

这是我目前所做的。 (这只是3级)。

protected void ResultGrid_PreRender(object sender, EventArgs e)
{
    foreach (GridViewRow gdR in ResultGrid.Rows)
    {
        Label lblClass = (Label)gdR.FindControl("lblClass");
        Label lblCategory = (Label)gdR.FindControl("lblCategory");
        Label lblCompartment = (Label)gdR.FindControl("lblCompartment");
        Panel pnlClassLinks = (Panel)gdR.FindControl("pnlClassLinks");

        foreach (GridViewRow gdRIn in ResultGrid.Rows)
        {
           if (gdRIn.RowIndex != gdR.RowIndex)
           {
             Label lblClassIn = (Label)gdRIn.FindControl("lblClass");
             Label lblCategoryIn = (Label)gdRIn.FindControl("lblCategory");
             Label lblCompartmentIn = (Label)gdRIn.FindControl("lblCompartment");

             if(lblClassIn.Text == lblClass.Text)
               {
                   if(lblCategoryIn.Text == lblCategory.Text)
                   {
                       if(lblCompartmentIn.Text == lblCompartment.Text)
                       {
                           LinkButton lnkBtn = new LinkButton();
                           // lnkBtn Properties added
                           pnlClassLinks.Controls.Add(lnkBtn);
                           if (pnlClassLinks.Controls.Count > 2)
                           {
                               pnlClassLinks.Width = 150;
                           }
                           if (gdR.Visible)
                           {
                               dr.Visible = false;
                           }
                       }
                   } 
               }
           }
        }
      LinkButton lnkGroupEdit = (LinkButton)gdR.FindControl("lnkGroupEdit");
      lnkGroupEdit.OnClientClick = "editGroup();";
    }
}

正如它清楚地显示的那样,当gridview中的行数增加时,行迭代太多了。那么,有没有更好的方法呢?

2 个答案:

答案 0 :(得分:0)

您可以创建GenericCollection。包括您的自定义属性,如(width,cssClass,visibility ...)。然后将此集合作为dataSource绑定到gridView。

gridView.DataSource=  List_CustomModel;
gridView.DataBind();

答案 1 :(得分:0)

这是我操纵的代码的范围

 ` 
    <asp:TemplateField>
    <HeaderTemplate>
    <asp:Literal ID="LtBodac" runat="server" Text="BODACC" />
    </HeaderTemplate>
     <HeaderStyle CssClass="css-bodacc" />
     <ItemTemplate>
<asp:TextBox Visible='<%#Eval("Bodacc") %>' ID="TbDateBodac" CssClass="datebox source-manuel css-bodacc CustomDateMercure" runat="server" Text='<%#Eval("DateBodac")%>' /><asp:HiddenField Visible='<%#Eval("Bodacc") %>' ID="HfOldDateBodac" runat="server" Value='<%#Eval("DateBodac")%>' /> </ItemTemplate>
 </asp:TemplateField>

注意:#Eval(“Bodacc”):Boddac是我模特中的一个属性。