C# Telerik RadGrid绑定到大型数据表

C# Telerik RadGrid绑定到大型数据表,c#,asp.net,telerik-grid,C#,Asp.net,Telerik Grid,我已经成功地将RadGrid绑定到一个需要长时间查询才能生成的大型数据表。我的问题是,RadGrid只显示一个页面,当用户更改页面时必须发回,我丢失了数据表,必须再次执行这个庞大的查询 我尝试Ajaxify RadGrid,但它仍然调用Page_Load,因此无法保存数据表。它应该这样做吗 我能做些什么不同的事情?谢谢 <telerik:RadAjaxManager runat="server"> <AjaxSettings>

我已经成功地将RadGrid绑定到一个需要长时间查询才能生成的大型数据表。我的问题是,RadGrid只显示一个页面,当用户更改页面时必须发回,我丢失了数据表,必须再次执行这个庞大的查询

我尝试Ajaxify RadGrid,但它仍然调用Page_Load,因此无法保存数据表。它应该这样做吗

我能做些什么不同的事情?谢谢

    <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>

将该数据表存储在服务器端,当然,如果您这样做,您应该管理该缓存,例如,如果数据发生更改,请清除该缓存

现在,您的代码应该如下所示:

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服务器上的大量内存,当然这取决于数据表的大小