2014-01-10 56 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有多大。

相关问题