2014-01-10 55 views
0

我已成功獲取RadGrid以綁定到需要執行冗長查詢的大型DataTable。我的問題是,RadGrid將只顯示一個頁面,並且必須在用戶更改頁面時回發,並且我失去了我的DataTable,並且必須再次執行這個巨大的查詢。Telerik RadGrid綁定到大型數據表

我試圖Ajaxify RadGrid,但它仍然調用Page_Load,所以我不能保存我的DataTable。 (它應該這樣做嗎?)

我能做些什麼不同嗎?謝謝。

<telerik:RadAjaxManager runat="server"> 
      <AjaxSettings> 
       <telerik:AjaxSetting AjaxControlID="rgReport"> 
        <UpdatedControls> 
         <telerik:AjaxUpdatedControl ControlID="rgReport" 
          LoadingPanelID="RadAjaxLoadingPanel1" /> 
        </UpdatedControls> 
       </telerik:AjaxSetting> 
      </AjaxSettings> 
     </telerik:RadAjaxManager> 

      <telerik:RadScriptManager ID="RadScriptManager1" runat="server"> 
     <Scripts> 
      <asp:ScriptReference Assembly="Telerik.Web.UI" Name="Telerik.Web.UI.Common.Core.js" /> 
      <asp:ScriptReference Assembly="Telerik.Web.UI" Name="Telerik.Web.UI.Common.jQuery.js" /> 
     </Scripts> 
    </telerik:RadScriptManager> 
       <telerik:RadAjaxLoadingPanel ID="RadAjaxLoadingPanel1" runat="server" IsSticky="False" Style="position: absolute; top: 0px; left: 0px; width: 100%; height: 100%;" EnableSkinTransparency="true" Transparency="0"> 
</telerik:RadAjaxLoadingPanel> 

<telerik:RadGrid ID="rgReport" runat="server" AllowPaging="True" PageSize="50" 
        AllowSorting="True" OnNeedDataSource="rgReport_NeedsDataSource" OnItemCommand="rgReport_ItemCommand" 
        AutoGenerateColumns="False" ShowStatusBar="True" CellSpacing="0" 
        GridLines="None"> 
        <ClientSettings> 
         <ClientEvents OnRowMouseOver="CBGridRowMouseOver" OnRowMouseOut="CBGridRowMouseOut" /> 
        </ClientSettings> 
        <MasterTableView Width="100%" DataKeyNames="submissionID" Name="Master"> 
         <CommandItemSettings ExportToPdfText="Export to Pdf"></CommandItemSettings> 
         <RowIndicatorColumn FilterControlAltText="Filter RowIndicator column" 
          Visible="True"> 
         </RowIndicatorColumn> 
         <ExpandCollapseColumn FilterControlAltText="Filter ExpandColumn column" 
          Visible="True"> 
         </ExpandCollapseColumn> 
         <Columns> 
          <telerik:GridBoundColumn SortExpression="customerID" HeaderText="customerID" HeaderButtonType="None" 
           DataField="customerID"> 
          </telerik:GridBoundColumn> 

回答

0

商店是數據表中cache在服務器端,當然你如果你這樣做,你應該管理該緩存,例如。如果數據改變,清除它。

現在你的代碼應該是這個樣子:

string cacheID = "myCacheID"; 
DataTable data = null; 
if (HttpContext.Current.Cache[cacheID] == null) 
{ 
    data = GetThatHugeDataTable(); 
    HttpContext.Current.Cache.Insert(cacheID, data); 
} 
else 
{ 
    data = (DataTable)HttpContext.Current.Cache[cacheID]; 
} 

當數據變化清除緩存:

HttpContext.Current.Cache.Remove(cacheID); 

請注意,這會消耗Web服務器上大量的內存,當然取決於DataTable有多大。

相關問題