I want a custom pager template that will change the page via the SelectedIndexChanged event of a combobox. I've seen all the demos and threads on pager templates, but none on changing the page with a combobox. Basically, I would like to fill the combobox with values from 1 to NumberOfPages. Then, when a user selects a page number from the combobox, the grid will set to that page. The combobox's selectedvalue should match the current page once selected. I can't seem to figure this out. I'm using VB. Can anyone provide any direction, or better yet, code examples of how to accomplish this?
2 Answers, 1 is accepted
0
Accepted

Shinu
Top achievements
Rank 2
answered on 10 Feb 2009, 06:14 AM
Hello,
Give a try with the following approach and see whether it helps.
ASPX:
CS:
Thanks
Shinu
Give a try with the following approach and see whether it helps.
ASPX:
<PagerTemplate> |
<telerik:RadComboBox ID="RadComboBox2" runat="server" AutoPostBack="True" OnSelectedIndexChanged="RadComboBox2_SelectedIndexChanged"> |
<Items> |
<telerik:RadComboBoxItem Text="0" Value="0" /> |
<telerik:RadComboBoxItem Text="1" Value="1" /> |
<telerik:RadComboBoxItem Text="2" Value="2" /> |
<telerik:RadComboBoxItem Text="3" Value="3" /> |
<telerik:RadComboBoxItem Text="4" Value="4" /> |
</Items> |
</telerik:RadComboBox> |
</PagerTemplate> |
CS:
Protected Sub RadComboBox2_SelectedIndexChanged(ByVal o As Object, ByVal e As RadComboBoxSelectedIndexChangedEventArgs) |
Dim combo As RadComboBox = DirectCast(o, RadComboBox) |
RadGrid1.CurrentPageIndex = Integer.Parse(combo.SelectedItem.Text) |
ViewState("Selected") = combo.SelectedIndex |
RadGrid1.MasterTableView.Rebind() |
End Sub |
Protected Sub RadGrid1_PreRender(ByVal sender As Object, ByVal e As EventArgs) |
For Each pageritem As GridPagerItem In RadGrid1.MasterTableView.GetItems(GridItemType.Pager) |
Dim combo As RadComboBox = DirectCast(pageritem.FindControl("RadComboBox2"), RadComboBox) |
combo.SelectedIndex = Convert.ToInt32(ViewState("Selected")) |
Next |
End Sub |
Thanks
Shinu
0

KenF
Top achievements
Rank 1
answered on 10 Feb 2009, 02:27 PM
Shinu,
Thank you very much for the help. The code sample you provided was extremely useful. Using your example, plus other code examples found on Telerik forums, and with a bit more tweaking, I was able to get the effect I was looking for. In case others would like to use a page number combobox in a pager template, I have included the final version of the code here:
ASPX:
VB Code behind:
Thank you very much for the help. The code sample you provided was extremely useful. Using your example, plus other code examples found on Telerik forums, and with a bit more tweaking, I was able to get the effect I was looking for. In case others would like to use a page number combobox in a pager template, I have included the final version of the code here:
ASPX:
<body> |
<form id="form1" runat="server"> |
<div> |
<asp:ScriptManager ID="ScriptManager1" runat="server"> |
</asp:ScriptManager> |
<Telerik:RadGrid ID="RadGrid1" AllowPaging="true" runat="server"> |
<MasterTableView> |
<PagerTemplate> |
<table border="0" cellpadding="5" width="100%"> |
<tr> |
<td style="border-style:none;"> |
<asp:Label ID="lblPage" SkinID="Title" runat="server" Text="Page" /> |
<asp:Label ID="lblCurrentPageNumber" SkinID="Title" runat="server" Text='<%# DataBinder.Eval(Container, "OwnerTableView.CurrentPageIndex") + 1 %>' /> |
<asp:Label ID="lblOf" runat="server" SkinID="Title" Text="of" /> |
<asp:Label ID="lblRowCount" SkinID="Title" runat="server" Text= '<%# DataBinder.Eval(Container, "Paging.PageCount") %>'/> |
<asp:Label ID="lbldash" runat="server" SkinID="Title" Text=" - " /> |
<asp:Label ID="lblNumOfRecords" SkinID="Title" runat="server" Text='<%# DataBinder.Eval(Container, "Paging.DataSourceCount") %>' /> |
<asp:Label ID="lblRecords" SkinID="Title" runat="server" Text="Records" /> |
</td> |
<td style="border-style:none;"> |
<asp:ImageButton ID="imgButtonFirst" runat="server" ImageAlign="Middle" |
ImageUrl="images/first.gif" CommandArgument="First" CommandName="Page" /> |
|
<asp:ImageButton ID="imgButtonPrev" runat="server" ImageAlign="Middle" ImageUrl="images/prev.gif" CommandArgument="Prev" CommandName="Page" /> |
<asp:Image ID="Image1" runat="server" ImageUrl="images/spacer.gif" /> |
<telerik:RadComboBox ID="cbPageNumber" runat="server" |
AutoPostBack="true" Width=".75in" OnSelectedIndexChanged="cbPageNumber_OnSelectedIndexChanged"> |
</telerik:RadComboBox> |
<asp:Image ID="Image2" runat="server" ImageUrl="images/spacer.gif" /> |
<asp:ImageButton ID="imgButtonNext" runat="server" ImageAlign="Middle" ImageUrl="images/next.gif" CommandArgument="Next" CommandName="Page" /> |
|
<asp:ImageButton ID="imgButtonLast" runat="server" ImageAlign="Middle" ImageUrl="images/last.gif" CommandArgument="Last" CommandName="Page" /> |
</td> |
<td style="border-style:none;"> |
<asp:Label ID="lblRecordsPerPage" runat="server" Text="Records per page" /> |
<asp:TextBox ID="tbRecordsPerPage" runat="server" |
Columns="1" AutoPostBack="true" |
Text='<%# DataBinder.Eval(Container, "Paging.Count") %>' |
OnTextChanged="tbRecordsPerPage_TextChanged"> |
</asp:TextBox> |
</td> |
</tr> |
</table> |
</PagerTemplate> |
</MasterTableView> |
</Telerik:RadGrid> |
</div> |
</form> |
</body> |
VB Code behind:
Imports System.Data |
Imports Telerik.Web.UI |
Partial Public Class Default3 |
Inherits System.Web.UI.Page |
Protected Sub cbPageNumber_OnSelectedIndexChanged(ByVal sender As Object, ByVal e As RadComboBoxSelectedIndexChangedEventArgs) |
Dim combo As RadComboBox = DirectCast(sender, RadComboBox) |
RadGrid1.CurrentPageIndex = Integer.Parse(combo.SelectedItem.Text) - 1 |
RadGrid1.MasterTableView.Rebind() |
End Sub |
Private Sub RadGrid1_ItemCreated(ByVal sender As Object, ByVal e As Telerik.Web.UI.GridItemEventArgs) Handles RadGrid1.ItemCreated |
If TypeOf e.Item Is GridPagerItem Then |
Dim pagerItem As GridPagerItem = CType(e.Item, GridPagerItem) |
Dim imgFirstButton As ImageButton = CType(pagerItem.FindControl("imgButtonFirst"), ImageButton) |
Dim imgPrevButton As ImageButton = CType(pagerItem.FindControl("imgButtonPrev"), ImageButton) |
Dim imgNextButton As ImageButton = CType(pagerItem.FindControl("imgButtonNext"), ImageButton) |
Dim imgLastButton As ImageButton = CType(pagerItem.FindControl("imgButtonLast"), ImageButton) |
If pagerItem.OwnerTableView.CurrentPageIndex = "0" Then |
imgFirstButton.Enabled = False |
imgPrevButton.Enabled = False |
imgNextButton.Enabled = True |
imgLastButton.Enabled = True |
ElseIf pagerItem.OwnerTableView.CurrentPageIndex + 1 = pagerItem.OwnerTableView.PageCount Then |
imgFirstButton.Enabled = True |
imgPrevButton.Enabled = True |
imgNextButton.Enabled = False |
imgLastButton.Enabled = False |
Else |
imgFirstButton.Enabled = True |
imgPrevButton.Enabled = True |
imgNextButton.Enabled = True |
imgLastButton.Enabled = True |
End If |
End If |
End Sub |
Private Sub RadGrid1_NeedDataSource(ByVal sender As Object, ByVal e As Telerik.Web.UI.GridNeedDataSourceEventArgs) Handles RadGrid1.NeedDataSource |
Dim dt As New DataTable() |
Dim dr As DataRow |
Dim cols As String() = {"Column1", "Column2", "Column3", "Column4"} |
For Each col As String In cols |
dt.Columns.Add(col) |
Next |
Dim i As Integer = 1 |
While i <= 50 |
dr = dt.NewRow() |
Dim k As Integer = 0 |
While k < cols.Length |
dr(cols(k)) = [String].Format("{0} row {1}", cols(k), i) |
System.Math.Max(System.Threading.Interlocked.Increment(k), k - 1) |
End While |
dt.Rows.Add(dr) |
System.Math.Max(System.Threading.Interlocked.Increment(i), i - 1) |
End While |
TryCast(sender, RadGrid).DataSource = dt |
End Sub |
Private Sub RadGrid1_PreRender(ByVal sender As Object, ByVal e As System.EventArgs) Handles RadGrid1.PreRender |
For Each pagerItem As GridPagerItem In RadGrid1.MasterTableView.GetItems(GridItemType.Pager) |
Dim cbPageNumber As RadComboBox = DirectCast(pagerItem.FindControl("cbPageNumber"), RadComboBox) |
cbPageNumber.Items.Clear() |
For i As Integer = 0 To pagerItem.OwnerTableView.PageCount - 1 |
Dim intPageNumber As Integer = i + 1 |
Dim cbItem As RadComboBoxItem = New RadComboBoxItem(intPageNumber.ToString()) |
cbPageNumber.Items.Add(cbItem) |
If i = pagerItem.OwnerTableView.CurrentPageIndex Then |
cbItem.Selected = True |
End If |
Next |
Next |
End Sub |
Protected Sub tbRecordsPerPage_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) |
Dim tbRecordsPerPage As TextBox = DirectCast(sender, TextBox) |
Dim NewNumOfRows As String = tbRecordsPerPage.Text |
RadGrid1.MasterTableView.PageSize = NewNumOfRows |
RadGrid1.MasterTableView.Rebind() |
End Sub |
End Class |
Shinu, thank you very much for your help!
-kenf-