I am having a problem in using the RadListView with a nested RadGrid and the RadDataPager. Basically when the page loads it works fine, but as soon as I click on the pager to advance to the next page I get the following error.
System.ArgumentOutOfRangeException: Index was out of range. Must be non-negative and less than the size of the collection.
Parameter name: index
I have tried for a while now to figure out what is wrong. What I see is the rgPriorActualVolumeValues_NeedDataSource being called twice with the error occuring on the second call. Here is some simple sample code I created. I am using RadControls v. 2010.3.1215.40. Thanks in advance.
ASPX Page
Code Behind
System.ArgumentOutOfRangeException: Index was out of range. Must be non-negative and less than the size of the collection.
Parameter name: index
|
I have tried for a while now to figure out what is wrong. What I see is the rgPriorActualVolumeValues_NeedDataSource being called twice with the error occuring on the second call. Here is some simple sample code I created. I am using RadControls v. 2010.3.1215.40. Thanks in advance.
ASPX Page
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="Default" %>
<!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
>
<
telerik:RadStyleSheetManager
id
=
"RadStyleSheetManager1"
runat
=
"server"
/>
</
head
>
<
body
>
<
form
id
=
"form1"
runat
=
"server"
>
<
telerik:RadScriptManager
ID
=
"RadScriptManager1"
runat
=
"server"
>
<
Scripts
>
<%--Needed for JavaScript IntelliSense in VS2010--%>
<%--For VS2008 replace RadScriptManager with ScriptManager--%>
<
asp:ScriptReference
Assembly
=
"Telerik.Web.UI"
Name
=
"Telerik.Web.UI.Common.Core.js"
/>
<
asp:ScriptReference
Assembly
=
"Telerik.Web.UI"
Name
=
"Telerik.Web.UI.Common.jQuery.js"
/>
<
asp:ScriptReference
Assembly
=
"Telerik.Web.UI"
Name
=
"Telerik.Web.UI.Common.jQueryInclude.js"
/>
</
Scripts
>
</
telerik:RadScriptManager
>
<
script
type
=
"text/javascript"
>
//Put your JavaScript code here.
</
script
>
<
telerik:RadAjaxManager
ID
=
"RadAjaxManager1"
runat
=
"server"
>
</
telerik:RadAjaxManager
>
<
telerik:RadSkinManager
ID
=
"RadSkinManager1"
Runat
=
"server"
Skin
=
"Default"
>
</
telerik:RadSkinManager
>
<
table
align
=
"center"
width
=
"99%"
style
=
"table-layout:fixed"
>
<
tr
>
<
td
>
<
telerik:RadListView
ID
=
"rlvForecastCardView_Item"
runat
=
"server"
Width
=
"100%"
AllowPaging
=
"true"
ItemPlaceholderID
=
"ItemHolder"
DataKeyNames
=
"Id"
PageSize
=
"1"
onneeddatasource
=
"rlvForecastCardView_Item_NeedDataSource"
>
<
LayoutTemplate
>
<
asp:Panel
ID
=
"ItemHolder"
runat
=
"server"
/>
<
telerik:RadDataPager
ID
=
"RadDataPager1"
runat
=
"server"
PagedControlID
=
"rlvForecastCardView_Item"
PageSize
=
"1"
>
<
Fields
>
<
telerik:RadDataPagerButtonField
FieldType
=
"FirstPrev"
/>
<
telerik:RadDataPagerButtonField
FieldType
=
"Numeric"
/>
<
telerik:RadDataPagerButtonField
FieldType
=
"NextLast"
/>
<
telerik:RadDataPagerTemplatePageField
>
<
PagerTemplate
>
<
div
style
=
"float: right"
>
<
b
>Items
<
asp:Label
runat
=
"server"
ID
=
"CurrentPageLabel"
Text="<%# Container.Owner.StartRowIndex+1%>" />
to
<
asp:Label
runat
=
"server"
ID
=
"TotalPagesLabel"
Text="<%# Container.Owner.TotalRowCount > (Container.Owner.StartRowIndex+Container.Owner.PageSize) ? Container.Owner.StartRowIndex+Container.Owner.PageSize : Container.Owner.TotalRowCount %>" />
of
<
asp:Label
runat
=
"server"
ID
=
"TotalItemsLabel"
Text="<%# Container.Owner.TotalRowCount%>" />
<
br
/>
</
b
>
</
div
>
</
PagerTemplate
>
</
telerik:RadDataPagerTemplatePageField
>
</
Fields
>
</
telerik:RadDataPager
>
</
LayoutTemplate
>
<
ItemTemplate
>
<
table
class
=
"ContentTableBordered TableFullWidth"
cellspacing
=
"0"
cellpadding
=
"4"
>
<
tr
>
<
td
class
=
"tableSectionLabelCell"
><
asp:Literal
ID
=
"lIdLabel"
runat
=
"server"
Text
=
"ID"
></
asp:Literal
></
td
>
<
td
class
=
"tableSectionLabelCell"
><
asp:Literal
ID
=
"lDescriptionLabel"
runat
=
"server"
Text
=
"Description"
></
asp:Literal
></
td
>
</
tr
>
<
tr
>
<
td
class
=
"tableSectionDataCell"
><%# Eval("Id") %></
td
>
<
td
class
=
"tableSectionDataCell"
><%# Eval("Description") %></
td
>
</
tr
>
</
table
>
<
br
/>
<
table
class
=
"ContentTableBordered TableFullWidth"
cellspacing
=
"0"
cellpadding
=
"4"
>
<
tr
>
<
td
width
=
"33%"
>
<
telerik:RadGrid
ID
=
"rgPriorActualVolumeValues"
runat
=
"server"
AllowFilteringByColumn
=
"False"
AllowPaging
=
"False"
AllowSorting
=
"false"
ClientSettings-AllowColumnHide
=
"false"
AutoGenerateColumns
=
"False"
ShowGroupPanel
=
"false"
ShowFooter
=
"true"
EnableHeaderContextMenu
=
"false"
ViewStateMode
=
"Disabled"
onneeddatasource
=
"rgPriorActualVolumeValues_NeedDataSource"
>
<
MasterTableView
CommandItemDisplay
=
"None"
>
<
RowIndicatorColumn
>
<
HeaderStyle
Width
=
"20px"
></
HeaderStyle
>
</
RowIndicatorColumn
>
<
ExpandCollapseColumn
>
<
HeaderStyle
Width
=
"20px"
></
HeaderStyle
>
</
ExpandCollapseColumn
>
<
Columns
>
<
telerik:GridBoundColumn
DataField
=
"Id"
HeaderText
=
"Id"
UniqueName
=
"Id"
>
</
telerik:GridBoundColumn
>
<
telerik:GridBoundColumn
DataField
=
"Description"
HeaderText
=
"Description"
UniqueName
=
"Description"
>
</
telerik:GridBoundColumn
>
</
Columns
>
<
NoRecordsTemplate
>
<
asp:Label
ID
=
"lblNoTotalsRecords"
runat
=
"server"
CssClass
=
"LabelBold"
Text
=
"No records for the filtering selections you have chosen."
></
asp:Label
>
</
NoRecordsTemplate
>
</
MasterTableView
>
</
telerik:RadGrid
>
</
td
>
</
tr
>
</
table
>
</
ItemTemplate
>
</
telerik:RadListView
>
</
td
>
</
tr
>
</
table
>
</
form
>
</
body
>
</
html
>
Code Behind
using
System;
using
System.Web;
using
System.Web.UI;
using
System.Web.UI.WebControls;
using
System.Data;
using
System.Configuration;
using
System.Web.Security;
using
System.Web.UI.WebControls.WebParts;
using
System.Web.UI.HtmlControls;
using
Telerik.Web.UI;
public
partial
class
Default : System.Web.UI.Page
{
protected
void
Page_Load(
object
sender, EventArgs e)
{
}
protected
void
rlvForecastCardView_Item_NeedDataSource(
object
sender, RadListViewNeedDataSourceEventArgs e)
{
DataTable dt =
new
DataTable();
DataRow row;
dt.Columns.Add(
"Id"
,
typeof
(
int
));
dt.Columns.Add(
"Description"
,
typeof
(
string
));
row = dt.NewRow();
row[
"Id"
] = 1;
row[
"Description"
] =
"One"
;
dt.Rows.Add(row);
row = dt.NewRow();
row[
"Id"
] = 2;
row[
"Description"
] =
"Two"
;
dt.Rows.Add(row);
row = dt.NewRow();
row[
"Id"
] = 3;
row[
"Description"
] =
"Three"
;
dt.Rows.Add(row);
row = dt.NewRow();
row[
"Id"
] = 4;
row[
"Description"
] =
"Four"
;
dt.Rows.Add(row);
rlvForecastCardView_Item.DataSource = dt;
}
protected
void
rgPriorActualVolumeValues_NeedDataSource(
object
source, Telerik.Web.UI.GridNeedDataSourceEventArgs e)
{
RadGrid rgPriorActualVolumeValues = (RadGrid)source;
var parentItem = rgPriorActualVolumeValues.NamingContainer
as
RadListViewDataItem;
DataTable dt =
new
DataTable();
DataRow row;
dt.Columns.Add(
"Id"
,
typeof
(
int
));
dt.Columns.Add(
"Description"
,
typeof
(
string
));
row = dt.NewRow();
row[
"Id"
] = (
int
)parentItem.GetDataKeyValue(
"Id"
);
row[
"Description"
] =
"One"
;
dt.Rows.Add(row);
row = dt.NewRow();
row[
"Id"
] = (
int
)parentItem.GetDataKeyValue(
"Id"
);
row[
"Description"
] =
"Two"
;
dt.Rows.Add(row);
row = dt.NewRow();
row[
"Id"
] = (
int
)parentItem.GetDataKeyValue(
"Id"
);
row[
"Description"
] =
"Three"
;
dt.Rows.Add(row);
row = dt.NewRow();
row[
"Id"
] = (
int
)parentItem.GetDataKeyValue(
"Id"
);
row[
"Description"
] =
"Four"
;
dt.Rows.Add(row);
rgPriorActualVolumeValues.DataSource = dt;
}
}