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

RadGrid Paging not working with NeedDataSource

6 Answers 1993 Views
Grid
This is a migrated thread and some comments may be shown as answers.
Vincy
Top achievements
Rank 1
Vincy asked on 04 Feb 2014, 11:18 AM
Hi All,
I have a RadGrid like below.  While databinding it by using NeedDataSource event, the paging is not working . i.e results are displaying correctly on first load, but on clicking paging buttons,   radgrid binds again and no paging  nothing happens.
Please suggest .
  
Here is the complete code I am using.


HTML CODE
<telerik:RadGrid ID="PhaseView" PageSize="50" runat="server" Width="2000px"
       OnNeedDataSource="PhaseView_NeedDataSource"
       OnDataBound="PhaseView_DataBound" AllowCustomPaging="false"
       OnPageIndexChanged="PhaseView_PageIndexChanged"
                         AutoGenerateColumns="false" AllowPaging="true" AllowSorting="true" AllowFilteringByColumn="true"
                        GridLines="None" ShowGroupPanel="true"  
                        AllowMultiRowSelection="true"  >
                        <MasterTableView DataKeyNames="MessageID" IsFilterItemExpanded="False" GroupLoadMode="Client"
                            CommandItemDisplay="Top">
                            <CommandItemSettings ShowExportToCsvButton="true" ShowAddNewRecordButton="false"
                                ShowRefreshButton="false" ShowExportToExcelButton="true" />

                            <Columns>
                                <telerik:GridBoundColumn DataField="ProjectID" DataFormatString="{0:d}" HeaderText="Project ID"
                                    SortExpression="ProjectID" UniqueName="ProjectID">
                                </telerik:GridBoundColumn>
                                <telerik:GridHyperLinkColumn DataNavigateUrlFields="ProjectID" DataNavigateUrlFormatString="ProjectDetails.aspx?ProjectID={0}"
                                    DataTextField="ProjectName" DataType="System.String" HeaderText="Project Name"
                                    SortExpression="ProjectName" UniqueName="ProjectName">
                                </telerik:GridHyperLinkColumn>
                                <telerik:GridBoundColumn DataField="CustomerName" HeaderText="Customer Name" SortExpression="CustomerName"
                                    UniqueName="CustomerName">
                                </telerik:GridBoundColumn>
                                <telerik:GridBoundColumn DataField="RegionName" HeaderText="Region" SortExpression="RegionName"
                                    UniqueName="RegionName">
                                </telerik:GridBoundColumn>
                                <telerik:GridBoundColumn DataField="ProjectManagerName" HeaderText="Project Manager"
                                    SortExpression="ProjectManagerName" UniqueName="ProjectManagerName">
                                </telerik:GridBoundColumn>
                                <telerik:GridBoundColumn HeaderText="Phase Name" DataField="Phase" UniqueName="TagName"
                                    SortExpression="Phase">
                                </telerik:GridBoundColumn>
                                <telerik:GridBoundColumn HeaderText="CreatedBy" DataField="CreatedBy" UniqueName="CreatedBy"
                                    SortExpression="CreatedBy">
                                </telerik:GridBoundColumn>
                                <telerik:GridBoundColumn DataField="EmailCreatedDate" HeaderText="EmailCreatedDate"
                                    SortExpression="EmailCreatedDate" UniqueName="EmailCreatedDate">
                                </telerik:GridBoundColumn>
                                <telerik:GridBoundColumn DataField="MessageSubject" HeaderText="MessageSubject" SortExpression="MessageSubject"
                                    UniqueName="MessageSubject">
                                </telerik:GridBoundColumn>
                                <telerik:GridBoundColumn DataField="From" HeaderText="From" SortExpression="From"
                                    UniqueName="From">
                                </telerik:GridBoundColumn>
                                <telerik:GridBoundColumn DataField="TO" HeaderText="TO" SortExpression="TO">
                                </telerik:GridBoundColumn>
                                <telerik:GridBoundColumn HeaderText="CC" DataField="CC" UniqueName="CC" SortExpression="CC">
                                </telerik:GridBoundColumn>
                            </Columns>
                        </MasterTableView>
                        <ClientSettings AllowDragToGroup="True" AllowColumnHide="True" AllowRowHide="True"
                            AllowColumnsReorder="True" ReorderColumnsOnClient="True" ColumnsReorderMethod="Reorder">
                        </ClientSettings>
                        <HeaderContextMenu EnableAutoScroll="True">
                        </HeaderContextMenu>
                    </telerik:RadGrid>

.cs Code

 protected void Page_Load(object sender, EventArgs e)
        {
            try
            {
                if (Page.IsPostBack == false)
                {
                    loadgrid();
                }
            }
            catch (Exception ex)
            {
                BusinessLogic.Debug.InsertLogEntry(ex);
            }
            finally
            {
                AuthObj = null;
            }
        }



 protected void loadgrid()
        {
            Messages objMessage = new Messages();
            try
            {
                PhaseView.DataSource = objMessage.GetEmailReportData_New();  // this function returns a DataTable
                // PhaseView is the ID of RadGrid Control
                PhaseView.DataBind();
            }
            catch (Exception ex)
            {
                BusinessLogic.Debug.InsertLogEntry(ex);
            }
        }


 protected void PhaseView_NeedDataSource(object source, GridNeedDataSourceEventArgs e)
        {
            Messages objMessage = new Messages();
            DataTable dt = new DataTable();
            try
            {
                    PhaseView.DataSource = objMessage.GetEmailReportData_New();       // this function returns a DataTable
            }
            catch (Exception ex)
            {
                BusinessLogic.Debug.InsertLogEntry(ex);
            }
            finally
            {
                objMessage = null;
            }
        }


 protected void PhaseView_PageIndexChanged(object sender, GridPageChangedEventArgs e)
        {  
            loadgrid();
        }

        protected void PhaseView_DataBound(object sender, EventArgs e)
        {

        }





6 Answers, 1 is accepted

Sort by
0
Princy
Top achievements
Rank 2
answered on 04 Feb 2014, 11:35 AM
Hi Vikas,

From your code i see that you are binding the RadGrid during the PageLoad as well as on OnPageIndexChanged event which is not needed when using OnNeedDataSource event to bind the Radgrid. When using the NeedDataSource event, RadGrid can automatically accommodate the appropriate database operations without the need for you explicitly handle any sorting, paging, grouping, and so on. Please go through this online demo on Grid - Simple Vs Advanced Data Binding.

Thanks,
Princy
0
Vincy
Top achievements
Rank 1
answered on 04 Feb 2014, 11:49 AM
Hi, Thanks for your prompt reply.
As you suggested, I have commented "loadgrid" function below. but still the paging not working as expected.


 protected void PhaseView_PageIndexChanged(object sender, GridPageChangedEventArgs e)
        {  
           //   loadgrid();
        }


One thing more I want to share is that the function below returns whole of the data from database.. I mean it is not customized to return only required records for every page etc.

  objMessage.GetEmailReportData_New();



0
Vincy
Top achievements
Rank 1
answered on 04 Feb 2014, 06:45 PM
Please anyone suggest what am I doing incorrect.....

Thanks..
0
Princy
Top achievements
Rank 2
answered on 05 Feb 2014, 04:03 AM
Hi,

Please try the following sample code snippet, I have passed a DataTable as DataSource to the RadGrid.

ASPX:
<telerik:RadGrid ID="PhaseView" runat="server" OnNeedDataSource="PhaseView_NeedDataSource" AutoGenerateColumns="false" AllowPaging="true" AllowSorting="true" AllowFilteringByColumn="true" GridLines="None" ShowGroupPanel="true" AllowMultiRowSelection="true">
    <MasterTableView DataKeyNames="OrderID" CommandItemDisplay="Top">
        <CommandItemSettings ShowExportToCsvButton="true" ShowAddNewRecordButton="false" ShowRefreshButton="false" ShowExportToExcelButton="true" />
        <Columns>
            <telerik:GridBoundColumn DataField="OrderID" DataFormatString="{0:d}" HeaderText="OrderID" SortExpression="OrderID" UniqueName="OrderID">
            </telerik:GridBoundColumn>
            <telerik:GridBoundColumn DataField="ShipCountry" HeaderText="ShipCountry" SortExpression="ShipCountry" UniqueName="ShipCountry">
            </telerik:GridBoundColumn>
            <telerik:GridBoundColumn DataField="ShipVia" HeaderText="ShipVia" SortExpression="ShipVia" UniqueName="ShipVia">
            </telerik:GridBoundColumn>
        </Columns>
    </MasterTableView>
    <ClientSettings AllowDragToGroup="True" AllowColumnHide="True" AllowRowHide="True" AllowColumnsReorder="True" ReorderColumnsOnClient="True" ColumnsReorderMethod="Reorder">
    </ClientSettings>
</telerik:RadGrid>

C#:
protected void PhaseView_NeedDataSource(object sender, GridNeedDataSourceEventArgs e)
{
    PhaseView.DataSource = GetDataTable("SELECT * FROM Orders");
}
public DataTable GetDataTable(string query)
{
    String ConnString = ConfigurationManager.ConnectionStrings["Northwind_newConnectionString3"].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
Vincy
Top achievements
Rank 1
answered on 05 Feb 2014, 07:52 AM
Hi..Thanks for your efforts...but unfortunately it is not working..
Now have changed my code like this:

I have removed Gridbinding code from PageLoad and also

 <telerik:RadGrid ID="PhaseView" PageSize="50" runat="server" Width="2000px" OnNeedDataSource="PhaseView_NeedDataSource"
                         AllowPaging="true"
                        AutoGenerateColumns="false"  AllowSorting="true" AllowFilteringByColumn="true"
                        GridLines="None" ShowGroupPanel="true"  
                        AllowMultiRowSelection="true"   OnPageIndexChanged="PhaseView_PageIndexChanged">
                        <MasterTableView DataKeyNames="MessageID" IsFilterItemExpanded="False"
                            CommandItemDisplay="Top">
                            <CommandItemSettings ShowExportToCsvButton="true" ShowAddNewRecordButton="false"
                                ShowRefreshButton="false" ShowExportToExcelButton="true" />
                            <Columns>
                                <telerik:GridBoundColumn DataField="ProjectID" DataFormatString="{0:d}" HeaderText="Project ID"
                                    SortExpression="ProjectID" UniqueName="ProjectID">
                                </telerik:GridBoundColumn>
                                <telerik:GridHyperLinkColumn DataNavigateUrlFields="ProjectID" DataNavigateUrlFormatString="ProjectDetails.aspx?ProjectID={0}"
                                    DataTextField="ProjectName" DataType="System.String" HeaderText="Project Name"
                                    SortExpression="ProjectName" UniqueName="ProjectName">
                                </telerik:GridHyperLinkColumn>
                                <telerik:GridBoundColumn DataField="CustomerName" HeaderText="Customer Name" SortExpression="CustomerName"
                                    UniqueName="CustomerName">
                                </telerik:GridBoundColumn>
                                <telerik:GridBoundColumn DataField="RegionName" HeaderText="Region" SortExpression="RegionName"
                                    UniqueName="RegionName">
                                </telerik:GridBoundColumn>
                                <telerik:GridBoundColumn DataField="ProjectManagerName" HeaderText="Project Manager"
                                    SortExpression="ProjectManagerName" UniqueName="ProjectManagerName">
                                </telerik:GridBoundColumn>
                                <telerik:GridBoundColumn HeaderText="Phase Name" DataField="Phase" UniqueName="TagName"
                                    SortExpression="Phase">
                                </telerik:GridBoundColumn>
                                <telerik:GridBoundColumn HeaderText="CreatedBy" DataField="CreatedBy" UniqueName="CreatedBy"
                                    SortExpression="CreatedBy">
                                </telerik:GridBoundColumn>
                                <telerik:GridBoundColumn DataField="EmailCreatedDate" HeaderText="EmailCreatedDate"
                                    SortExpression="EmailCreatedDate" UniqueName="EmailCreatedDate">
                                </telerik:GridBoundColumn>
                                <telerik:GridBoundColumn DataField="MessageSubject" HeaderText="MessageSubject" SortExpression="MessageSubject"
                                    UniqueName="MessageSubject">
                                </telerik:GridBoundColumn>
                                <telerik:GridBoundColumn DataField="From" HeaderText="From" SortExpression="From"
                                    UniqueName="From">
                                </telerik:GridBoundColumn>
                                <telerik:GridBoundColumn DataField="TO" HeaderText="TO" SortExpression="TO">
                                </telerik:GridBoundColumn>
                                <telerik:GridBoundColumn HeaderText="CC" DataField="CC" UniqueName="CC" SortExpression="CC">
                                </telerik:GridBoundColumn>
                            </Columns>
                        </MasterTableView>
                        <ClientSettings AllowDragToGroup="True" AllowColumnHide="True" AllowRowHide="True"
                            AllowColumnsReorder="True" ReorderColumnsOnClient="True" ColumnsReorderMethod="Reorder">
                        </ClientSettings>
                        <HeaderContextMenu EnableAutoScroll="True">
                        </HeaderContextMenu>
                    </telerik:RadGrid>

-----

  protected void PhaseView_NeedDataSource(object source, GridNeedDataSourceEventArgs e)
        {
            Messages objMessage = new Messages();
            DataTable dt = new DataTable();
            try
            {
                PhaseView.DataSource = GetDataTable();// objMessage.GetEmailReportData_New(); // objMessage.GetEmailReportData();
              
            }
            catch (Exception ex)
            {
                BusinessLogic.Debug.InsertLogEntry(ex);
            }
            finally
            {
                objMessage = null;
            }
        }

        public DataTable GetDataTable()
        {
            Messages objMessage = new Messages();
            DataTable myDataTable = new DataTable();
             try
            {
                myDataTable = objMessage.GetEmailReportData_New(); // objMessage.GetEmailReportData();
            }
            catch (Exception ex)
            {
                BusinessLogic.Debug.InsertLogEntry(ex);
            }
            finally
            {
                objMessage = null;
            }
            
            return myDataTable;
        }


one thing more... for this do i have to use PageIndexChanged event like this ?

 protected void PhaseView_PageIndexChanged(object sender, GridPageChangedEventArgs e)
        {  
                     PhaseView.CurrentPageIndex = e.NewPageIndex + 1;
        } 

0
Accepted
Princy
Top achievements
Rank 2
answered on 06 Feb 2014, 04:21 AM
Hi,

The advantage of using the NeedDataSource event is that RadGrid can automatically accommodate the appropriate database operations without the need for you explicitly handle any sorting, paging, grouping, and so on. So you do not have to call any events for paging. Please only use NeedDataSource event for binding the grid. Paging, sorting, filtering will all be handled by this event.
You can change your code as below:

C#:
protected void PhaseView_NeedDataSource(object source, GridNeedDataSourceEventArgs e)
{
  Messages objMessage = new Messages();
  try
  {
    PhaseView.DataSource = objMessage.GetEmailReportData_New();
  }
  catch (Exception ex)
  {
    BusinessLogic.Debug.InsertLogEntry(ex);
  }
  finally
  {
    objMessage = null;
  }
}

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