By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
426,012 Members | 988 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 426,012 IT Pros & Developers. It's quick & easy.

Using PagedDataSource with a Repeater

P: n/a
Hi there,

I'm fairly new to programming with Asp.Net 2.0 so I'm finding myself
regularly fumbling around in the dark a bit, so to speak.

I'm currently using Visual Web Developer and have been following the
www.asp.net data access tutorials to create a DAL and BLL to connect
my web site (a simple real estate property search web site) to my
database (Sql Express 2005).

For my search page I'm using a Repeater to display the search results,
which is bound to an ObjectDataSource that gets the data using a
SelectMethod in my custom BLL class (which calls a stored procedure,
passing through the select parameters). Things have been going fairly
smoothly until I needed to implement paging with the repeater. That in
itself is not the problem as there was a tutorial for that. My problem
is this:

I've created an event handler method for the ItemDataBound event on my
Repeater. With each item (and alternating item) I manipulate certain
fields from my data source for customised display. It was all working
fine until I implemented PagedDataSource - which changes the
datasource returned to the ObjectDataSource from my custom
PropertiesDataTable to PagedDataSource. This is the event handler:

protected void rptPropertyList_ItemDataBound(object sender,
RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType ==
ListItemType.AlternatingItem)
{
// Programmatically reference the PropertiesRow instance
bound to this RepeaterItem
MyDataClass.PropertiesRow property =
(MyDataClass.PropertiesRow)
((System.Data.DataRowView)e.Item.DataItem).Row;

Label AgentBranchLabel =
(Label)e.Item.FindControl("lblAgentBranch");

if (property.AgentBranchCode.Trim().ToLower() == "jamh")
{
AgentBranchLabel.Text = "custom output";
}
else if (property.AgentBranchCode.Trim().ToLower() ==
"jamw")
{
AgentBranchLabel.Text = "other custom output";
}
}
}

Now this returns the error:
---------------------------
Unable to cast object of type 'PropertiesRow' to type
'System.Data.DataRowView'.
Exception Details: System.InvalidCastException: Unable to cast object
of type 'PropertiesRow' to type 'System.Data.DataRowView'.

Stack Trace:
[InvalidCastException: Unable to cast object of type 'PropertiesRow'
to type 'System.Data.DataRowView'.]
search.rptPropertyList_ItemDataBound(Object sender,
RepeaterItemEventArgs e) in c:\Work\jamesmillard\search.aspx.cs:69

System.Web.UI.WebControls.Repeater.OnItemDataBound (RepeaterItemEventArgs
e) +105
System.Web.UI.WebControls.Repeater.CreateItem(Int3 2 itemIndex,
ListItemType itemType, Boolean dataBind, Object dataItem) +142
System.Web.UI.WebControls.Repeater.CreateControlHi erarchy(Boolean
useDataSource) +454
System.Web.UI.WebControls.Repeater.OnDataBinding(E ventArgs e) +53
System.Web.UI.WebControls.Repeater.DataBind() +72
System.Web.UI.WebControls.Repeater.EnsureDataBound () +55
System.Web.UI.WebControls.Repeater.OnPreRender(Eve ntArgs e) +12
System.Web.UI.Control.PreRenderRecursiveInternal() +77
System.Web.UI.Control.PreRenderRecursiveInternal() +161
System.Web.UI.Control.PreRenderRecursiveInternal() +161
System.Web.UI.Control.PreRenderRecursiveInternal() +161
System.Web.UI.Control.PreRenderRecursiveInternal() +161
System.Web.UI.Page.ProcessRequestMain(Boolean
includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
+1360
---------------------------

I'm not sure what I need to do in order to access these fields for
each row in my ItemDataBound event handler. I'm a bit lost at the
moment, and I can't seem to find any article that talks about this, so
any help would be greatly appreciated!!!

Cheers,
Karen

Apr 11 '07 #1
Share this Question
Share on Google+
1 Reply


P: n/a
On 11 Apr, 11:20, jazz...@mail.com wrote:
Hi there,

I'm fairly new to programming with Asp.Net 2.0 so I'm finding myself
regularly fumbling around in the dark a bit, so to speak.

I'm currently using Visual Web Developer and have been following thewww.asp.netdata access tutorials to create a DAL and BLL to connect
my web site (a simple real estate property search web site) to my
database (Sql Express 2005).

For my search page I'm using a Repeater to display the search results,
which is bound to an ObjectDataSource that gets the data using a
SelectMethod in my custom BLL class (which calls a stored procedure,
passing through the select parameters). Things have been going fairly
smoothly until I needed to implement paging with the repeater. That in
itself is not the problem as there was a tutorial for that. My problem
is this:

I've created an event handler method for the ItemDataBound event on my
Repeater. With each item (and alternating item) I manipulate certain
fields from my data source for customised display. It was all working
fine until I implemented PagedDataSource - which changes the
datasource returned to the ObjectDataSource from my custom
PropertiesDataTable to PagedDataSource. This is the event handler:

protected void rptPropertyList_ItemDataBound(object sender,
RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType ==
ListItemType.AlternatingItem)
{
// Programmatically reference the PropertiesRow instance
bound to this RepeaterItem
MyDataClass.PropertiesRow property =
(MyDataClass.PropertiesRow)
((System.Data.DataRowView)e.Item.DataItem).Row;

Label AgentBranchLabel =
(Label)e.Item.FindControl("lblAgentBranch");

if (property.AgentBranchCode.Trim().ToLower() == "jamh")
{
AgentBranchLabel.Text = "custom output";
}
else if (property.AgentBranchCode.Trim().ToLower() ==
"jamw")
{
AgentBranchLabel.Text = "other custom output";
}
}

}

Now this returns the error:
---------------------------
Unable to cast object of type 'PropertiesRow' to type
'System.Data.DataRowView'.
Exception Details: System.InvalidCastException: Unable to cast object
of type 'PropertiesRow' to type 'System.Data.DataRowView'.

Stack Trace:
[InvalidCastException: Unable to cast object of type 'PropertiesRow'
to type 'System.Data.DataRowView'.]
search.rptPropertyList_ItemDataBound(Object sender,
RepeaterItemEventArgs e) in c:\Work\jamesmillard\search.aspx.cs:69

System.Web.UI.WebControls.Repeater.OnItemDataBound (RepeaterItemEventArgs
e) +105
System.Web.UI.WebControls.Repeater.CreateItem(Int3 2 itemIndex,
ListItemType itemType, Boolean dataBind, Object dataItem) +142
System.Web.UI.WebControls.Repeater.CreateControlHi erarchy(Boolean
useDataSource) +454
System.Web.UI.WebControls.Repeater.OnDataBinding(E ventArgs e) +53
System.Web.UI.WebControls.Repeater.DataBind() +72
System.Web.UI.WebControls.Repeater.EnsureDataBound () +55
System.Web.UI.WebControls.Repeater.OnPreRender(Eve ntArgs e) +12
System.Web.UI.Control.PreRenderRecursiveInternal() +77
System.Web.UI.Control.PreRenderRecursiveInternal() +161
System.Web.UI.Control.PreRenderRecursiveInternal() +161
System.Web.UI.Control.PreRenderRecursiveInternal() +161
System.Web.UI.Control.PreRenderRecursiveInternal() +161
System.Web.UI.Page.ProcessRequestMain(Boolean
includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
+1360
---------------------------

I'm not sure what I need to do in order to access these fields for
each row in my ItemDataBound event handler. I'm a bit lost at the
moment, and I can't seem to find any article that talks about this, so
any help would be greatly appreciated!!!

Cheers,
Karen
Don't worry I've found the solution to my problem. :)

I changed:
MyDataClass.PropertiesRow property = (MyDataClass.PropertiesRow)
((System.Data.DataRowView)e.Item.DataItem).Row;

To:
MyDataClass.PropertiesRow property =
(MyDataClass.PropertiesRow)e.Item.DataItem;

Apr 11 '07 #2

This discussion thread is closed

Replies have been disabled for this discussion.