I have a RadListView that is paged by a RadDataPager. The ListView is loaded correctly on the initial page load. After that the needdatasource method correctly retrieves the next set of results, but they are never displayed. From my investigation, it appears that it is related to the fact that the listview always has a page count of 1 while the datapager correctly calculates 2(13 items, with a page size of 10). The list view changes page index correctly, which retrieves the next page of results to set for the datasource. After setting the datasource the new items are never displayed. I am doing something very similar to the listview image gallery demo, so if it at least tried to add the new images and failed, I should get broken image links. I think the listview is skipping binding the new results, since the list view thinks its out of its page range. Its worth noting we are using the 2013 Q2 controls, since this is new work for a customer with an existing site. We want to avoid updating versions to limit risk to the rest of the site.
<telerik:RadListView runat="server" ID="ImageGalleryDisplay" OnNeedDataSource="ImageGalleryDisplay_NeedDataSource" OnItemCreated="RadListView1_ItemCreated"
AllowPaging="true" ItemPlaceholderID="ImagePlaceHolder" OnItemDataBound="RadListView_ItemDataBound">
<LayoutTemplate>
<asp:PlaceHolder ID="ImagePlaceHolder" runat="server">
</asp:PlaceHolder>
<telerik:RadDataPager ID="RadDataPager1" runat="server" PagedControlID="ImageGalleryDisplay"
PageSize="10">
<Fields>
<telerik:RadDataPagerButtonField FieldType="FirstPrev"></telerik:RadDataPagerButtonField>
<telerik:RadDataPagerButtonField FieldType="Numeric"></telerik:RadDataPagerButtonField>
<telerik:RadDataPagerButtonField FieldType="NextLast"></telerik:RadDataPagerButtonField>
</Fields>
</telerik:RadDataPager>
</LayoutTemplate>
<ItemTemplate>
<asp:Image ID="Image1" runat="server" ImageUrl='<%#Eval("ImageURL")%>' />
</ItemTemplate>
<AlternatingItemTemplate>
<asp:Image ID="Image2" runat="server" ImageUrl='<%#Eval("ImageURL")%>' />
</AlternatingItemTemplate>
</telerik:RadListView>
protected void ImageGalleryDisplay_NeedDataSource (object source, RadListViewNeedDataSourceEventArgs e)
{
_photos = new List<Photo> ();
LoadData ();
ImageGalleryDisplay.DataSource = _photos;
}
protected void LoadData ()
{
//dataSearch is our own special search type that returns a datatable and estimated hit count, they return the correct values
DataTable fileIds = dataSearch.Retrieve<DataTable> (ImageGalleryDisplay.CurrentPageIndex * ImageGalleryDisplay.PageSize + 1, ImageGalleryDisplay.PageSize);
ImageGalleryDisplay.VirtualItemCount = dataSearch.EstimateHitCount > 0 ? dataSearch.EstimateHitCount : 0;
foreach (DataRow row in fileIds.Rows)
{
int id = Convert.ToInt32 (row["fileId"].ToString ());
Photo photo = new Photo (id, String.Format("Handlers/ImageHandler.ashx?id={0}&height=100&width=100",id));
_photos.Add (photo);
}
}
protected void RadListView_ItemDataBound (object sender, RadListViewItemEventArgs e)
{
if (e.Item is RadListViewDataItem)
{
var dataItem = ((RadListViewDataItem)e.Item).DataItem;
}
}
protected void RadListView1_ItemCreated (object sender, RadListViewItemEventArgs e)
{
if (e.Item is RadListViewDataItem)
{
Image img = e.Item.FindControl ("image1") as Image;
}
}
protected void Comand2 (object sender, RadListViewPageChangedEventArgs e)
{
ImageGalleryDisplay.CurrentPageIndex = e.NewPageIndex;
string i = ImageGalleryDisplay.PageCount.ToString();
}
<telerik:RadListView runat="server" ID="ImageGalleryDisplay" OnNeedDataSource="ImageGalleryDisplay_NeedDataSource" OnItemCreated="RadListView1_ItemCreated"
AllowPaging="true" ItemPlaceholderID="ImagePlaceHolder" OnItemDataBound="RadListView_ItemDataBound">
<LayoutTemplate>
<asp:PlaceHolder ID="ImagePlaceHolder" runat="server">
</asp:PlaceHolder>
<telerik:RadDataPager ID="RadDataPager1" runat="server" PagedControlID="ImageGalleryDisplay"
PageSize="10">
<Fields>
<telerik:RadDataPagerButtonField FieldType="FirstPrev"></telerik:RadDataPagerButtonField>
<telerik:RadDataPagerButtonField FieldType="Numeric"></telerik:RadDataPagerButtonField>
<telerik:RadDataPagerButtonField FieldType="NextLast"></telerik:RadDataPagerButtonField>
</Fields>
</telerik:RadDataPager>
</LayoutTemplate>
<ItemTemplate>
<asp:Image ID="Image1" runat="server" ImageUrl='<%#Eval("ImageURL")%>' />
</ItemTemplate>
<AlternatingItemTemplate>
<asp:Image ID="Image2" runat="server" ImageUrl='<%#Eval("ImageURL")%>' />
</AlternatingItemTemplate>
</telerik:RadListView>
protected void ImageGalleryDisplay_NeedDataSource (object source, RadListViewNeedDataSourceEventArgs e)
{
_photos = new List<Photo> ();
LoadData ();
ImageGalleryDisplay.DataSource = _photos;
}
protected void LoadData ()
{
//dataSearch is our own special search type that returns a datatable and estimated hit count, they return the correct values
DataTable fileIds = dataSearch.Retrieve<DataTable> (ImageGalleryDisplay.CurrentPageIndex * ImageGalleryDisplay.PageSize + 1, ImageGalleryDisplay.PageSize);
ImageGalleryDisplay.VirtualItemCount = dataSearch.EstimateHitCount > 0 ? dataSearch.EstimateHitCount : 0;
foreach (DataRow row in fileIds.Rows)
{
int id = Convert.ToInt32 (row["fileId"].ToString ());
Photo photo = new Photo (id, String.Format("Handlers/ImageHandler.ashx?id={0}&height=100&width=100",id));
_photos.Add (photo);
}
}
protected void RadListView_ItemDataBound (object sender, RadListViewItemEventArgs e)
{
if (e.Item is RadListViewDataItem)
{
var dataItem = ((RadListViewDataItem)e.Item).DataItem;
}
}
protected void RadListView1_ItemCreated (object sender, RadListViewItemEventArgs e)
{
if (e.Item is RadListViewDataItem)
{
Image img = e.Item.FindControl ("image1") as Image;
}
}
protected void Comand2 (object sender, RadListViewPageChangedEventArgs e)
{
ImageGalleryDisplay.CurrentPageIndex = e.NewPageIndex;
string i = ImageGalleryDisplay.PageCount.ToString();
}