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

RadGrid PageIndexChanged Event

6 Answers 703 Views
Grid
This is a migrated thread and some comments may be shown as answers.
Craig
Top achievements
Rank 1
Craig asked on 04 Apr 2012, 11:05 PM

 

I have a grid where I'm binding data in the needdatasource event, and I'm retrieving a limited selection of records based on the page index. So when they go to the next page, I want to get the next batch of records based on the page size, and when they go back I want to get the previous batch, etc.

The problem I'm seeing is that the NeedDataSource event fires BEFORE the PageIndexChanged event. This means the CurrentPageIndex of the data grid in the NeedDataSource will always be incorrect, since it will always have the old value. I tried testing the RebindReason of the grid to see if I could determine if a page event had caused it, but that always returns ExplicitRebind {4} so it is useless.

How do I figure out what the correct page index is in the NeedDataSource event?

6 Answers, 1 is accepted

Sort by
0
Princy
Top achievements
Rank 2
answered on 05 Apr 2012, 07:25 AM
Hello Craig,

I have created a sample application using NeedDataSource event. On changing the page, PageIndexChanged event fires before NeedDataSource event. Here is the sample code.
aspx:
<telerik:RadGrid AllowPaging="true" PageSize="3" ID="RadGrid1" runat="server" AutoGenerateColumns="false" OnPageIndexChanged="RadGrid1_PageIndexChanged" OnNeedDataSource="RadGrid1_NeedDataSource">
 <MasterTableView CommandItemDisplay="Top">
  <Columns>
    <telerik:GridBoundColumn DataField="FirstName" UniqueName="FirstName" HeaderText="FirstName"></telerik:GridBoundColumn>
    <telerik:GridBoundColumn DataField="LastName" UniqueName="LastName" HeaderText="LastName"> </telerik:GridBoundColumn>
  </Columns>
 </MasterTableView>
</telerik:RadGrid>
C#:
public static string connection = WebConfigurationManager.ConnectionStrings["NorthwindConnectionString"].ConnectionString;
SqlConnection conn = new SqlConnection(connection);
public SqlCommand SqlCommand = new SqlCommand();
protected void RadGrid1_PageIndexChanged(object sender, Telerik.Web.UI.GridPageChangedEventArgs e)
{
  int index = RadGrid1.CurrentPageIndex;
}
protected void RadGrid1_NeedDataSource(object sender, Telerik.Web.UI.GridNeedDataSourceEventArgs e)
{
 string updateQuery = "SELECT  * FROM [Employees]";
 SqlCommand.CommandText = updateQuery;
 SqlCommand.Connection = conn;
 SqlDataAdapter da = new SqlDataAdapter(SqlCommand);
 DataSet ds = new DataSet();
 da.Fill(ds);
 RadGrid1.DataSource = ds;
}

Thanks,
Princy.
0
Craig
Top achievements
Rank 1
answered on 05 Apr 2012, 03:59 PM
Okay, sorry guys, I found the problem. The grid was in a control, and the grid's rebind event was being called from the container page on the page's load event. The individual who programmed it neglected to put the call within an ispostback test, so it was called EVERY time the page loaded, which naturally occurred before the pageindexchanged event.

Sigh.
0
Muhammad
Top achievements
Rank 1
answered on 03 Jul 2013, 11:03 AM
Hi,

I'm facing a problem when I click on Rad Grid Pager to move to the next page, it goes to error.aspx page. Have a look at below code:

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<IEnumerable<WeBOC.DAL.Vessel>>" %>
 
<%@ Register assembly="Telerik.Web.UI" namespace="Telerik.Web.UI" tagprefix="telerik" %>
<script runat="server">
 
    protected void RadGrid1_NeedDataSource(object sender, GridNeedDataSourceEventArgs e)
    {
        RadGrid1.DataSource = ViewData["Vessels"];
    }
 
</script>
<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
    Index
</asp:Content>
 
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
 
    <form id="form4">
    <telerik:RadAjaxManager ID="RadAjaxManager1" runat="server">
        <AjaxSettings>
            <telerik:AjaxSetting AjaxControlID="RadGrid1">
                <UpdatedControls>
                    <telerik:AjaxUpdatedControl ControlID="RadGrid1" LoadingPanelID="RadAjaxLoadingPanel1"/>
                </UpdatedControls>
            </telerik:AjaxSetting>
        </AjaxSettings>
    </telerik:RadAjaxManager>
    
    <h2>Vessels<telerik:RadScriptManager ID="RadScriptManager1" Runat="server">
        </telerik:RadScriptManager>
    </h2>
    
    
   <telerik:RadGrid ID="RadGrid1" runat="server" AutoGenerateColumns="False"
        CellSpacing="0" GridLines="None" Skin="WebBlue"
        onneeddatasource="RadGrid1_NeedDataSource" AllowPaging="True"
        PagerStyle-Mode="NextPrevNumericAndAdvanced"
        onpageindexchanged="RadGrid1_PageIndexChanged">
        <MasterTableView>
<CommandItemSettings ExportToPdfText="Export to PDF" ShowAddNewRecordButton="False"
                ShowRefreshButton="False"></CommandItemSettings>
 
<RowIndicatorColumn Visible="True" FilterControlAltText="Filter RowIndicator column"></RowIndicatorColumn>
 
<ExpandCollapseColumn Visible="True" FilterControlAltText="Filter ExpandColumn column"></ExpandCollapseColumn>
            <Columns>          
                <telerik:GridTemplateColumn FilterControlAltText="Filter TemplateColumn column" UniqueName="VIRTemplate" HeaderText="VIR No.">
                    <ItemTemplate>
                        <asp:HyperLink ID="HyperLink1" runat="server" Text='<%# Eval("VIR_NO") %>' NavigateUrl='<%# Url.Action("Inspector", "Vessel", new{id=Eval("VSSL_CALL_ID")}) %>' />                           
                    </ItemTemplate>
                </telerik:GridTemplateColumn>    
                <telerik:GridBoundColumn DataField="INBOUND_VOY_NO" HeaderText="I/B Voyage" />
                <telerik:GridBoundColumn DataField="OUTBOUND_VOY_NO" HeaderText="O/B Voyage" />
                <telerik:GridBoundColumn DataField="VESSEL_NAME" HeaderText="Vessel Name" />
                <telerik:GridBoundColumn DataField="ARRIVAL_DATE" HeaderText="Arrived" />
                <telerik:GridBoundColumn DataField="STATE" HeaderText="Phase" />                                               
            </Columns>
             
 
<EditFormSettings>
<EditColumn FilterControlAltText="Filter EditCommandColumn column"></EditColumn>
</EditFormSettings>
 
<PagerStyle PageSizeControlType="RadComboBox"></PagerStyle>
        </MasterTableView>
 
<PagerStyle PageSizeControlType="RadComboBox"></PagerStyle>
 
<FilterMenu EnableImageSprites="False"></FilterMenu>
 
    </telerik:RadGrid>
    
 
    <telerik:RadAjaxLoadingPanel runat="server" ID="RadAjaxLoadingPanel1"/>
     
     
    </form>
 
</asp:Content>


Anything am i missing? Furthermore, When i use grouping and filtering, it is not working properly and goes to error.aspx page. What is wrong with this code?? Please help me out.

Thanks.
0
Princy
Top achievements
Rank 2
answered on 08 Aug 2013, 01:41 PM
Hi Muhammad,

I tried your code and it works fine at my end.Are you calling the error.aspx page any where in the code?Below is code snippet i have tried,can you try and check if it works,if not please provide you C# code as well.

ASPX:
<telerik:RadAjaxManager ID="RadAjaxManager1" runat="server">
           <AjaxSettings>
               <telerik:AjaxSetting AjaxControlID="RadGrid1">
                   <UpdatedControls>
                       <telerik:AjaxUpdatedControl ControlID="RadGrid1" LoadingPanelID="RadAjaxLoadingPanel1" />
                   </UpdatedControls>
               </telerik:AjaxSetting>
           </AjaxSettings>
       </telerik:RadAjaxManager>
       <h2>
           Orders<telerik:RadScriptManager ID="RadScriptManager1" runat="server">
           </telerik:RadScriptManager>
       </h2>
       <telerik:RadGrid ID="RadGrid1" runat="server" AutoGenerateColumns="False" CellSpacing="0"
           GridLines="None" Skin="WebBlue" OnNeedDataSource="RadGrid1_NeedDataSource" AllowPaging="True"
           AllowFilteringByColumn="true" PagerStyle-Mode="NextPrevNumericAndAdvanced">
           <MasterTableView>
               <CommandItemSettings ExportToPdfText="Export to PDF" ShowAddNewRecordButton="False"
                   ShowRefreshButton="False"></CommandItemSettings>
               <RowIndicatorColumn Visible="True" FilterControlAltText="Filter RowIndicator column">
               </RowIndicatorColumn>
               <ExpandCollapseColumn Visible="True" FilterControlAltText="Filter ExpandColumn column">
               </ExpandCollapseColumn>
               <GroupByExpressions>
                   <telerik:GridGroupByExpression>
                       <SelectFields>
                           <telerik:GridGroupByField FieldAlias="ShipCity" FieldName="ShipCity"></telerik:GridGroupByField>
                       </SelectFields>
                       <GroupByFields>
                           <telerik:GridGroupByField FieldName="ShipCity" SortOrder="Descending"></telerik:GridGroupByField>
                       </GroupByFields>
                   </telerik:GridGroupByExpression>
               </GroupByExpressions>
               <Columns>
                   <telerik:GridTemplateColumn FilterControlAltText="Filter TemplateColumn column" UniqueName="VIRTemplate"
                       HeaderText="OrderID">
                       <ItemTemplate>
                           <asp:HyperLink ID="HyperLink1" runat="server" Text='<%# Eval("OrderID") %>' />
                       </ItemTemplate>
                   </telerik:GridTemplateColumn>
                   <telerik:GridBoundColumn DataField="ShipCity" HeaderText="ShipCity" />
               </Columns>
               <EditFormSettings>
                   <EditColumn FilterControlAltText="Filter EditCommandColumn column">
                   </EditColumn>
               </EditFormSettings>
               <PagerStyle PageSizeControlType="RadComboBox"></PagerStyle>
           </MasterTableView>
           <PagerStyle PageSizeControlType="RadComboBox"></PagerStyle>
           <FilterMenu EnableImageSprites="False">
           </FilterMenu>
       </telerik:RadGrid>
       <telerik:RadAjaxLoadingPanel runat="server" ID="RadAjaxLoadingPanel1" />

Thanks,
Princy
0
celerity12
Top achievements
Rank 1
answered on 19 Mar 2014, 03:29 PM
Do we have client side equivalent of RADGrid's PageIndexChanged event?

Thanks
0
Princy
Top achievements
Rank 2
answered on 20 Mar 2014, 04:04 AM
Hi,

You can subscribe to the OnCommand client event of the grid and check if the command name is Page to accomplish your requirement.

ASPX:
<ClientSettings>
  <ClientEvents OnCommand="OnGridCommand"  />
</ClientSettings>

JS:
<script type="text/javascript">
   function OnGridCommand(sender, args) {    
     if (args.get_commandName() == "Page")
       alert("Page Index Changed");
    }
</script>

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