Radgrid性能问题有更多记录

时间:2010-06-29 20:37:45

标签: telerik-grid

我最近买了Telerik控件。我正在使用radgrid来解决性能问题。

  1. 我实现了对具有6000条记录的radgrid的分页。我在rg402_ItemCreated上创建了对radcombo的viewall选项。当我选择viewall时,花费20秒将数据绑定到网格,然后浏览器卡住(Firefox 3.6.4和IE7)并显示错误(请查找附加图像)。无论如何都要更改viewall选项代码以快速获取数据。或者无论如何都要提高性能并减少记录绑定的时间。
  2. 这是我的代码。

    .aspx代码

    style type="text/css"> 
        .rgPageFirst, .rgPagePrev, .rgPageNext, .rgPageLast 
        { 
            display: none !important; 
        } 
        div.RadGrid_Default .rgHeader, div.RadGrid_Default th.rgResizeCol 
        { 
            background-image: none; 
        } 
    </style> 
    
    <script type="text/javascript"> 
        function onRequestStart(sender, args) { 
            if (args.get_eventTarget().indexOf("ExportToExcelButton") >= 0 || 
                    args.get_eventTarget().indexOf("ExportToWordButton") >= 0 || 
                    args.get_eventTarget().indexOf("ExportToPdfButton") >= 0 || 
                    args.get_eventTarget().indexOf("ExportToCsvButton") >= 0) { 
    
                args.set_enableAjax(false); 
            } 
        } 
    </script> 
    
    <div> 
        <tr> 
            <td colspan="2"> 
                <asp:Label runat="server" Font-Bold="true" Font-Size="14pt" ID="lblTskName"></asp:Label> 
            </td> 
        </tr> 
        <br /> 
    </div> 
    <div> 
        <telerik:RadScriptManager ID="RadScriptManager1" runat="server"> 
        </telerik:RadScriptManager> 
        <telerik:RadAjaxManager ID="RadAjaxManager1" runat="server"> 
            <ClientEvents OnRequestStart="onRequestStart" /> 
            <AjaxSettings> 
                <telerik:AjaxSetting AjaxControlID="rg402"> 
                    <UpdatedControls> 
                        <telerik:AjaxUpdatedControl ControlID="rg402" LoadingPanelID="RadAjaxLoadingPanel1" /> 
                    </UpdatedControls> 
                </telerik:AjaxSetting> 
            </AjaxSettings> 
        </telerik:RadAjaxManager> 
        <telerik:RadAjaxLoadingPanel ID="RadAjaxLoadingPanel1" runat="server" Skin="Default"> 
        </telerik:RadAjaxLoadingPanel> 
        <telerik:RadGrid ID="rg402" runat="server" AutoGenerateColumns="false" Height="550px" 
            OnNeedDataSource="rg402_NeedDataSource" Width="120%" AllowPaging="True" AllowSorting="True" 
            AllowMultiRowSelection="True" EnableHeaderContextMenu="true" GridLines="None" 
            EnableHeaderContextFilterMenu="true" AllowMultiRowEdit="true" AllowFilteringByColumn="True" 
            OnPreRender="rg402_PreRender" OnItemCreated="rg402_ItemCreated" EnableViewState="false"> 
            <HeaderStyle HorizontalAlign="Center" BorderWidth="1px" Font-Bold="true" Font-Size="8pt" /> 
            <ExportSettings IgnorePaging="true" ExportOnlyData="true"> 
                <Pdf AllowModify="false" AllowPrinting="true" PageBottomMargin="" PageFooterMargin="" 
                    PageHeaderMargin="" PageHeight="11in" PageLeftMargin="" PageRightMargin="" PageTopMargin="" 
                    PageWidth="14in" /> 
            </ExportSettings> 
            <MasterTableView DataKeyNames="orderId" CommandItemDisplay="Top" EditMode="InPlace" 
                PageSize="30"> 
                <CommandItemSettings ShowExportToWordButton="true" ShowExportToExcelButton="true" 
                    ShowExportToCsvButton="true" ShowExportToPdfButton="true" ShowAddNewRecordButton="false" /> 
                <Columns> 
                    <telerik:GridClientSelectColumn UniqueName="ClientSelectColumn" HeaderStyle-Width="3%" 
                        ItemStyle-Width="3%"> 
                    </telerik:GridClientSelectColumn> 
                    <telerik:GridBoundColumn UniqueName="sId" HeaderText="sId" DataField="sId" Visible="false"> 
                    </telerik:GridBoundColumn> 
                    <telerik:GridBoundColumn UniqueName="orderId" HeaderText="orderId" DataField="orderId" 
                        Visible="false"> 
                    </telerik:GridBoundColumn> 
                    <telerik:GridBoundColumn UniqueName="Customer Name" HeaderText="Customer Name" DataField="Customer Name" 
                        ReadOnly="true"> 
                    </telerik:GridBoundColumn> 
                    <telerik:GridBoundColumn UniqueName="Market Name" HeaderText="Market Name" DataField="Market Name" 
                        ReadOnly="true"> 
                    </telerik:GridBoundColumn> 
                    <telerik:GridBoundColumn UniqueName="LOB" HeaderText="LOB" DataField="LOB" ReadOnly="true"> 
                    </telerik:GridBoundColumn> 
                    <telerik:GridBoundColumn UniqueName="Headend Name" HeaderText="Headend Name" DataField="Headend Name" 
                        ReadOnly="true"> 
                    </telerik:GridBoundColumn> 
                    <telerik:GridBoundColumn UniqueName="Project Name" HeaderText="Project Name" DataField="Project Name" 
                        ReadOnly="true"> 
                    </telerik:GridBoundColumn> 
                    <telerik:GridHyperLinkColumn UniqueName="Site Name" HeaderText="Site Name" DataTextField="Site Name"> 
                    </telerik:GridHyperLinkColumn> 
                    <telerik:GridBoundColumn UniqueName="Task Status" HeaderText="Task Status" DataField="Task Status" 
                        ReadOnly="true"> 
                    </telerik:GridBoundColumn> 
                    <telerik:GridBoundColumn UniqueName="Plant Test Date" HeaderText="Plant Test Date" 
                        DataField="Plant Test Date" ReadOnly="true"> 
                    </telerik:GridBoundColumn> 
                    <telerik:GridBoundColumn UniqueName="CORE CM Number" HeaderText="CORE CM Number" 
                        DataField="CORE CM Number" ReadOnly="true"> 
                    </telerik:GridBoundColumn> 
                    <telerik:GridBoundColumn UniqueName="Req SM Imp Date" HeaderText="Req SM Imp Date" 
                        DataField="Req SM Imp Date" ReadOnly="true"> 
                    </telerik:GridBoundColumn> 
                    <telerik:GridBoundColumn UniqueName="SM Ticket Number" HeaderText="SM Ticket Number" 
                        DataField="SM Ticket Number"> 
                    </telerik:GridBoundColumn> 
                    <telerik:GridBoundColumn UniqueName="Sch SM Imp Date" HeaderText="Sch SM Imp Date" 
                        DataField="Sch SM Imp Date"> 
                    </telerik:GridBoundColumn> 
                    <telerik:GridEditCommandColumn UniqueName="ECC402"> 
                    </telerik:GridEditCommandColumn> 
                </Columns> 
            </MasterTableView> 
            <ClientSettings EnableRowHoverStyle="true" ReorderColumnsOnClient="false" AllowDragToGroup="false" 
                AllowColumnsReorder="True"> 
                <Scrolling AllowScroll="true" UseStaticHeaders="true" /> 
                <Selecting AllowRowSelect="True"></Selecting> 
                <Resizing AllowRowResize="true" AllowColumnResize="True" EnableRealTimeResize="True" 
                    ResizeGridOnColumnResize="False"></Resizing> 
            </ClientSettings> 
            <PagerStyle Mode="NextPrevAndNumeric"></PagerStyle> 
        </telerik:RadGrid>
    

    .cs文件......

    protected void Page_Load(object sender, EventArgs e) 
    { 
        try 
        { 
            if (!IsPostBack) 
            { 
                Session["SearchRes"] = null; 
                if (Session["TaskName"] != null) 
                    lblTskName.Text = Session["TaskName"].ToString(); 
                Session["FilColms"] = null; 
                Session["SortExp"] = null; 
                Session["FilExp"] = null; 
                Session["ViewAll"] = null; 
                BindGrid(); 
            } 
        } 
        catch (Exception ex) 
        { 
            throw ex; 
        } 
    } 
    
    private void BindGrid() 
    { 
        try 
        { 
            DataSet dsResult = new DataSet(); 
    
            clsSearch_BL clsObj = new clsSearch_BL(); 
            clsObj.TaskID = (string)Session["TaskID"]; 
            clsObj.CustName = (string)Session["CustName"]; 
            clsObj.MarketName = (string)Session["MarketName"]; 
            clsObj.HeadendName = (string)Session["HeadendName"]; 
            clsObj.SiteName = (string)Session["SiteName"]; 
            clsObj.TaskStatus = (string)Session["TaskStatus"]; 
            clsObj.OrdType = (string)Session["OrdType"]; 
            clsObj.OrdStatus = (string)Session["OrdStatus"]; 
            clsObj.ProName = (string)Session["ProName"]; 
            clsObj.LOC = (string)Session["LOC"]; 
            clsObj.QuoteID = (string)Session["QuoteID"]; 
            clsObj.CMNumber = (string)Session["CMNumber"]; 
    
            if (Session["SearchRes"] == null) 
            { 
                dsResult = clsObj.getSearchResults_BL(clsObj); 
                Session["SearchRes"] = dsResult; 
            } 
            else 
                dsResult = (DataSet)Session["SearchRes"]; 
    
            DataView dataView = dsResult.Tables[0].DefaultView; 
            rg402.DataSource = dsResult; 
            //rg402.DataBind(); 
        } 
        catch (Exception ex) 
        { 
            throw ex; 
        } 
    } 
    
    protected void rg402_NeedDataSource(object source, Telerik.Web.UI.GridNeedDataSourceEventArgs e) 
    { 
        BindGrid(); 
    } 
    
    protected void rg402_PreRender(object sender, EventArgs e) 
    { 
        rg402.MasterTableView.GetColumnSafe("RowIndicator").Display = false; 
    
    } 
    
    protected void rg402_ItemCreated(object sender, GridItemEventArgs e) 
    { 
        if (e.Item is GridPagerItem) 
        { 
            RadComboBox combo = (e.Item as GridPagerItem).FindControl("PageSizeComboBox") as RadComboBox; 
    
            // The number of items shown when all is selected  
            int allRowsCount = int.MaxValue; 
    
            // Remove duplicates  
            RadComboBoxItem duplicate = combo.Items.FindItemByValue(allRowsCount.ToString()); 
            if (duplicate != null) 
            { 
                duplicate.Remove(); 
            } 
    
            // Create a new item for showing all  
            RadComboBoxItem item = new RadComboBoxItem("All", allRowsCount.ToString()); 
            item.Attributes.Add("ownerTableViewId", e.Item.OwnerTableView.ClientID); 
            combo.Items.Add(item); 
    
            // Set the current pagesize as the selected value  
            combo.Items.FindItemByValue(rg402.PageSize.ToString()).Selected = true; 
        } 
    

2 个答案:

答案 0 :(得分:1)

我的团队对RadGrid和其他一些功能强大的第三方控件进行了性能测试,RadGrid当时最快......所以你在控件方面做了很好的选择。

浏览器是您的限制。任何控件都会遇到同样的问题。在屏幕上同时显示超过有用数量的数据是不好的做法。

6000行和16列...这可能超过9 Megs的HTML,浏览器只需为您的数据网格解析。

不要给他们一个ViewAll选项。如果他们想要快速搜索数据,您可以添加过滤结果的搜索功能。

如果他们真的想要同时拥有所有数据,我所做的就是在网格附近提供一个链接,允许他们将数据中的所有网格下载为Excel文件。

答案 1 :(得分:0)

虽然我同意@Ed B您在网格中提供了大量数据,但我认为旧版浏览器在管理您所呈现的内存空间时会遇到问题。

RadGrid中有一个新功能(截至2013年第二季度)称为虚拟化,可以为您提供性能提升和查看全部功能。您正在寻找的功能。

您可以通过在RadGrid / ClientSettings标记中添加以下标记来启用网格虚拟化:

 <Virtualization EnableVirtualization="true" InitiallyCachedItemsCount="2000"
                    ItemsPerView="100"/>

您可以在线演示了解有关此功能的更多信息: http://demos.telerik.com/aspnet-ajax/grid/examples/performance/virtualization/defaultcs.aspx