簡體   English   中英

使用子網格進行頁面加載會花費太多時間來加載頁面

[英]page load with child grids taking too much of time in loading the page

我有三個網格-類別網格,項目網格和子項目網格。 我有類別網格(grdCategories),對於每個類別,我都有許多綁定到子網格(grdItems)的項目。 對於每個項目,我都會在子子網格(grdSubItems)中顯示許多子項目。 現在的問題是頁面在加載數據上花費了太多時間。 我的HTML代碼如下:

加載數據甚至需要幾分鍾:

ASPX

   <asp:GridView ID="grdCategories" runat="server" AutoGenerateColumns="false" DataKeyNames="Category"
                    CssClass="menu_items" OnRowDataBound="grdCategories_RowDataBound">
                    <Columns>
                        <asp:TemplateField>
                            <ItemTemplate>
                                <asp:Panel ID="pnlMealOptionsHeader" runat="server" Width="100%">
                                    <h1>
                                        <a id='<%#  Eval("CategoryX")%>'>
                                            <asp:Label ID="lblCategory" runat="server" Text='<%#Eval("Category") %>' Visible="false"></asp:Label>
                                            <asp:Label ID="lblCategoryX" runat="server" Text='<%#Eval("CategoryX") %>'></asp:Label>
                                        </a>
                                    </h1>
                                </asp:Panel>
                                <asp:Panel runat="server" ID="pnlMealOptionsBody">
                                    <asp:Label ID="lblCategoryXX" runat="server" CssClass="title_2" Text='<%#Eval("CategoryXX") %>'></asp:Label>
                                    <!--Items in Category -->
                                    <asp:GridView ID="grdItems" runat="server" AutoGenerateColumns="false" CssClass="active-grid"
                                        DataKeyNames="Item" OnRowDataBound="grdItems_RowDataBound" ShowHeader="false" >
                                        <Columns>
                                            <asp:TemplateField>
                                                <ItemTemplate>
                                                    <asp:Label ID="lblItem" runat="server" Text='<%#Eval("Item") %>' Visible="false"></asp:Label>
                                                    <asp:Label ID="lblItemX" CssClass="title" runat="server" Text='<%#Eval("ItemX") %>'></asp:Label>
                                                    <asp:Label ID="lblItemXX" CssClass="title" runat="server" Text='<%#Eval("ItemXX") %>' style=" font-size:smaller; font-weight:normal"></asp:Label>
                                                </ItemTemplate>
                                            </asp:TemplateField>
                                            <asp:TemplateField>
                                                <ItemTemplate>
                                                    <asp:GridView ID="grdSubItems" runat="server" AutoGenerateColumns="false" CssClass=""
                                                        DataKeyNames="SubItem" ShowHeader="false" OnRowDataBound="grdSubItems_RowDataBound">
                                                        <HeaderStyle HorizontalAlign="Left" />
                                                        <Columns>
                                                            <asp:TemplateField>
                                                                <ItemTemplate>
                                                                    <asp:Label ID="lblItem" runat="server" Text='<%#Eval("Item") %>' Visible="false"></asp:Label>
                                                                    <asp:Label ID="lblSubItem" runat="server" Text='<%#Eval("SubItem") %>' Visible="false"></asp:Label>
                                                                    <asp:Label ID="lblNoofOptions" runat="server" Text='<%#Eval("NumofOptions") %>' Visible="false"></asp:Label>
                                                                    <asp:Label ID="lblSubItemX" CssClass="qty" runat="server" Text='<%#Eval("SubItemX") %>'></asp:Label>
                                                                </ItemTemplate>
                                                            </asp:TemplateField>
                                                            <asp:TemplateField>
                                                                <ItemTemplate>
                                                                    <asp:Label ID="lblPrice" runat="server" CssClass="price" Text='<%#String.Format("£{0}",Eval("SellingCost")) %>'></asp:Label>
                                                                </ItemTemplate>
                                                            </asp:TemplateField> 
                                                        </Columns>
                                                    </asp:GridView>
                                                </ItemTemplate>
                                            </asp:TemplateField>
                                        </Columns>
                                    </asp:GridView>
                                    <!--End Items in Category -->
                                </asp:Panel>
                            </ItemTemplate>
                        </asp:TemplateField>
                    </Columns>
                    <EmptyDataTemplate>
                        <table width="900px">
                            <tr>
                                <td align="center">
                                    <h1>
                                        No Data Available</h1>
                                </td>
                            </tr>
                        </table>
                    </EmptyDataTemplate>
                </asp:GridView>

背后的代碼

分類Gridview綁定

    private void FillCategoriesGrid()
    {
        DataSet ds = new DataSet();
        ShopCategoryMapBL bl = new ShopCategoryMapBL(SessionContext.SystemUser);
        bl.FetchForShop(ds, RowId);

        grdCategories.DataSource = ds.Tables[0].DefaultView;
        grdCategories.DataBind();
    }

物品Gridview綁定

    protected void grdCategories_RowDataBound(object sender, GridViewRowEventArgs e)
    {

        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            GridView chkTopings = e.Row.FindControl("grdItems") as GridView;
            Label lblCategory = e.Row.FindControl("lblCategory") as Label;

            FillItemsGrid(chkTopings, WebHelper.Cast(lblCategory.Text, 0));
        }
    }

    protected void FillItemsGrid(GridView grdItems, int Category)
    {
        try
        {
            //int cleanOrder = CargoBag.GetValue("CleanOrder", 0);
            DataSet aDataSet = new DataSet();
            ItemBL bl = new ItemBL(SessionContext.SystemUser);
            bl.FetchForCategory(aDataSet, Category, RowId);
            grdItems.DataSource = aDataSet.Tables[0];
            grdItems.DataBind();

        }
        catch (Exception ex) { }
    }

子項目Gridview綁定

    protected void grdItems_RowDataBound(object sender, GridViewRowEventArgs e)
    {

        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            GridView grdSubItems = e.Row.FindControl("grdSubItems") as GridView;
            Label lblItem = e.Row.FindControl("lblItem") as Label;

            FillSubItemsGrid(grdSubItems, WebHelper.Cast(lblItem.Text, 0));
        }
    }


    protected void FillSubItemsGrid(GridView grdSubItems, int Item)
    {
        try
        {
            //int cleanOrder = CargoBag.GetValue("CleanOrder", 0);
            DataSet aDataSet = new DataSet();
            SubItemBL bl = new SubItemBL(SessionContext.SystemUser);
            bl.FetchForItem(aDataSet, Item);
            grdSubItems.DataSource = aDataSet.Tables[0];
            grdSubItems.DataBind();

        }
        catch (Exception ex) { }
    }

您需要提供所有代碼,我們才能提供准確的答案。

例如:

SubItemBL在哪里定義?

還要嘗試找出確切的瓶頸所在。

是嗎

bl.FetchForCategory(aDataSet, Category, RowId);

要么

grdSubItems.DataBind();

如果上面的行是瓶頸,請注意,將Gridview綁定到具有大量數據的數據源的速度確實很慢。 您的數據有多大?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM