Grid

Controls

All Controls

Grid

Rate this demo

Thank you for your post!
Submit a support ticket
If you have an active license or trial, you have access to dedicated support from Telerik’s developers. Response time is 24h for active licenses and 72h for trials, Mon-Fri.
Post in the forums
If you don’t have access to support or would like to help other people by sharing your problem, reach out to our active community in the forums.

Grid - 300 000 Rows with LINQ

Example Configuration
Settings:
Measurements: 122 ms (from Selecting to Selected LinqDataSource events)
147 ms
269 ms (from Init to Render)
Perform sorting/paging/filtering/grouping operation to see total time

Drag a column header and drop it here to group by that column
ProductIDProduct nameUnit priceQuantity per unitUnits in stockDiscontinued
Data pager
Data pager
Page size:
PageSizeComboBox
select
 335104 items in 33511 pages
1Chai$18.0010 boxes x 20 bags39
2Chang$19.0024 - 12 oz bottles17
3Aniseed Syrup$10.0012 - 550 ml bottles13
4Chef Anton's Cajun Seasoning$22.0048 - 6 oz jars53
5Chef Anton's Gumbo Mix$21.3536 boxes0
6Grandma's Boysenberry Spread$25.0012 - 8 oz jars120
7Uncle Bob's Organic Dried Pears$30.0012 - 1 lb pkgs.15
8Northwoods Cranberry Sauce$40.0012 - 12 oz jars6
9Mishi Kobe Niku$97.0018 - 500 g pkgs.29
10Ikura$31.0012 - 200 ml jars31
This demo illustrates the optimized performance techniques incorporated in the ASP.NET 3.5 build of RadGrid. The control takes advantage of the new LINQ (Language Integrated Query) syntax introduced in ASP.NET 3.5 and performs aggregate calculations or executes sorting/filtering/paging operations by means of native LINQ expressions. This technique significantly reduces the time necessary to process these actions "behind the scenes" and allows you to handle millions of records within a few milliseconds.

For better visual indication we output the period of time between the Init and Render stages of the control lifecycle just below the grid table.

You may also see how to utilize OpenAccess ORM, Telerik's free enterprise-grade ORM, to generate the data access layer for your app in just a few mouse clicks. You can download the Software Development Kit (SDK) for OpenAccess here. By doing the heavy lifting, OpenAccess can save you between 20% and 85% of development and testing time.

C# VB
Show code in new window Demo isolation steps
<%@ Page Language="C#" Inherits="Telerik.GridExamplesCSharp.DataEditing.ProgramaticLinqUpdates.DefaultCS"CodeFile="defaultcs.aspx.cs"  %>

<%@ Register TagPrefix="telerik" Namespace="Telerik.Web.UI" Assembly="Telerik.Web.UI" %>
<%@ Register TagPrefix="qsf" Namespace="Telerik.QuickStart" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns='http://www.w3.org/1999/xhtml'>
<head runat="server">
    <title>LINQ with ASP.NET GridView  | RadGrid Demo</title>
     <link href="styles.css" rel="stylesheet" />
</head>
<body>
    <form id="form1" runat="server">
    <telerik:RadScriptManager runat="server" ID="RadScriptManager1" />
    <telerik:RadSkinManager ID="QsfSkinManager" runat="server" ShowChooser="true" />
    <telerik:RadFormDecorator ID="QsfFromDecorator" runat="server" DecoratedControls="All" EnableRoundedCorners="false" />
    <telerik:RadAjaxManager ID="RadAjaxManager1" runat="server" RequestQueueSize="5">
        <AjaxSettings>
            <telerik:AjaxSetting AjaxControlID="CheckBox1">
                <UpdatedControls>
                    <telerik:AjaxUpdatedControl ControlID="RadGrid1" LoadingPanelID="RadAjaxLoadingPanel1" />
                    <telerik:AjaxUpdatedControl ControlID="Label1" />
                    <telerik:AjaxUpdatedControl ControlID="Label2" />
                    <telerik:AjaxUpdatedControl ControlID="Label3" />
                </UpdatedControls>
            </telerik:AjaxSetting>
            <telerik:AjaxSetting AjaxControlID="CheckBox2">
                <UpdatedControls>
                    <telerik:AjaxUpdatedControl ControlID="RadGrid1" LoadingPanelID="RadAjaxLoadingPanel1" />
                    <telerik:AjaxUpdatedControl ControlID="Label1" />
                    <telerik:AjaxUpdatedControl ControlID="Label2" />
                    <telerik:AjaxUpdatedControl ControlID="Label3" />
                </UpdatedControls>
            </telerik:AjaxSetting>
            <telerik:AjaxSetting AjaxControlID="RadGrid1">
                <UpdatedControls>
                    <telerik:AjaxUpdatedControl ControlID="RadGrid1" LoadingPanelID="RadAjaxLoadingPanel1" />
                    <telerik:AjaxUpdatedControl ControlID="Label1" />
                    <telerik:AjaxUpdatedControl ControlID="Label2" />
                    <telerik:AjaxUpdatedControl ControlID="Label3" />
                </UpdatedControls>
            </telerik:AjaxSetting>
        </AjaxSettings>
        <ClientEvents OnRequestStart="RequestStart" OnResponseEnd="ResponseEnd" />
    </telerik:RadAjaxManager>
    <telerik:RadAjaxLoadingPanel runat="server" ID="RadAjaxLoadingPanel1" />
    <telerik:RadCodeBlock ID="RadCodeBlock1" runat="server">
        <script type="text/javascript">
            function RequestStart(sender, eventArgs) {
                //Log the start time
                startTime = new Date();
            }
            function ResponseEnd(sender, eventArgs) {
                //Log the end time
                var endTime = new Date();
                //Display the total time
                $get("<%= lblTotal.ClientID %>").innerHTML = endTime - startTime + " ms";

            }
        </script>
    </telerik:RadCodeBlock>
    <qsf:ConfiguratorPanel ID="ConfiguratorPanel1" runat="server" Expanded="true" CssClass="configPanel">
        <table>
            <tr>
                <td class="settings">
                    <fieldset>
                        <legend>Settings:</legend>
                        <asp:CheckBox ID="CheckBox2" Text="Let RadGrid do the sorting instead of the SQL Server"
                            AutoPostBack="true" runat="server" />
                        <br />
                        <asp:CheckBox ID="CheckBox1" Text="Show aggregates" AutoPostBack="true" runat="server" />
                    </fieldset>
                </td>
                <td class="measurements">
                    <fieldset>
                        <legend>Measurements:</legend>
                        <label>Time to retrieve data:</label>
                        <asp:Label ID="Label1" ForeColor="Red" Font-Bold="true" runat="server"></asp:Label> ms
                        <em style="font-size: 12px; color: #767676;">(from Selecting to Selected LinqDataSource events)</em>
                        <br />
                        <label>Time to bind, aggregate and render data:</label>
                        <asp:Label ID="Label2" ForeColor="Red" Font-Bold="true" runat="server"></asp:Label>
                        ms
                        <br />
                        <label>Server time:</label>
                        <asp:Label ID="Label3" ForeColor="Red" Font-Bold="true" runat="server"></asp:Label>
                        ms <em style="font-size: 12px; color: #767676;">(from Init to Render)</em>
                        <br />
                        <label class="total">Total time:</label>
                        <asp:Label ID="lblTotal" ForeColor="Red" Font-Bold="true" runat="server">
                                  <i>Perform sorting/paging/filtering/grouping operation to see total time</i>
                        </asp:Label>
                    </fieldset>
                </td>
            </tr>
        </table>
    </qsf:ConfiguratorPanel>
    <br />
    <telerik:RadGrid AutoGenerateColumns="False" ID="RadGrid1" DataSourceID="LinqDataSource1"
        AllowFilteringByColumn="True" AllowPaging="True" AllowSorting="True" runat="server"
        ShowGroupPanel="true">
        <PagerStyle Mode="NextPrevAndNumeric" />
        <GroupingSettings CaseSensitive="false" />
        <MasterTableView TableLayout="Fixed">
            <Columns>
                <telerik:GridNumericColumn Aggregate="Count" HeaderText="ProductID" DataField="ProductID"
                    UniqueName="ProductID" SortExpression="ProductID" HeaderStyle-Width="50px" FilterControlWidth="30px"
                    AutoPostBackOnFilter="true" CurrentFilterFunction="equalto" ShowFilterIcon="false" />
                <telerik:GridBoundColumn HeaderText="Product name" DataField="ProductName" UniqueName="ProductName"
                    SortExpression="ProductName" HeaderStyle-Width="180px" FilterControlWidth="140px"
                    AutoPostBackOnFilter="true" CurrentFilterFunction="Contains" ShowFilterIcon="false" />
                <telerik:GridNumericColumn Aggregate="Sum" DataFormatString="{0:C}" FooterAggregateFormatString="<b>Total Price:</b> {0:C}"
                    HeaderText="Unit price" DataField="UnitPrice" UniqueName="UnitPrice" SortExpression="UnitPrice"
                    FilterControlWidth="80px" HeaderStyle-Width="115px" />
                <telerik:GridBoundColumn HeaderText="Quantity per unit" DataField="QuantityPerUnit"
                    UniqueName="QuantityPerUnit" SortExpression="QuantityPerUnit" HeaderStyle-Width="110px"
                    FilterControlWidth="90px" AutoPostBackOnFilter="true" CurrentFilterFunction="Contains"
                    ShowFilterIcon="false" />
                <telerik:GridNumericColumn Aggregate="Sum" FooterAggregateFormatString="<b>Total Units: </b>{0}"
                    HeaderText="Units in stock" DataField="UnitsInStock" UniqueName="UnitsInStock"
                    SortExpression="UnitsInStock" FilterControlWidth="80px" HeaderStyle-Width="120px" />
                <telerik:GridCheckBoxColumn DataField="Discontinued" UniqueName="Discontinued" HeaderText="Discontinued"
                    HeaderStyle-Width="60px" />
            </Columns>
        </MasterTableView>
        <ClientSettings AllowDragToGroup="true">
        </ClientSettings>
    </telerik:RadGrid>
    <asp:LinqDataSource ID="LinqDataSource1" runat="server" ContextTypeName="LinqToSql.TelerikSamplesDataContext"
        TableName="LargeProducts">
    </asp:LinqDataSource>
    </form>
</body>
</html>