Using Q3-2007 1218 + hotfix.
I am having difficulties getting a custom object collection to sort, or more correclty to sort when paging to Page 2+. From reading the docs this should ok since I am using the OnNeedDataSource to wire up the source and am using the supported IList binding. According to the docs if done this way all sorting etc should be handled.
The custom collection will sort when the header is changed to either ascending or descending order correctly, but when using the paging control to move beyond page1 the dataset does not page at all. When the datasource is a datatable the problem does not occur.
is there something I am missing?
Thanks,
Jason
using System;
using System.Collections.Generic;
using System.Data;
using System.Web.UI;
using Telerik.Web.UI;
namespace Test
{
public partial class Test : Page
{
public string _alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
protected void Page_Load(object sender, EventArgs e)
{
}
/// <summary>
/// Handles the ItemDataBound1 event of the RadGrid control.
/// </summary>
/// <param name="sender">The source of the event.</param>
/// <param name="e">The <see cref="T:Telerik.WebControls.GridItemEventArgs"/> instance containing the event data.</param>
protected void Grid_ItemDataBound(object sender, GridItemEventArgs e)
{
}
/// <summary>
/// Handles the PageIndexChanged event of the RadGrid control.
/// </summary>
/// <param name="source">The source of the event.</param>
/// <param name="e">The <see cref="System.EventArgs"/> instance containing the event data.</param>
protected void Grid_PageIndexChanged(object source, GridPageChangedEventArgs e)
{
}
public List<Thing> ObjectList()
{
List<Thing> list = new List<Thing>();
foreach (char c in _alphabet)
{
string str = c.ToString();
list.Add(new Thing(str));
}
return list;
}
public DataTable ObjectListAsDataTable()
{
DataTable dt = new DataTable();
dt.Columns.Add("Name", typeof (string));
List<Thing> list = ObjectList();
foreach (Thing t in list)
{
DataRow row = dt.NewRow();
row["Name"] = t.Name;
dt.Rows.Add(row);
}
return dt;
}
protected void Grid_NeedDataSource3(object source, GridNeedDataSourceEventArgs e)
{
uxGrid3.DataSource = ObjectList();
}
protected void Grid_NeedDataSource4(object source, GridNeedDataSourceEventArgs e)
{
uxGrid4.DataSource = ObjectListAsDataTable();
}
}
public class Thing
{
public Thing(string name)
{
_name = name;
}
private string _name;
public string Name
{get
{
return _name;
}
set { _name = value;}
}
}
}
============================== aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Test.aspx.cs" Inherits="Test" %>
<%@ Import namespace="Telerik.Web.UI"%>
<%@ Register TagPrefix="telerik" Namespace="Telerik.Web.UI" Assembly="Telerik.Web.UI" %>
<html>
<head><title>Test</title></head>
<body>
<form runat="server" id="form1">
<asp:ScriptManager runat="server" ID="uxScriptManager"></asp:ScriptManager>
<div>
<telerik:RadAjaxManager ID="uxRadAjaxManager" runat="server">
<AjaxSettings>
<telerik:AjaxSetting AjaxControlID="uxGrid3">
<UpdatedControls>
<telerik:AjaxUpdatedControl ControlID="uxGrid3" LoadingPanelID="uxRadAjaxLoadingPanel"/>
</UpdatedControls>
</telerik:AjaxSetting>
<telerik:AjaxSetting AjaxControlID="uxGrid4">
<UpdatedControls>
<telerik:AjaxUpdatedControl ControlID="uxGrid4" LoadingPanelID="uxRadAjaxLoadingPanel"/>
</UpdatedControls>
</telerik:AjaxSetting>
</AjaxSettings>
</telerik:RadAjaxManager>
<telerik:RadAjaxLoadingPanel ID="uxRadAjaxLoadingPanel" runat="server" Height="75px" Width="75px" Transparency="25">
<img alt="Loading..." src='<%= RadAjaxLoadingPanel.GetWebResourceUrl(Page, "Telerik.Web.UI.Skins.Default.Ajax.loading.gif") %>' style="border:0;" />
</telerik:RadAjaxLoadingPanel>
After sorting, I Don't Work on Page 2. I am using a IList
<telerik:RadGrid EnableViewState="true" ID="uxGrid3" runat="server"
ShowFooter="True" AllowPaging="True" AllowSorting="True" AutoGenerateColumns="False" CssClass="RadGrid"
ShowGroupPanel="False" MasterTableView-DataKeyNames="Name" HorizontalAlign="NotSet" Skin="Telerik" OnNeedDataSource="Grid_NeedDataSource3">
<MasterTableView
PageSize="10" GridLines="Vertical" DataKeyNames="Name"
CommandItemDisplay="Bottom" HorizontalAlign="NotSet" AllowFilteringByColumn="False">
<HeaderStyle CssClass="GridHeader" ></HeaderStyle>
<RowIndicatorColumn UniqueName="RowIndicator" Visible="False">
<HeaderStyle Width="10px" />
</RowIndicatorColumn>
<Columns>
<telerik:GridBoundColumn DataField="Name" DataType="System.String" HeaderText="Test" SortExpression="Name" UniqueName="LocDesc"></telerik:GridBoundColumn>
<telerik:GridTemplateColumn UniqueName="Name"
SortExpression="Name" HeaderText="Site">
<ItemTemplate>
<%# Eval("Name") %>
</ItemTemplate>
</telerik:GridTemplateColumn>
</Columns>
</MasterTableView>
</telerik:RadGrid>
After sorting I work Fine, I am a datatable client.
<telerik:RadGrid EnableViewState="true" ID="uxGrid4" runat="server"
ShowFooter="True" AllowPaging="True" AllowSorting="True" AutoGenerateColumns="False" CssClass="RadGrid"
ShowGroupPanel="False" MasterTableView-DataKeyNames="Name" HorizontalAlign="NotSet" Skin="Telerik" OnNeedDataSource="Grid_NeedDataSource4">
<MasterTableView
PageSize="10" GridLines="Vertical" DataKeyNames="Name"
CommandItemDisplay="Bottom" HorizontalAlign="NotSet" AllowFilteringByColumn="False">
<HeaderStyle CssClass="GridHeader" ></HeaderStyle>
<RowIndicatorColumn UniqueName="RowIndicator" Visible="False">
<HeaderStyle Width="10px" />
</RowIndicatorColumn>
<Columns>
<telerik:GridBoundColumn DataField="Name" DataType="System.String" HeaderText="Test" SortExpression="Name" UniqueName="LocDesc"></telerik:GridBoundColumn>
<telerik:GridTemplateColumn UniqueName="Name"
SortExpression="Name" HeaderText="Site">
<ItemTemplate>
<%# Eval("Name") %>
</ItemTemplate>
</telerik:GridTemplateColumn>
</Columns>
</MasterTableView>
</telerik:RadGrid>
</div>
</form>
</body>
</html>
I am having difficulties getting a custom object collection to sort, or more correclty to sort when paging to Page 2+. From reading the docs this should ok since I am using the OnNeedDataSource to wire up the source and am using the supported IList binding. According to the docs if done this way all sorting etc should be handled.
The custom collection will sort when the header is changed to either ascending or descending order correctly, but when using the paging control to move beyond page1 the dataset does not page at all. When the datasource is a datatable the problem does not occur.
is there something I am missing?
Thanks,
Jason
using System;
using System.Collections.Generic;
using System.Data;
using System.Web.UI;
using Telerik.Web.UI;
namespace Test
{
public partial class Test : Page
{
public string _alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
protected void Page_Load(object sender, EventArgs e)
{
}
/// <summary>
/// Handles the ItemDataBound1 event of the RadGrid control.
/// </summary>
/// <param name="sender">The source of the event.</param>
/// <param name="e">The <see cref="T:Telerik.WebControls.GridItemEventArgs"/> instance containing the event data.</param>
protected void Grid_ItemDataBound(object sender, GridItemEventArgs e)
{
}
/// <summary>
/// Handles the PageIndexChanged event of the RadGrid control.
/// </summary>
/// <param name="source">The source of the event.</param>
/// <param name="e">The <see cref="System.EventArgs"/> instance containing the event data.</param>
protected void Grid_PageIndexChanged(object source, GridPageChangedEventArgs e)
{
}
public List<Thing> ObjectList()
{
List<Thing> list = new List<Thing>();
foreach (char c in _alphabet)
{
string str = c.ToString();
list.Add(new Thing(str));
}
return list;
}
public DataTable ObjectListAsDataTable()
{
DataTable dt = new DataTable();
dt.Columns.Add("Name", typeof (string));
List<Thing> list = ObjectList();
foreach (Thing t in list)
{
DataRow row = dt.NewRow();
row["Name"] = t.Name;
dt.Rows.Add(row);
}
return dt;
}
protected void Grid_NeedDataSource3(object source, GridNeedDataSourceEventArgs e)
{
uxGrid3.DataSource = ObjectList();
}
protected void Grid_NeedDataSource4(object source, GridNeedDataSourceEventArgs e)
{
uxGrid4.DataSource = ObjectListAsDataTable();
}
}
public class Thing
{
public Thing(string name)
{
_name = name;
}
private string _name;
public string Name
{get
{
return _name;
}
set { _name = value;}
}
}
}
============================== aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Test.aspx.cs" Inherits="Test" %>
<%@ Import namespace="Telerik.Web.UI"%>
<%@ Register TagPrefix="telerik" Namespace="Telerik.Web.UI" Assembly="Telerik.Web.UI" %>
<html>
<head><title>Test</title></head>
<body>
<form runat="server" id="form1">
<asp:ScriptManager runat="server" ID="uxScriptManager"></asp:ScriptManager>
<div>
<telerik:RadAjaxManager ID="uxRadAjaxManager" runat="server">
<AjaxSettings>
<telerik:AjaxSetting AjaxControlID="uxGrid3">
<UpdatedControls>
<telerik:AjaxUpdatedControl ControlID="uxGrid3" LoadingPanelID="uxRadAjaxLoadingPanel"/>
</UpdatedControls>
</telerik:AjaxSetting>
<telerik:AjaxSetting AjaxControlID="uxGrid4">
<UpdatedControls>
<telerik:AjaxUpdatedControl ControlID="uxGrid4" LoadingPanelID="uxRadAjaxLoadingPanel"/>
</UpdatedControls>
</telerik:AjaxSetting>
</AjaxSettings>
</telerik:RadAjaxManager>
<telerik:RadAjaxLoadingPanel ID="uxRadAjaxLoadingPanel" runat="server" Height="75px" Width="75px" Transparency="25">
<img alt="Loading..." src='<%= RadAjaxLoadingPanel.GetWebResourceUrl(Page, "Telerik.Web.UI.Skins.Default.Ajax.loading.gif") %>' style="border:0;" />
</telerik:RadAjaxLoadingPanel>
After sorting, I Don't Work on Page 2. I am using a IList
<telerik:RadGrid EnableViewState="true" ID="uxGrid3" runat="server"
ShowFooter="True" AllowPaging="True" AllowSorting="True" AutoGenerateColumns="False" CssClass="RadGrid"
ShowGroupPanel="False" MasterTableView-DataKeyNames="Name" HorizontalAlign="NotSet" Skin="Telerik" OnNeedDataSource="Grid_NeedDataSource3">
<MasterTableView
PageSize="10" GridLines="Vertical" DataKeyNames="Name"
CommandItemDisplay="Bottom" HorizontalAlign="NotSet" AllowFilteringByColumn="False">
<HeaderStyle CssClass="GridHeader" ></HeaderStyle>
<RowIndicatorColumn UniqueName="RowIndicator" Visible="False">
<HeaderStyle Width="10px" />
</RowIndicatorColumn>
<Columns>
<telerik:GridBoundColumn DataField="Name" DataType="System.String" HeaderText="Test" SortExpression="Name" UniqueName="LocDesc"></telerik:GridBoundColumn>
<telerik:GridTemplateColumn UniqueName="Name"
SortExpression="Name" HeaderText="Site">
<ItemTemplate>
<%# Eval("Name") %>
</ItemTemplate>
</telerik:GridTemplateColumn>
</Columns>
</MasterTableView>
</telerik:RadGrid>
After sorting I work Fine, I am a datatable client.
<telerik:RadGrid EnableViewState="true" ID="uxGrid4" runat="server"
ShowFooter="True" AllowPaging="True" AllowSorting="True" AutoGenerateColumns="False" CssClass="RadGrid"
ShowGroupPanel="False" MasterTableView-DataKeyNames="Name" HorizontalAlign="NotSet" Skin="Telerik" OnNeedDataSource="Grid_NeedDataSource4">
<MasterTableView
PageSize="10" GridLines="Vertical" DataKeyNames="Name"
CommandItemDisplay="Bottom" HorizontalAlign="NotSet" AllowFilteringByColumn="False">
<HeaderStyle CssClass="GridHeader" ></HeaderStyle>
<RowIndicatorColumn UniqueName="RowIndicator" Visible="False">
<HeaderStyle Width="10px" />
</RowIndicatorColumn>
<Columns>
<telerik:GridBoundColumn DataField="Name" DataType="System.String" HeaderText="Test" SortExpression="Name" UniqueName="LocDesc"></telerik:GridBoundColumn>
<telerik:GridTemplateColumn UniqueName="Name"
SortExpression="Name" HeaderText="Site">
<ItemTemplate>
<%# Eval("Name") %>
</ItemTemplate>
</telerik:GridTemplateColumn>
</Columns>
</MasterTableView>
</telerik:RadGrid>
</div>
</form>
</body>
</html>