This is a migrated thread and some comments may be shown as answers.

paging isn't working after customizing page size

9 Answers 818 Views
Grid
This is a migrated thread and some comments may be shown as answers.
Lina
Top achievements
Rank 1
Lina asked on 09 May 2014, 08:23 AM
I customized the page sized in paging drop down in code behind.

when the user change the paging size to 100 (or lower) it's working.
but when user change the paging size to 200 (or higher) and then try to press on next or different page size nothing happen. the big page size cause the paging mechanism to stuck until i refresh the page.

partial code:

grid.aspx.cs

  protected void RadGrid1_ItemCreated(object sender, Telerik.Web.UI.GridItemEventArgs e)
    {
        //change paging combo value
        if (e.Item is GridPagerItem)
        {
            var dropDown = (RadComboBox)e.Item.FindControl("PageSizeComboBox");
            var totalCount = ((GridPagerItem)e.Item).Paging.DataSourceCount;
            var sizes = new Dictionary<string, string>()
            {
                {"10", "10"},
                {"20", "20"},
                {"50", "50"}
            };
            if (totalCount > 100)
            {
                sizes.Add("100", "100");
            }
            if (totalCount > 200)
            {
                sizes.Add("200", "200");
            }
            if (totalCount > 500)
            {
                sizes.Add("500", "500");
            }

            dropDown.Items.Clear();
            foreach (var size in sizes)
            {
                var cboItem = new RadComboBoxItem() { Text = size.Key, Value = size.Value };
                cboItem.Attributes.Add("ownerTableViewId", e.Item.OwnerTableView.ClientID);
                dropDown.Items.Add(cboItem);
            }
            dropDown.FindItemByValue(e.Item.OwnerTableView.PageSize.ToString()).Selected = true;
        }


    }

grid.aspx
            <telerik:RadGrid ID="RadGrid1" runat="server"
                AllowSorting="false"
                MasterTableView-AllowMultiColumnSorting="true"
                AutoGenerateColumns="False" GridLines="None"
                AllowPaging="true" PageSize="50"
                Width="100%"
                OnNeedDataSource="RadGrid1_NeedDataSource"
                CellSpacing="0"
                OnItemDataBound="RadGrid1_ItemDataBound"
                OnPageIndexChanged="RadGrid1_PageIndexChanged"
                OnPreRender="RadGrid1_PreRender"
                OnItemCreated ="RadGrid1_ItemCreated"
                >
              
                <MasterTableView CommandItemDisplay="Top"
                    DataKeyNames="CycleCountDetailID, CycleCountID, ProductID"
                    ClientDataKeyNames="CycleCountDetailID, CycleCountID, ProductID"
                    >
                    <PagerStyle AlwaysVisible="true" Mode="NextPrevAndNumeric" />


9 Answers, 1 is accepted

Sort by
0
Princy
Top achievements
Rank 2
answered on 13 May 2014, 06:45 AM
Hi Lina,

I was not able to replicate such an issue at my end. Please take a look at the sample code snippet which works as expected.

ASPX:
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<telerik:RadGrid ID="RadGrid1" runat="server" AutoGenerateColumns="false" DataSourceID="SqlDataSource1"    AllowPaging="true" AutoGenerateEditColumn="true" AllowSorting="true" OnItemCreated="RadGrid1_ItemCreated">
    <MasterTableView DataKeyNames="OrderID">
        <PagerStyle AlwaysVisible="true" Mode="NextPrevAndNumeric" />
        <Columns>
            <telerik:GridBoundColumn UniqueName="OrderID" DataField="OrderID" HeaderText="OrderID"/>          
            <telerik:GridBoundColumn DataField="ShipCity" HeaderText="ShipCity" UniqueName="ShipCity"/>
        </Columns>
    </MasterTableView>
</telerik:RadGrid>
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:ConnectionString %>" SelectCommand="SELECT  * FROM [Orders]"></asp:SqlDataSource>

C#:
protected void RadGrid1_ItemCreated(object sender, GridItemEventArgs e)
{
    if (e.Item is GridPagerItem)
    {
        var dropDown = (RadComboBox)e.Item.FindControl("PageSizeComboBox");
        var totalCount = ((GridPagerItem)e.Item).Paging.DataSourceCount;
        var sizes = new Dictionary<string, string>() {
        {"10", "10"},
        {"20", "20"},
        {"50", "50"}
    };
        if (totalCount > 100)
        {
            sizes.Add("100", "100");
        }
        if (totalCount > 200)
        {
            sizes.Add("200", "200");
        }
        if (totalCount > 500)
        {
            sizes.Add("500", "500");
        }
        sizes.Add("All", totalCount.ToString());
 
        dropDown.Items.Clear();
        foreach (var size in sizes)
        {
            var cboItem = new RadComboBoxItem() { Text = size.Key, Value = size.Value };
            cboItem.Attributes.Add("ownerTableViewId", e.Item.OwnerTableView.ClientID);
            dropDown.Items.Add(cboItem);
        }
        dropDown.FindItemByValue(e.Item.OwnerTableView.PageSize.ToString()).Selected = true;
    }
}

Thanks,
Princy
0
Lina
Top achievements
Rank 1
answered on 13 May 2014, 07:25 AM
Princy, you are working with DataSourceID and i update on OnNeedDataSource. there are slight changes in logic and data content (i have more fields of types labels, RadTextBox, RadNumericTextBox and GridBoundColumn)
i can't change to work with DataSourceID because i'm working with session to update the editable fields in grid.
after OnPreRender it takes 9 minutes for the page to load. can this cause the problem? and why is it take so long to render the page?
0
Lina
Top achievements
Rank 1
answered on 13 May 2014, 08:23 AM
is seems the problem is related to the RadTextBox
in your code, try to add 2 RadTextBox  under Columns and see the paging isn't working propertly

                        <telerik:GridTemplateColumn DataField="OrderID" DataType="System.String" HeaderText="OrderID" Groupable="False" SortExpression="OrderID">
                            <ItemTemplate>
                                <telerik:RadTextBox   ID="OrderID1" runat="server" Width="100px" 
                                    Text='<%# Bind("OrderID") %>'>
                                    
                                </telerik:RadTextBox>
                            </ItemTemplate>
                            <HeaderStyle HorizontalAlign="Center" Width="100px" />
                            <ItemStyle HorizontalAlign="Center" Width="100px" />
                        </telerik:GridTemplateColumn>



                        <telerik:GridTemplateColumn DataField="OrderID" DataType="System.String" HeaderText="OrderID" Groupable="False" SortExpression="OrderID">
                            <ItemTemplate>
                                <telerik:RadTextBox   ID="OrderID2" runat="server" Width="100px" 
                                    Text='<%# Bind("OrderID") %>'>
                                    
                                </telerik:RadTextBox>
                            </ItemTemplate>
                            <HeaderStyle HorizontalAlign="Center" Width="100px" />
                            <ItemStyle HorizontalAlign="Center" Width="100px" />
                        </telerik:GridTemplateColumn>
0
Princy
Top achievements
Rank 2
answered on 14 May 2014, 05:55 AM
Hi Lina,

Such an issue is not expected. You can take a look at the following sample code snippet. Also please have a look at the articles under Performance mentioned here to know more about grid performance optimizations.

ASPX:
<telerik:RadAjaxManager ID="RadAjaxManager1" runat="server">
    <AjaxSettings>
        <telerik:AjaxSetting AjaxControlID="RadGrid1">
            <UpdatedControls>
                <telerik:AjaxUpdatedControl ControlID="RadGrid1" LoadingPanelID="RadAjaxLoadingPanel1">
                </telerik:AjaxUpdatedControl>
            </UpdatedControls>
        </telerik:AjaxSetting>
    </AjaxSettings>
</telerik:RadAjaxManager>
<telerik:RadAjaxLoadingPanel ID="RadAjaxLoadingPanel1" runat="server" Skin="WebBlue">
</telerik:RadAjaxLoadingPanel>
<telerik:RadGrid ID="RadGrid1" AllowPaging="True" runat="server" AllowSorting="true" OnNeedDataSource="RadGrid1_NeedDataSource" AutoGenerateColumns="false" OnItemCreated="RadGrid1_ItemCreated">
    <MasterTableView>
        <Columns>
            <telerik:GridBoundColumn UniqueName="OrderID" DataField="OrderID" HeaderText="OrderID" />
            <telerik:GridBoundColumn DataField="ShipCity" HeaderText="ShipCity" UniqueName="ShipCity" />
            <telerik:GridTemplateColumn DataField="CustomerID" DataType="System.String" HeaderText="CustomerID" SortExpression="CustomerID">
                <ItemTemplate>
                    <telerik:RadTextBox ID="radtxtCustomerID" runat="server" Width="100px" Text='<%# Bind("CustomerID") %>'>
                    </telerik:RadTextBox>
                </ItemTemplate>
            </telerik:GridTemplateColumn>
            <telerik:GridTemplateColumn DataField="Freight" HeaderText="Freight" SortExpression="Freight">
                <ItemTemplate>
                    <telerik:RadTextBox ID="radtxtFreight" runat="server" Text='<%# Bind("Freight") %>'>
                    </telerik:RadTextBox>
                </ItemTemplate>
            </telerik:GridTemplateColumn>
        </Columns>
    </MasterTableView>
</telerik:RadGrid>

C#:
protected void RadGrid1_NeedDataSource(object source, Telerik.Web.UI.GridNeedDataSourceEventArgs e)
{
    RadGrid1.DataSource = GetDataTable("SELECT * FROM Orders");
}
 
protected void RadGrid1_ItemCreated(object sender, GridItemEventArgs e)
{
    if (e.Item is GridPagerItem)
    {
        var dropDown = (RadComboBox)e.Item.FindControl("PageSizeComboBox");
        var totalCount = ((GridPagerItem)e.Item).Paging.DataSourceCount;
        var sizes = new Dictionary<string, string>() {
    {"10", "10"},
    {"20", "20"},
    {"50", "50"}
};
        if (totalCount > 100)
        {
            sizes.Add("100", "100");
        }
        if (totalCount > 200)
        {
            sizes.Add("200", "200");
        }
        if (totalCount > 500)
        {
            sizes.Add("500", "500");
        }
        sizes.Add("All", totalCount.ToString());
 
        dropDown.Items.Clear();
        foreach (var size in sizes)
        {
            var cboItem = new RadComboBoxItem() { Text = size.Key, Value = size.Value };
            cboItem.Attributes.Add("ownerTableViewId", e.Item.OwnerTableView.ClientID);
            dropDown.Items.Add(cboItem);
        }
        dropDown.FindItemByValue(e.Item.OwnerTableView.PageSize.ToString()).Selected = true;
    }
}
 
public DataTable GetDataTable(string query)
{
    String ConnString = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
    SqlConnection conn = new SqlConnection(ConnString);
    SqlDataAdapter adapter = new SqlDataAdapter();
    adapter.SelectCommand = new SqlCommand(query, conn);
    DataTable myDataTable = new DataTable();
    conn.Open();
    try
    {
        adapter.Fill(myDataTable);
    }
    finally
    {
        conn.Close();
    }
    return myDataTable;
}

Thanks,
Princy
0
Lina
Top achievements
Rank 1
answered on 16 May 2014, 11:20 AM
Hi Prince
i took your exact sample above ( i created Orders table for this sample with 600 items). in the sample i have problem with paging 500 items. after changing page size to 500 i can't change paging size back to 50 for example, the paging disappear.
don't you have the same problem?
0
Princy
Top achievements
Rank 2
answered on 16 May 2014, 12:01 PM
Hi Lina,

I guess that when you have the PageSize set to the total count of rows, the Pager disappears. You can set the AlwaysVisible="true" property for the PagerStyle.

ASPX:
<telerik:RadGrid ID="RadGrid1"  runat="server">
  <PagerStyle AlwaysVisible="true" />
    <MasterTableView>

Thanks,
Princy
0
Lina
Top achievements
Rank 1
answered on 16 May 2014, 12:26 PM
now i have the page, when i try to change from 500 to 10 it doesn't work. next page doesn't work as well.
0
Lina
Top achievements
Rank 1
answered on 16 May 2014, 05:29 PM
if i add more RadTextBox to your example, it stop working with 100 items in page:

<telerik:RadAjaxManager ID="RadAjaxManager2" runat="server">
    <AjaxSettings>
        <telerik:AjaxSetting AjaxControlID="RadGrid1">
            <UpdatedControls>
                <telerik:AjaxUpdatedControl ControlID="RadGrid1" LoadingPanelID="RadAjaxLoadingPanel1">
                </telerik:AjaxUpdatedControl>
            </UpdatedControls>
        </telerik:AjaxSetting>
    </AjaxSettings>
</telerik:RadAjaxManager>
<telerik:RadAjaxLoadingPanel ID="RadAjaxLoadingPanel2" runat="server" Skin="WebBlue">
</telerik:RadAjaxLoadingPanel>
<telerik:RadGrid ID="RadGrid1" AllowPaging="True" runat="server" AllowSorting="true" OnNeedDataSource="RadGrid1_NeedDataSource" AutoGenerateColumns="false" OnItemCreated="RadGrid1_ItemCreated">
    <PagerStyle AlwaysVisible="true" />
    <MasterTableView>
        <Columns>
            <telerik:GridBoundColumn UniqueName="OrderID" DataField="OrderID" HeaderText="OrderID" />
            <telerik:GridBoundColumn DataField="ShipCity" HeaderText="ShipCity" UniqueName="ShipCity" />
            <telerik:GridTemplateColumn DataField="CustomerID" DataType="System.String" HeaderText="CustomerID" SortExpression="CustomerID">
                <ItemTemplate>
                    <telerik:RadTextBox ID="radtxtCustomerID" runat="server" Width="100px" Text='<%# Bind("CustomerID") %>'>
                    </telerik:RadTextBox>
                </ItemTemplate>
            </telerik:GridTemplateColumn>
            <telerik:GridTemplateColumn DataField="Freight" HeaderText="Freight" SortExpression="Freight">
                <ItemTemplate>
                    <telerik:RadTextBox ID="radtxtFreight" runat="server" Text='<%# Bind("Freight") %>'>
                    </telerik:RadTextBox>
                </ItemTemplate>
            </telerik:GridTemplateColumn>
            <telerik:GridTemplateColumn DataField="Freight" HeaderText="Freight2" SortExpression="Freight">
                <ItemTemplate>
                    <telerik:RadTextBox ID="radtxtFreight2" runat="server" Text='<%# Bind("Freight") %>'>
                    </telerik:RadTextBox>
                </ItemTemplate>
            </telerik:GridTemplateColumn>
            <telerik:GridTemplateColumn DataField="Freight" HeaderText="Freight3" SortExpression="Freight">
                <ItemTemplate>
                    <telerik:RadTextBox ID="radtxtFreight3" runat="server" Text='<%# Bind("Freight") %>'>
                    </telerik:RadTextBox>
                </ItemTemplate>
            </telerik:GridTemplateColumn>
            <telerik:GridTemplateColumn DataField="Freight" HeaderText="Freight4" SortExpression="Freight">
                <ItemTemplate>
                    <telerik:RadTextBox ID="radtxtFreight4" runat="server" Text='<%# Bind("Freight") %>'>
                    </telerik:RadTextBox>
                </ItemTemplate>
            </telerik:GridTemplateColumn>
        </Columns>
    </MasterTableView>
</telerik:RadGrid>
0
Accepted
Princy
Top achievements
Rank 2
answered on 17 May 2014, 03:47 AM
Hi Lina,

I guess you have a large number of columns to be displayed, hence when the pagesize is set to a higher number it takes time to load. You can check the following articles which will help you to increase the performance of the grid.
Client/server grid performance optimizations
Optimizing Performance
Optimizing ViewState usage

Thanks,
Princy
Tags
Grid
Asked by
Lina
Top achievements
Rank 1
Answers by
Princy
Top achievements
Rank 2
Lina
Top achievements
Rank 1
Share this question
or