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

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

Sigh.

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.

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

Thanks

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