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

[Solved] Using Custom Pager in Master table and Detail table

1 Answer 268 Views
Grid
This is a migrated thread and some comments may be shown as answers.
Tatiana
Top achievements
Rank 2
Tatiana asked on 07 Apr 2009, 05:30 PM

I use RadGrid control version 4.6.
I am trying to create a custom pager that have ability, besides jump from one page to another, to change the size of the master table and / or detail table of the grid. I can resize the master table. Unfortunately, when I resize the master table, the dimensions of the detail table also change. It is not the behavior I need.

 

Another problem I have is when I try to change the size of detail table, I’m getting the following exception:

 
Object reference not set to an instance of an object.

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details:
System.NullReferenceException: Object reference not set to an instance of an object.
Source Error:
An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below
Stack Trace:
[NullReferenceException: Object reference not set to an instance of an object.]

   Telerik.WebControls.GridPageSizeChangedEventArgs.ExecuteCommand(Object source) +18
   Telerik.WebControls.RadGrid.OnBubbleEvent(Object source, EventArgs e) +134
   System.Web.UI.Control.RaiseBubbleEvent(Object source, EventArgs args) +37
   Telerik.WebControls.GridItem.OnBubbleEvent(Object source, EventArgs e) +38
   System.Web.UI.Control.RaiseBubbleEvent(Object source, EventArgs args) +37
   Telerik.WebControls.GridTableView.set_PageSize(Int32 value) +176
   Telerik.WebControls.GridPageChangedEventArgs.ExecuteCommand(Object source) +722
 
[GridException: The specified value cannot be set on PageSize]
   Telerik.WebControls.GridPageChangedEventArgs.ExecuteCommand(Object source) +822
   Telerik.WebControls.RadGrid.OnBubbleEvent(Object source, EventArgs e) +134
   System.Web.UI.Control.RaiseBubbleEvent(Object source, EventArgs args) +37
   Telerik.WebControls.GridItem.OnBubbleEvent(Object source, EventArgs e) +38
   System.Web.UI.Control.RaiseBubbleEvent(Object source, EventArgs args) +37
   Telerik.WebControls.GridItem.OnBubbleEvent(Object source, EventArgs e) +38
   System.Web.UI.Control.RaiseBubbleEvent(Object source, EventArgs args) +37
   Telerik.WebControls.GridItem.OnBubbleEvent(Object source, EventArgs e) +115
   System.Web.UI.Control.RaiseBubbleEvent(Object source, EventArgs args) +37
   System.Web.UI.WebControls.LinkButton.OnCommand(CommandEventArgs e) +118
   System.Web.UI.WebControls.LinkButton.RaisePostBackEvent(String eventArgument) +135
   System.Web.UI.WebControls.LinkButton.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +10
   System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +13
   System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +175

   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1565


Version Information: Microsoft .NET Framework Version:2.0.50727.3082; ASP.NET Version:2.0.50727.3082

 

Belowyou will find the sample code that you can use to reproduce the problems I described above. Can somebody helps me to figure out if I did anything wrong?

 

Thank you very much in advance for all your help !!!

 

 

 

 

 

WWR.Master:
 

<%@ Master Language="C#" AutoEventWireup="true" Codebehind="WWR.Master.cs" Inherits="TestingStaff.WWR" %>

 

 

 

<!

 

DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

 

<

 

html xmlns="http://www.w3.org/1999/xhtml">

 

<

 

head runat="server">

 

 

 

 

 

<title></title>

 

</

 

head>

 

<

 

body>

 

 

 

 

 

<form id="form1" runat="server">

 

 

 

 

 

<asp:ContentPlaceHolder ID="cp1" runat="server" />

 

 

 

 

 

</form>

 

</

 

body>

 

</

 

html>

 

 

 

 

 

 

GridPager.aspx:

<%@ Page Language="C#" MasterPageFile="~/MasterPage/WWR.Master" AutoEventWireup="true" 

 

 

CodeBehind="GridPager.aspx.cs" Inherits="TestingStaff.GridPager" Title="Grid Pager" %>

 

 

<%

 

@ Register Assembly="RadGrid.Net2" Namespace="Telerik.WebControls" TagPrefix="radG" %>

 

 

 

<asp:Content ID="Content1" ContentPlaceHolderID="cp1" runat="server">

 

 

 

<radG:RadGrid ID="rgSchedules" runat="server" Skin="Yellow" Width="100%" AllowPaging="true"  OnNeedDataSource="rgSchedules_NeedDataSource">

 

 

 

<MasterTableView Name="Master" DataKeyNames="ScheduleId">

 

 

 

<Columns>

 

 

 

<radG:GridBoundColumn DataField="ScheduleId" HeaderText="Schedule ID" UniqueName="ScheduleId" />

 

 

 

<radG:GridBoundColumn DataField="ScheduleName" HeaderText="Schedule Name" UniqueName="ScheduleName" />

 

 

 

</Columns>

 

 

 

<DetailTables>

 

 

 

<radG:GridTableView runat="server" Name="Detail" Width="100%" GridLines="Both">

 

 

 

<ParentTableRelation>

 

 

 

<radG:GridRelationFields DetailKeyField="ScheduleId" MasterKeyField="ScheduleId" />

 

 

 

</ParentTableRelation>

 

 

 

<Columns>

 

 

 

<radG:GridBoundColumn DataField="ClientId" HeaderText="Client ID" UniqueName="ClientNumber" />

 

 

 

<radG:GridBoundColumn DataField="ClientName" HeaderText="Client Name" UniqueName="ClientName" />

 

 

 

<radG:GridBoundColumn DataField="ScheduleId" UniqueName="ScheduleId" Visible="false" />

 

 

 

</Columns>

 

 

 

</radG:GridTableView>

 

 

 

</DetailTables>

 

 

 

</MasterTableView>

 

 

 

</radG:RadGrid>

 

</

 

 

asp:Content>


GridPager.aspx.cs:
 

 

 

using

 

System;

 

 

 

 

using System.Web.UI;

 

 

 

 

using System.Collections.Generic;

 

 

 

 

using Telerik.WebControls;

 

 

 

 

namespace TestingStaff

 

 

 {

 

 

public partial class GridPager : Page

 

 

 {

 

 

private class Schedule

 

 

 

 

 

{

 

 

 

private int scheduleID;

 

 

private string scheduleName;

 

 

public int ScheduleID

 

{

 

get { return scheduleID; } set { scheduleID = value; } }

 

 

 

 

public string ScheduleName

 

 

{

 

get { return scheduleName; } set { scheduleName = value; } }

 

 

}

 

 

private class Client

 

 

 

 

 

{

 

 

 

 

private int clientID;

 

 

 

 

private string clientName;

 

 

 

 

private int scheduleID;

 

 

 

public int ClientID

 

{

 

get { return clientID; } set { clientID = value; }

 

}

 

public string ClientName

{

 

 

get { return clientName; } set { clientName = value; }

 

 

}

 

 

public int ScheduleID

 

 

 {

 

 

get { return scheduleID; }

 

 

 

 

set { scheduleID = value; }

 

 

}

}

 

protected void Page_Init(object sender, EventArgs e)

{

 

 

WWRAdvancedPager pagerSchedules = new WWRAdvancedPager(rgSchedules);

 

 

 rgSchedules.MasterTableView.PagerTemplate = pagerSchedules;

rgSchedules.ItemDataBound +=

 

 

new GridItemEventHandler(pagerSchedules.ItemDataBound);

 rgSchedules.MasterTableView.DetailTables[0].PagerTemplate = pagerSchedules;

}

 

 

protected void rgSchedules_NeedDataSource(object source, GridNeedDataSourceEventArgs e)

 

 

{

 

 

List<Schedule> schedules = new List<Schedule>();
List<Client> clients = new List<Client>();

 

 

 

for (int i = 1; i <= 2; i++)

 

{

 

 

Schedule schedule = new Schedule();

 

 

schedule.ScheduleID = i;

schedule.ScheduleName =

 

"Schedule " + i.ToString();

 

 

schedules.Add(schedule);

 

 

for (int j = 1; j <= 10; j++)

 

 

 {

 

 

Client client = new Client();

 

 

 client.ClientID = j;

client.ClientName =

 

" Client " + j.ToString() + " of Schedule " + i.ToString();

 

 

 client.ScheduleID = i;

clients.Add(client);

}

}

rgSchedules.DataSource = schedules;

rgSchedules.MasterTableView.DetailTables[0].DataSource = clients;

}

}

}


WWRAdvancedPager.cs:

 

using

 

 

System;

 

 

 

using System.Collections.Generic;

 

 

using System.Text;

 

 

using System.Web.UI;

 

 

using System.Web.UI.HtmlControls;

 

 

using System.Web.UI.WebControls;

 

 

using Telerik.WebControls;

 

 

 

 

 

 

namespace

 

 

TestingStaff

 

 

 {

 

 

public class WWRAdvancedPager : ITemplate

 

 

 

 

 

 

{

 

 

 

private RadGrid _grid;

 

 

 

public WWRAdvancedPager() : base() {}

 

 

 

public WWRAdvancedPager(RadGrid rg) : base() {_grid = rg;}

 

 

 

public void InstantiateIn(Control container)

 

 {

 

HtmlGenericControl MainSpan = new HtmlGenericControl("span");

MainSpan.ID =

 

"MainSpan";

 

 

MainSpan.Attributes.Add(

 

"style", "line-height: 14pt");

 

 

 

 

 

Literal ChangePageLiteral2 = new Literal();

 

ChangePageLiteral2.ID =

"ChangePageLiteral2";

 

 

ChangePageLiteral2.Text =

 

"Change page: ";

 

 

MainSpan.Controls.Add(ChangePageLiteral2);

 

 

TextBox GoToPageTextBox = new TextBox();

GoToPageTextBox.ID =

 

"GoToPageTextBox";

 

 

GoToPageTextBox.AutoPostBack =

 

false;

 

 

 GoToPageTextBox.Columns = 4;

MainSpan.Controls.Add(GoToPageTextBox);

 

 

Literal SpaceLiteral = new Literal();

 

 

 SpaceLiteral.Text =

 

" ";

 

 

 MainSpan.Controls.Add(SpaceLiteral);

 

 

LinkButton GoToPageLinkButton = new LinkButton();

 

 

 GoToPageLinkButton.ID =

 

"GoToPageLinkButton";

 

 

 GoToPageLinkButton.CommandName =

 

"Page";

 

 

GoToPageLinkButton.CommandArgument =

 

"GoToPage";

 

 

 GoToPageLinkButton.Text =

 

"Go";

 

 

 MainSpan.Controls.Add(GoToPageLinkButton);

 

 

Literal ItemsDisplayedLiteral = new Literal();

 

 

 ItemsDisplayedLiteral.ID =

 

"ItemsDisplayedLiteral";

 

 

 ItemsDisplayedLiteral.Text =

 

"&nbsp;&nbsp;&nbsp;&nbsp;Items displayed: ";

 

 

 

 

LinkButton ChangePageSizeLinkButton = new LinkButton();

 

 

 ChangePageSizeLinkButton.ID =

 

"ChangePageSizeLinkButton";

 

 

ChangePageSizeLinkButton.CommandName =

 

"Page";

 

 

ChangePageSizeLinkButton.CommandArgument =

 

"ChangePageSize";

 

 

ChangePageSizeLinkButton.Text =

 

"Change";

 

 

 

 

RangeValidator ChangePageSizeValidator = new RangeValidator();

 

 

 ChangePageSizeValidator.ID =

 

"ChangePageSizeValidator";

 

 

 ChangePageSizeValidator.ControlToValidate =

 

"ChangePageSizeTextBox";

 

 

 ChangePageSizeValidator.EnableClientScript =

 

true;

 

 

 ChangePageSizeValidator.MinimumValue =

 

"1";

 

 

 ChangePageSizeValidator.MaximumValue =

 

"1";

 

 

 ChangePageSizeValidator.Type =

 

ValidationDataType.Integer;

 

 

 ChangePageSizeValidator.Display =

 

ValidatorDisplay.Dynamic;

 

 

 

 

TextBox ChangePageSizeTextBox = new TextBox();

 

 

 ChangePageSizeTextBox.ID =

 

"ChangePageSizeTextBox";

 

 

 ChangePageSizeTextBox.AutoPostBack =

 

false;

 

 

 ChangePageSizeTextBox.Columns = 3;

SpaceLiteral =

 

new Literal();

 

 

 SpaceLiteral.Text =

 

" ";

 

 

 MainSpan.Controls.Add(ItemsDisplayedLiteral);

MainSpan.Controls.Add(ChangePageSizeTextBox);

MainSpan.Controls.Add(SpaceLiteral);

MainSpan.Controls.Add(ChangePageSizeLinkButton);

container.Controls.Add(MainSpan);

}

 

 

 

public void ItemDataBound(object sender, GridItemEventArgs e)

 {

 

 

if (e.Item is GridPagerItem)

 

 

 {

 

 

GridPagerItem PagerItem = (GridPagerItem)e.Item;

 

 

 BindPagerItem(PagerItem);

}

}

 

 

private void BindPagerItem(GridPagerItem pagerItem)

 

 

 {

 

 

TextBox GoToPageTextBox = (TextBox)pagerItem.FindControl("GoToPageTextBox");

 

 

 GoToPageTextBox.Text = (pagerItem.Paging.CurrentPageIndex + 1).ToString();

 

 

LinkButton GoToPageLinkButton = (LinkButton)pagerItem.FindControl("GoToPageLinkButton");

 

 

 GoToPageTextBox.Attributes.Add(

 

 

"onclick", "javascript:document.getElementById('" + GoToPageTextBox.ClientID + "').focus();document.getElementById('" + GoToPageTextBox.ClientID + "').select();");

 GoToPageTextBox.Attributes.Add(

 

 

"onkeydown", "javascript:if((event.which && event.which == 13) || (event.keyCode && event.keyCode == 13)){document.getElementById('" + GoToPageLinkButton.ClientID + "').click();if(this.value>0)return false;else document.getElementById('" + GoToPageTextBox.ClientID + "').select(); return true;}else return true;"); 

 

 

TextBox ChangePageSizeTextBox = (TextBox)pagerItem.FindControl("ChangePageSizeTextBox");

 

 

 

if (pagerItem.Paging.PageSize > pagerItem.Paging.LastIndexInPage + 1)

 

{

ChangePageSizeTextBox.Text = (pagerItem.Paging.LastIndexInPage + 1).ToString();

}

 

 

else

 

{

 

ChangePageSizeTextBox.Text = pagerItem.Paging.PageSize.ToString();

}

 

LinkButton ChangePageSizeLinkButton = (LinkButton)pagerItem.FindControl("ChangePageSizeLinkButton");

ChangePageSizeTextBox.Attributes.Add(

 

 

"onclick", "javascript:document.getElementById('" + ChangePageSizeTextBox.ClientID + "').focus();document.getElementById('" + ChangePageSizeTextBox.ClientID + "').select();");

ChangePageSizeTextBox.Attributes.Add(

 

 

"onkeydown", "javascript:if((event.which && event.which == 13) || (event.keyCode && event.keyCode == 13)){document.getElementById('" + ChangePageSizeLinkButton.ClientID + "').click();if(this.value>0)return false;else document.getElementById('" + ChangePageSizeTextBox.ClientID + "').select(); return true;}else return true;");

_grid.PagerStyle.AlwaysVisible =

 

true;

 

 

 }

}

}

 

 

 

 

 

 

1 Answer, 1 is accepted

Sort by
0
Accepted
Sebastian
Telerik team
answered on 10 Apr 2009, 02:46 PM
Hello Tatiana,

Is there a particular reason why you do not use one of the built-in advanced pagers of RadGrid for ASP.NET demonstrated on this demo of the product? Alternatively, consider taking advantage of the pager template feature of the control. Thus you do not need to implement the respective type of pager with custom code and will avoid the exception.

Moreover, I recommend you migrate to the ASP.NET AJAX counterpart of the grid which exposes improved pagers in the latest Q1 2009 release:

http://www.telerik.com/help/aspnet-ajax/grdwhatsnew.html
http://demos.telerik.com/aspnet-ajax/grid/examples/generalfeatures/paging/defaultcs.aspx

Detailed migration instructions between the two version of the grid can be found here.

Best regards,
Sebastian
the Telerik team

Check out Telerik Trainer , the state of the art learning tool for Telerik products.
Tags
Grid
Asked by
Tatiana
Top achievements
Rank 2
Answers by
Sebastian
Telerik team
Share this question
or