Solved

Read Anonymous Type from DataItem?

Posted on 2009-04-09
3
1,329 Views
Last Modified: 2013-11-11
I'm attempting to load a page with a datalist nested into a repeater. What I want to do is create the datasource for the datalist on the itemdatabound event of the repeater. It's working however I need to filter my datasource down based on a value in my repeater's itemtemplate (SubCategory). I would like to read the value from the e.Item.DataItem. SubCategory into a string but for whatever reason, I can't seem to get it, although I can see it in the watch window.

// aspx

<asp:Repeater ID="rptItems" runat="server" OnItemDataBound="rptItems_ItemDataBound">

                    <ItemTemplate>

                        <h2><%# Eval("SubCategory") %> /></h2>

                        <asp:DataList ID="dlSubList" runat="server"

                            RepeatDirection="Vertical" RepeatColumns="4">

                            <HeaderTemplate>

                                <ul>

                            </HeaderTemplate>

                            <ItemTemplate>

                                <li><%# Eval("ListItem")%></li>

                            </ItemTemplate>

                            <FooterTemplate>

                                </ul>

                            </FooterTemplate>

                        </asp:DataList>

                    </ItemTemplate>

                </asp:Repeater>
 

private List<ItemData> m_Items; // populated from db
 

// code for repeater data

rptList.DataSource = (from i in m_Items select new {i.SubCategory}).Distinct();

rptList.DataBind();

                                

protected void rptItems_ItemDataBound(object sender, RepeaterItemEventArgs e)

{

        string sSubCategory = e.Item.DataItem ???? How do I get the SubCategory value from the anonymous type? 

        if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)

        {

            DataList dl = (DataList)e.Item.FindControl("dlSubList");

            var oList = (from p in m_Items as List<PDFIndexRecord>

                         where p.SubCategory.Equals(sSubCategory)

                         select p).ToList();

            dl.DataSource = oList;

            dl.DataBind();

        }

}

Open in new window

0
Comment
Question by:Turgeson
3 Comments
 
LVL 23

Expert Comment

by:Jens Fiederer
ID: 24118846
Have you tried just ToString()?  

That is a method of ANY object.
0
 
LVL 9

Expert Comment

by:Sreedhar Vengala
ID: 24128731
As Jensfiederer said:
If you need a string value that should be doable. The watch window tends to display values by calling .ToString on the object. If the value in the watch window is the string you want then you should be able to get it by simply calling ToString.

var item = e.Item.DataItem.ToString();

You'd need to do a null check on the various properties as well.
0
 

Accepted Solution

by:
Turgeson earned 0 total points
ID: 24130233
I tried that but it didn't work like I needed it to.  It did create a non-null object with properties and values but it didn't give me a way to access them in my code. If I put a break in the event handler and run item.SubCategory in the immediate window and it gives me nothing (no error, empty string, null), just nothing. After a lot of trial and error I was able to it to work with this using Reflection:

object oSubCategory = e.Item.DataItem.GetType().GetProperties()[2].GetValue(e.Item.DataItem, null); // 2 = SubCategory

and then use the .ToString() method on the object. Kind of a round about way to a property but it works in the context I need.
0

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

More often than not, we developers are confronted with a need: a need to make some kind of magic happen via code. Whether it is for a client, for the boss, or for our own personal projects, the need must be satisfied. Most of the time, the Framework…
Performance in games development is paramount: every microsecond counts to be able to do everything in less than 33ms (aiming at 16ms). C# foreach statement is one of the worst performance killers, and here I explain why.
Migrating to Microsoft Office 365 is becoming increasingly popular for organizations both large and small. If you have made the leap to Microsoft’s cloud platform, you know that you will need to create a corporate email signature for your Office 365…
Hi friends,  in this video  I'll show you how new windows 10 user can learn the using of windows 10. Thank you.

895 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

15 Experts available now in Live!

Get 1:1 Help Now