Domanda

Di recente ho comprato controlli Telerik. Sto ottenendo problema di prestazioni con RadGrid.

  1. I implementato paging al RadGrid con 6000 record. E ho creato viewall opzione rg402_ItemCreated al radcombo. Quando seleziono viewall sua presa 20 secondi per associare i dati alla rete e dopo che il Brower si blocca (sia Firefox 3.6.4 e IE7) e visualizzare l'errore (Si prega di trovare l'immagine allegata). Esiste un modo per cambiare il codice opzione viewall per ottenere i dati veloce. o c'è comunque di migliorare le prestazioni e diminuire il tempo di record vincolante.

Ecco il mio codice.

Codice 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 file ...

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; 
    } 
È stato utile?

Soluzione

La mia squadra ha fatto test di performance sul RadGrid vs qualche altro altamente consigliati controlli 3rd party, e RadGrid stato il più veloce al momento ... quindi avete fatto una buona scelta nei controlli.

Il browser è il tuo limite. Avrete lo stesso problema con qualsiasi controllo. E 'cattiva pratica di mostrare più di una quantità utile di dati sullo schermo in una sola volta.

6000 righe e 16 colonne ... Questo è probabilmente più di 9 MB di HTML browser deve analizzare attraverso solo per il vostro datagrid.

non dare loro un'opzione ViewAll. Se vogliono cercare attraverso i dati in modo rapido, è possibile aggiungere funzionalità di ricerca che filtrano i risultati.

Se vogliono veramente tutti i dati in una sola volta, quello che faccio è fornire un collegamento vicino alla griglia che permette loro di scaricare tutta la griglia nei dati come file Excel.

Altri suggerimenti

Mentre io sono d'accordo con @Ed B che avete un sacco di dati che si sta presentando nella griglia, penso che i browser più vecchi avranno problemi a gestire l'occupazione di memoria si sta presentando.

C'è una nuova funzione disponibile nella RadGrid (a partire dal 2 ° trimestre 2013) chiamato virtualizzazione che possono dare l'urto delle prestazioni e 'Visualizza tutti' funzione che si sta cercando.

È possibile attivare la virtualizzazione di rete con l'aggiunta del seguente codice nel vostro RadGrid / ClientSettings markup:

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

Si può imparare di più sulla funzione alla demo online: http://demos.telerik.com/aspnet-ajax /grid/examples/performance/virtualization/defaultcs.aspx

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top