Solved

Read Anonymous Type from DataItem?

Posted on 2009-04-09
3
1,339 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

How our DevOps Teams Maximize Uptime

Our Dev teams are like yours. They’re continually cranking out code for new features/bugs fixes, testing, deploying, responding to production monitoring events and more. It’s complex. So, we thought you’d like to see what’s working for us. Read the use case whitepaper.

Question has a verified solution.

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

Suggested Solutions

Introduction Hi all and welcome to my first article on Experts Exchange. A while ago, someone asked me if i could do some tutorials on object oriented programming. I decided to do them on C#. Now you may ask me, why's that? Well, one of the re…
Real-time is more about the business, not the technology. In day-to-day life, to make real-time decisions like buying or investing, business needs the latest information(e.g. Gold Rate/Stock Rate). Unlike traditional days, you need not wait for a fe…
Two types of users will appreciate AOMEI Backupper Pro: 1 - Those with PCIe drives (and haven't found cloning software that works on them). 2 - Those who want a fast clone of their boot drive (no re-boots needed) and it can clone your drive wh…
In a recent question (https://www.experts-exchange.com/questions/29004105/Run-AutoHotkey-script-directly-from-Notepad.html) here at Experts Exchange, a member asked how to run an AutoHotkey script (.AHK) directly from Notepad++ (aka NPP). This video…

856 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