2015-02-24 66 views
1

我有一個Web表單,我需要根據某些條件對項目/行進行分組。它具有多級分組功能,這就是爲什麼網格中的渲染項目變成服務器非常繁瑣的過程的原因。在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中的行數增加時,行迭代太多。那麼,有沒有更好的方法來做到這一點?

+0

對我來說,解決方案是在呈現之前對數據進行分組...... – Aristos 2015-02-24 11:33:57

+0

@Aristos,如果您的意思是'PreRender',那就是我所做的。 'DataBound'方法中還有其他的處理,一旦完成,'PreRender'就會看到它被正確分組。 – Cyberpks 2015-02-25 05:15:27

回答

0

您可以創建一個GenericCollection。包括您的自定義屬性,如(寬度,cssClass,可視性...)。然後將此集合作爲dataSource綁定到gridView。

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

我必須同時爲每一行分組或不分組生成Linkbuttons。我認爲這是不可能使用通用集合。 – Cyberpks 2015-02-24 11:24:52

+0

這是可能的。在您的gridViewItem模板中添加linkBut​​ton代碼。 並將Visible屬性綁定到您的custom_Model屬性。 – 2015-02-24 11:29:56

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> 

NB:#Eval( 「Bodacc」):Boddac是在我的模型的屬性。