<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://weblogs.asp.net/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>-[Danny Chen]- Blog of an ASP.NET QA tester</title><link>http://weblogs.asp.net/dannychen/default.aspx</link><description>Tips and info about Site Navigation, ImageMap, Menu and other cool ASP.NET v2.0 features.</description><dc:language>en</dc:language><generator>CommunityServer 2007 SP1 (Debug Build: 20510.895)</generator><item><title>I have a new blog:  http://blogs.msdn.com/dannychen</title><link>http://weblogs.asp.net/dannychen/archive/2006/03/07/439790.aspx</link><pubDate>Wed, 08 Mar 2006 00:22:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:439790</guid><dc:creator>dannychen</dc:creator><slash:comments>6</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/dannychen/rsscomments.aspx?PostID=439790</wfw:commentRss><comments>http://weblogs.asp.net/dannychen/archive/2006/03/07/439790.aspx#comments</comments><description>&lt;p&gt;The ASP.NET weblogs are still using .Text which, frankly, is a bit annoying to work with and just plain 'old'.&amp;nbsp; &lt;a href="http://blogs.msdn.com/petel"&gt;Pete LePage&lt;/a&gt; showed me the MSDN blogs which use the (much newer) Community Server 2.0 codebase so I'm going to switch to it.&amp;nbsp; They look much cooler anyway.&amp;nbsp; Hopefully my blog will still be syndicated on ASP.NET so the readers&amp;nbsp;can keep up to date with my happenings.&lt;/p&gt; &lt;p&gt;In other news, you'll notice on the new blog that I'm now a "Visual Web Developer" tester as well.&amp;nbsp; Actually, the truth is that after ASP.NET 2.0 shipped, I found it to be a prime opportunity to shift jobs and join the test team that is responsible for the GUI.&amp;nbsp; While both teams are quite integrated, they are certainly distinct and have their own test methodologies.&amp;nbsp; This is going to be a great experience and I really like my new team.&amp;nbsp; &lt;/p&gt; &lt;p&gt;However, I can't seem to just let go of controls so I expect you'll continue to see posts from me about custom controls and navigation tricks as well as a strong forum presence.&amp;nbsp;&lt;/p&gt; &lt;p&gt;Here is the new address: &lt;a href="http://blogs.msdn.com/dannychen"&gt;http://blogs.msdn.com/dannychen&lt;/a&gt;&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=439790" width="1" height="1"&gt;</description></item><item><title>IE7 Beta and VWD Style Builder.</title><link>http://weblogs.asp.net/dannychen/archive/2006/03/06/439678.aspx</link><pubDate>Mon, 06 Mar 2006 16:45:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:439678</guid><dc:creator>dannychen</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/dannychen/rsscomments.aspx?PostID=439678</wfw:commentRss><comments>http://weblogs.asp.net/dannychen/archive/2006/03/06/439678.aspx#comments</comments><description>&lt;p&gt;There's a bug in the IE7 beta which seems to break the style builder.&amp;nbsp; Of course we'll work on getting it fixed but in the meantime, if you happen to have IE7 installed, there's a workaround you can apply.&lt;/p&gt; &lt;p&gt;Create a new DWORD reg-key named "devenv.exe" with the value "0" at the following location:&lt;/p&gt; &lt;p&gt;"&lt;font size="2"&gt;HKLM\SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_CSS_DATA_RESPECTS_XSS_ZONE_SETTING_KB912120"&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size="2"&gt;&lt;font size="3"&gt;Read more about it here:&amp;nbsp; &lt;a href="http://blogs.msdn.com/petel"&gt;http://blogs.msdn.com/petel&lt;/a&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size="2"&gt;&amp;nbsp;&lt;/p&gt;&lt;/font&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=439678" width="1" height="1"&gt;</description></item><item><title>Top results for the loading control challenge.</title><link>http://weblogs.asp.net/dannychen/archive/2006/03/02/439437.aspx</link><pubDate>Thu, 02 Mar 2006 18:00:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:439437</guid><dc:creator>dannychen</dc:creator><slash:comments>5</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/dannychen/rsscomments.aspx?PostID=439437</wfw:commentRss><comments>http://weblogs.asp.net/dannychen/archive/2006/03/02/439437.aspx#comments</comments><description>&lt;p&gt;Thank you everyone for sharing your code with me.&amp;nbsp; There were quite a few excellent submissions and I learned a few things.&amp;nbsp; Here are the top entries I received so far for the challenge.&amp;nbsp; I'll add to this list if any more come in that I feel are worth mention.&lt;/p&gt; &lt;p&gt;crms -at- sima.com is an&amp;nbsp;Elite ASP.NET hacker and submitted this solution:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;A href="http://weblogs.asp.net/dannychen/articles/439435.aspx"&gt;http://weblogs.asp.net/dannychen/articles/439435.aspx&lt;/a&gt;&lt;br /&gt;&lt;/p&gt; &lt;p&gt;Raj Kaimal is an&amp;nbsp;Elite ASP.NET hacker and submitted this solution:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;a id="Editor_Edit_hlEntryLink" title="view: Custom Control Challenge - Entry #2" href="/dannychen/articles/439436.aspx" target="_blank"&gt;&lt;font color="#002c99"&gt;http://weblogs.asp.net/dannychen/articles/439436.aspx&lt;/font&gt;&lt;/a&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Raj also gets&amp;nbsp;extra credit&amp;nbsp;for coming up with&amp;nbsp;a sample page using async tasks to demo his control.&lt;/p&gt; &lt;p&gt;Both of these are very fine solutions,&amp;nbsp;but&amp;nbsp;not quite perfect.&amp;nbsp; Most critically, both&amp;nbsp;run into&amp;nbsp;an issue that I don't know if it can even be worked around.&amp;nbsp; Intermittently, ASP.NET throws an error: &lt;/p&gt; &lt;p&gt;&lt;span style="FONT-SIZE: 18pt; FONT-STYLE: italic"&gt;Session state has created a session id, but cannot save it because the response was already flushed by the application.&lt;/span&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt; &lt;p&gt;I talked with some dev's about this and they seem to think it's pretty cut-and-dry.&amp;nbsp; Using Response.Flush pretty much causes this and can't really be worked around.&amp;nbsp; And this can't really be done without Response.Flush.&lt;/p&gt; &lt;p&gt;Secondly, both are hardcoded to display a fixed message.&amp;nbsp; It would be really nice if they were Templated instead to give the users flexibility in the display.&amp;nbsp; This is a trivial amount of work, however...&lt;/p&gt; &lt;p&gt;None-the-less, I learned that this was indeed possible and in-fact, not that hard to do.&amp;nbsp; Hopefully someone else will be able to benefit from these examples.&amp;nbsp; &lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=439437" width="1" height="1"&gt;</description></item><item><title>We are Hiring.</title><link>http://weblogs.asp.net/dannychen/archive/2006/02/24/438985.aspx</link><pubDate>Fri, 24 Feb 2006 18:52:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:438985</guid><dc:creator>dannychen</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/dannychen/rsscomments.aspx?PostID=438985</wfw:commentRss><comments>http://weblogs.asp.net/dannychen/archive/2006/02/24/438985.aspx#comments</comments><description>&lt;p&gt;Do you want to help&amp;nbsp;make ASP.NET and Visual Studio even better in the next version?&amp;nbsp; We are looking for the brightest and the most talented candidates to fill some challenging positions in our team.&amp;nbsp; If you think you have the skills, guts, and determination to help improve the lives of web developers and shape web technology for the future, follow this link and submit your resume.&lt;/p&gt; &lt;p&gt;&lt;a href="http://forums.asp.net/1197654/ShowPost.aspx"&gt;http://forums.asp.net/1197654/ShowPost.aspx&lt;/a&gt;&lt;/p&gt; &lt;p&gt;UPDATE:&amp;nbsp; I've received quite a few submissions from people through comments or direct email.&amp;nbsp; While I really appreciate the interest you've shown,&amp;nbsp;unfortunately, I am not the hiring manager and therefore&amp;nbsp;these decisions are not mine to make.&amp;nbsp; So, I will not be able to respond to these posts or publish any of the submissions through feedback.&amp;nbsp; &lt;strong&gt;If you're interested, you NEED to follow the link above.&lt;/strong&gt;&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=438985" width="1" height="1"&gt;</description></item><item><title>A custom control challenge - make a page loading control that just works.</title><link>http://weblogs.asp.net/dannychen/archive/2006/02/24/438983.aspx</link><pubDate>Fri, 24 Feb 2006 18:37:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:438983</guid><dc:creator>dannychen</dc:creator><slash:comments>9</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/dannychen/rsscomments.aspx?PostID=438983</wfw:commentRss><comments>http://weblogs.asp.net/dannychen/archive/2006/02/24/438983.aspx#comments</comments><description>&lt;p&gt;It is a fairly well known technique to use Response.Buffer and Response.Flush to make a "please wait" or "Loading..." message appear when you know a page is going to take a while to load.&amp;nbsp; So I was quite estatic when I read on ScottGu's &lt;A href="http://weblogs.asp.net/scottgu"&gt;blog&lt;/a&gt;&amp;nbsp;that someone&amp;nbsp;(&lt;a href="http://www.lennybacon.com"&gt;Daniel Fisher&lt;/a&gt;) had done what I've wanted to do for a while: formalize this trick&amp;nbsp;into a nice tidy custom control you can just drop onto a page.&amp;nbsp; You can see it here:&amp;nbsp;&amp;nbsp;&lt;a href="http://www.lennybacon.com/PleaseWaitBuildingAWaitScreenControlForASPNET.aspx"&gt;http://www.lennybacon.com/PleaseWaitBuildingAWaitScreenControlForASPNET.aspx&lt;/a&gt;.&amp;nbsp; It is really a very&amp;nbsp;slick control.&amp;nbsp; However, there was one problem I couldn't (and still can't) figure out which stopped me from writing this control initially.&amp;nbsp; When I look more closely at Daniel's code, I noticed that he hadn't solved&amp;nbsp;this problem either.&lt;/p&gt; &lt;p&gt;&lt;font face="Courier New"&gt;&lt;strong&gt;&lt;u&gt;The problem&lt;/u&gt;&lt;/strong&gt;&lt;/font&gt; &lt;/p&gt; &lt;p&gt;How do you write the control so that it doesn't wrap a specific function but instead works against the natural page loading time&amp;nbsp;itself.&amp;nbsp; Here's a scenario to help describe what I mean.&amp;nbsp; Lets say you develop a page with a&amp;nbsp;couple&amp;nbsp;GridView's and DetailsViews bound to&amp;nbsp;SqlDataSource's.&amp;nbsp; Everything works great in your mock up but as soon as you deploy it against your live data, you find that the page takes 2-8 seconds to load.&amp;nbsp; It would be awesome if you could simple take this "loading ..." control, drop it onto your page and -bang- the functionality is added.&amp;nbsp; Now, I know there's an easy solution using Daniels code and simple adding the DataBinding logic into his OnProcess method, but that's not the point.&amp;nbsp; This should be a drag-and-drop solution.&lt;/p&gt; &lt;p&gt;&lt;font face="Courier New"&gt;&lt;strong&gt;&lt;u&gt;The challenge&lt;/u&gt;&lt;/strong&gt;&lt;/font&gt; &lt;/p&gt; &lt;p&gt;Create a custom control that provides similar functionality to Daniels but works against the page&amp;nbsp;processing time.&amp;nbsp;&amp;nbsp;A "drag and drop" kind of&amp;nbsp;solution.&amp;nbsp; If you think you can do something that even&amp;nbsp;I can't figure out how to do, please contact me through my blog and I will get back to you over email.&amp;nbsp; I'll post the best submissions I receive and&amp;nbsp;declare&amp;nbsp;the submitters to be&amp;nbsp;"Elite ASP.NET Hackers"&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=438983" width="1" height="1"&gt;</description></item><item><title>Saving unicode content with encoding</title><link>http://weblogs.asp.net/dannychen/archive/2006/02/23/438906.aspx</link><pubDate>Thu, 23 Feb 2006 19:07:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:438906</guid><dc:creator>dannychen</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/dannychen/rsscomments.aspx?PostID=438906</wfw:commentRss><comments>http://weblogs.asp.net/dannychen/archive/2006/02/23/438906.aspx#comments</comments><description>&lt;p&gt;Here's a quick tip that you may or may not know about.&amp;nbsp; In Visual Studio (and possibly other MS programs) it's not enough to paste some unicode content into your file and then hit save.&amp;nbsp; You'll also need to save it with the correct encoding.&amp;nbsp; However, once you save&amp;nbsp;the file with a particular encoding, it will continue to use that&amp;nbsp;encoding until you switch it (this means you won't have to keep&amp;nbsp;doing this for each save)&lt;/p&gt; &lt;p&gt;Here are the steps to do this:&amp;nbsp; &lt;/p&gt; &lt;p&gt;simple choose file-&amp;gt;save as&lt;br /&gt;in the save-as dialog the "Save" button has a little pull down arrow.&lt;br /&gt;Select this arrow and then choose "Save With Encoding"&lt;br /&gt;This will open a dialog with a drop down that lists all the supported encodings.&lt;/p&gt; &lt;p&gt;Here are some screenshot to help out:&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://dannychen.members.winisp.net/blog/2006_02_23/2006_02_23_001.jpg" /&gt; &lt;img src="http://dannychen.members.winisp.net/blog/2006_02_23/2006_02_23_002.jpg" /&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=438906" width="1" height="1"&gt;</description></item><item><title>Making the CompiledTemplateBuilder work for you.  Create a Template Library.</title><link>http://weblogs.asp.net/dannychen/archive/2006/01/27/436714.aspx</link><pubDate>Fri, 27 Jan 2006 21:00:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:436714</guid><dc:creator>dannychen</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/dannychen/rsscomments.aspx?PostID=436714</wfw:commentRss><comments>http://weblogs.asp.net/dannychen/archive/2006/01/27/436714.aspx#comments</comments><description>&lt;p&gt;This is a bit of a follow on&amp;nbsp;to my &lt;A href="http://weblogs.asp.net/dannychen/archive/2006/01/25/436454.aspx"&gt;last post&lt;/a&gt;.&amp;nbsp; At the end, I made an update about how to make use of custom TreeNodes in a databound scenario.&amp;nbsp; I did that example with the CSSTreeNode instead of the TemplatedTreeNode because the custom property in the templated case was an ITemplate.&amp;nbsp; Trying to assign a value to that property is a great deal more difficult than a string property.&amp;nbsp; And that got me thinking...&lt;/p&gt; &lt;p&gt;Lets start with something that seems pretty simple:&amp;nbsp; &lt;/p&gt; &lt;div style="FONT-SIZE: 9pt; FONT-FAMILY: monospace; BACKGROUND-COLOR: white"&gt;&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt;&lt;font color="maroon"&gt;asp&lt;/font&gt;&lt;font color="blue"&gt;:&lt;/font&gt;&lt;font color="maroon"&gt;SiteMapPath&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="red"&gt;ID&lt;/font&gt;&lt;font color="blue"&gt;="SiteMapPath1"&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="red"&gt;runat&lt;/font&gt;&lt;font color="blue"&gt;="server"&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt;&lt;font color="maroon"&gt;NodeTemplate&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;%&lt;/font&gt;&lt;font color="blue"&gt;#&lt;/font&gt;&lt;font color="black"&gt; Eval(&lt;/font&gt;&lt;font color="maroon"&gt;"title"&lt;/font&gt;&lt;font color="black"&gt;) %&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="maroon"&gt;NodeTemplate&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="maroon"&gt;asp&lt;/font&gt;&lt;font color="blue"&gt;:&lt;/font&gt;&lt;font color="maroon"&gt;SiteMapPath&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&lt;/font&gt; &lt;/div&gt; &lt;p&gt;What if you wanted to add this control to the page dynamically?&amp;nbsp; How would you write it in code?&amp;nbsp; Well, adding the SiteMapPath to the page is pretty simple.&amp;nbsp; But the NodeTemplate isn't so simple.&amp;nbsp; What actually happens in that case is a mechanism in the framework creates a new object on the fly that implements the ITemplate interface and generates some code to populate the template.&amp;nbsp; In order to do this manually,&amp;nbsp;the developer would have to create his/her own ITemplate object and databinding code.&amp;nbsp; Here's a simplified version of what that code might look like:&lt;/p&gt; &lt;div style="FONT-SIZE: 9pt; FONT-FAMILY: monospace; BACKGROUND-COLOR: white"&gt;&lt;font color="blue"&gt;public&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;class&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="teal"&gt;MyTemplate&lt;/font&gt;&lt;font color="black"&gt; : &lt;/font&gt;&lt;font color="teal"&gt;ITemplate&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;public&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;void&lt;/font&gt;&lt;font color="black"&gt; InstantiateIn(&lt;/font&gt;&lt;font color="teal"&gt;Control&lt;/font&gt;&lt;font color="black"&gt; container)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="teal"&gt;Label&lt;/font&gt;&lt;font color="black"&gt; l1 = &lt;/font&gt;&lt;font color="blue"&gt;new&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="teal"&gt;Label&lt;/font&gt;&lt;font color="black"&gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;container.Controls.Add(l1);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;l1.DataBinding += &lt;/font&gt;&lt;font color="blue"&gt;new&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="teal"&gt;EventHandler&lt;/font&gt;&lt;font color="black"&gt;(l1_DataBinding);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;void&lt;/font&gt;&lt;font color="black"&gt; l1_DataBinding(&lt;/font&gt;&lt;font color="blue"&gt;object&lt;/font&gt;&lt;font color="black"&gt; sender, &lt;/font&gt;&lt;font color="teal"&gt;EventArgs&lt;/font&gt;&lt;font color="black"&gt; e)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="teal"&gt;Label&lt;/font&gt;&lt;font color="black"&gt; l1 = sender &lt;/font&gt;&lt;font color="blue"&gt;as&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="teal"&gt;Label&lt;/font&gt;&lt;font color="black"&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="teal"&gt;SiteMapNodeItem&lt;/font&gt;&lt;font color="black"&gt; container = l1.BindingContainer &lt;/font&gt;&lt;font color="blue"&gt;as&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="teal"&gt;SiteMapNodeItem&lt;/font&gt;&lt;font color="black"&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;l1.Text = container.SiteMapNode.Title;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;}&lt;/font&gt; &lt;/div&gt; &lt;div style="FONT-SIZE: 9pt; FONT-FAMILY: monospace; BACKGROUND-COLOR: white"&gt;&amp;nbsp;&lt;/div&gt; &lt;div style="FONT-SIZE: 9pt; FONT-FAMILY: monospace; BACKGROUND-COLOR: white"&gt; &lt;div style="FONT-SIZE: 9pt; FONT-FAMILY: monospace; BACKGROUND-COLOR: white"&gt;&lt;font color="blue"&gt;public&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;partial&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;class&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&lt;/font&gt;&lt;font color="teal"&gt;TestPage&lt;/font&gt;&lt;font color="black"&gt; : System.Web.UI.&lt;/font&gt;&lt;font color="teal"&gt;Page&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;protected&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;void&lt;/font&gt;&lt;font color="black"&gt; Page_Load(&lt;/font&gt;&lt;font color="blue"&gt;object&lt;/font&gt;&lt;font color="black"&gt; sender, &lt;/font&gt;&lt;font color="teal"&gt;EventArgs&lt;/font&gt;&lt;font color="black"&gt; e)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="teal"&gt;SiteMapPath&lt;/font&gt;&lt;font color="black"&gt; smp = &lt;/font&gt;&lt;font color="blue"&gt;new&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="teal"&gt;SiteMapPath&lt;/font&gt;&lt;font color="black"&gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;smp.NodeTemplate = &lt;/font&gt;&lt;font color="blue"&gt;new&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="teal"&gt;MyTemplate&lt;/font&gt;&lt;font color="black"&gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;form1.Controls.Add(smp);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;}&lt;/font&gt; &lt;/div&gt;&lt;/div&gt; &lt;p&gt;Keep in mind, this code is for a single eval statement.&amp;nbsp; If you wanted to add several controls, some styles, maybe another template or two (perhaps&amp;nbsp;20 lines of markup), this could quickly become 100+ lines of code for this single control.&amp;nbsp; This is especially&amp;nbsp;unfortunate because this is work that the parser can do reliably and quickly.&amp;nbsp; &lt;/p&gt; &lt;p&gt;So the question is, how can I get the parser to parse the template markup for me and yet present me with a reference to the ITemplate object instead of consuming it?&lt;br /&gt;&amp;nbsp;&amp;nbsp; &lt;/p&gt; &lt;p&gt;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;font size="4"&gt;The Template Library Control&lt;/font&gt;&lt;/strong&gt;&lt;strong&gt;&lt;font size="4"&gt;&lt;/p&gt;&lt;/font&gt;&lt;/strong&gt; &lt;p&gt;What we need is a control (with no rendering,&amp;nbsp;kind of like&amp;nbsp;a datasource)&amp;nbsp;with a public property that is a&amp;nbsp;collection of templates.&amp;nbsp; Then similarly to how the&amp;nbsp;page parser will&amp;nbsp;populate a ListItem collection or a MenuItem collection for you, it could populate a Template collection.&amp;nbsp; It'd be additionally nice to have random access to the list through a Name rather than by index.&amp;nbsp; Amazingly enough, this&amp;nbsp;actually works:&amp;nbsp;(link to full listing at the bottom of the article):&lt;/p&gt; &lt;div style="FONT-SIZE: 9pt; FONT-FAMILY: monospace; BACKGROUND-COLOR: white"&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[&lt;/font&gt;&lt;font color="teal"&gt;ParseChildren&lt;/font&gt;&lt;font color="black"&gt;(&lt;/font&gt;&lt;font color="blue"&gt;true&lt;/font&gt;&lt;font color="black"&gt;,&lt;/font&gt;&lt;font color="maroon"&gt;"Templates"&lt;/font&gt;&lt;font color="black"&gt;), &lt;/font&gt;&lt;font color="teal"&gt;PersistChildren&lt;/font&gt;&lt;font color="black"&gt;(&lt;/font&gt;&lt;font color="blue"&gt;false&lt;/font&gt;&lt;font color="black"&gt;)]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;public&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;class&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="teal"&gt;TemplateLibrary&lt;/font&gt;&lt;font color="black"&gt; : &lt;/font&gt;&lt;font color="teal"&gt;Control&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;public&lt;/font&gt;&lt;font color="black"&gt; TemplateLibrary()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;_templates = &lt;/font&gt;&lt;font color="blue"&gt;new&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="teal"&gt;TemplateList&lt;/font&gt;&lt;font color="black"&gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;private&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="teal"&gt;TemplateList&lt;/font&gt;&lt;font color="black"&gt; _templates;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[&lt;/font&gt;&lt;font color="teal"&gt;PersistenceMode&lt;/font&gt;&lt;font color="black"&gt;(&lt;/font&gt;&lt;font color="teal"&gt;PersistenceMode&lt;/font&gt;&lt;font color="black"&gt;.InnerProperty)]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;public&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="teal"&gt;TemplateList&lt;/font&gt;&lt;font color="black"&gt; Templates&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;get&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;{&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;return&lt;/font&gt;&lt;font color="black"&gt; _templates;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;public&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;class&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="teal"&gt;TemplateList&lt;/font&gt;&lt;font color="black"&gt; : &lt;/font&gt;&lt;font color="teal"&gt;List&lt;/font&gt;&lt;font color="black"&gt;&amp;lt;&lt;/font&gt;&lt;font color="teal"&gt;TemplateItem&lt;/font&gt;&lt;font color="black"&gt;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;public&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="teal"&gt;TemplateItem&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;this&lt;/font&gt;&lt;font color="black"&gt;[&lt;/font&gt;&lt;font color="blue"&gt;string&lt;/font&gt;&lt;font color="black"&gt; key]&amp;nbsp;{ ...&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;public&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;class&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="teal"&gt;TemplateItem&lt;/font&gt;&lt;font color="black"&gt; : &lt;/font&gt;&lt;font color="teal"&gt;ITemplate&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;private&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;string&lt;/font&gt;&lt;font color="black"&gt; _name;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;private&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="teal"&gt;ITemplate&lt;/font&gt;&lt;font color="black"&gt; _template;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;public&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;string&lt;/font&gt;&lt;font color="black"&gt; Name { ...&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[&lt;/font&gt;&lt;font color="teal"&gt;PersistenceMode&lt;/font&gt;&lt;font color="black"&gt;(&lt;/font&gt;&lt;font color="teal"&gt;PersistenceMode&lt;/font&gt;&lt;font color="black"&gt;.InnerDefaultProperty), &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font color="teal"&gt;TemplateContainer&lt;/font&gt;&lt;font color="black"&gt;(&lt;/font&gt;&lt;font color="blue"&gt;typeof&lt;/font&gt;&lt;font color="black"&gt;(&lt;/font&gt;&lt;font color="teal"&gt;IDataItemContainer&lt;/font&gt;&lt;font color="black"&gt;))]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;public&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="teal"&gt;ITemplate&lt;/font&gt;&lt;font color="black"&gt; Template { ...&lt;font color="black"&gt;&amp;nbsp;}&lt;/font&gt;&lt;/font&gt;&lt;/div&gt; &lt;div style="FONT-SIZE: 9pt; FONT-FAMILY: monospace; BACKGROUND-COLOR: white"&gt;&lt;font color="black"&gt;&lt;font color="black"&gt;&lt;br /&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#region&lt;/font&gt;&lt;font color="black"&gt; ITemplate Members&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;public&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;void&lt;/font&gt;&lt;font color="black"&gt; InstantiateIn(&lt;/font&gt;&lt;font color="teal"&gt;Control&lt;/font&gt;&lt;font color="black"&gt; container) { ... }&lt;br /&gt;&lt;/font&gt;&lt;font color="blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#endregion&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;}&lt;/font&gt; &lt;/div&gt; &lt;p&gt;Here's how this might be used in markup:&lt;/p&gt; &lt;div style="FONT-SIZE: 9pt; FONT-FAMILY: monospace; BACKGROUND-COLOR: white"&gt;&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt;&lt;font color="maroon"&gt;MS&lt;/font&gt;&lt;font color="blue"&gt;:&lt;/font&gt;&lt;font color="maroon"&gt;TemplateLibrary&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="red"&gt;runat&lt;/font&gt;&lt;font color="blue"&gt;="server"&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="red"&gt;ID&lt;/font&gt;&lt;font color="blue"&gt;="TemplateLibrary1"&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt;&lt;font color="maroon"&gt;MS&lt;/font&gt;&lt;font color="blue"&gt;:&lt;/font&gt;&lt;font color="maroon"&gt;TemplateItem&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="red"&gt;Name&lt;/font&gt;&lt;font color="blue"&gt;="Template1"&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt;&lt;font color="maroon"&gt;Template&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;Some Content&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="maroon"&gt;Template&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="maroon"&gt;MS&lt;/font&gt;&lt;font color="blue"&gt;:&lt;/font&gt;&lt;font color="maroon"&gt;TemplateItem&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt;&lt;font color="maroon"&gt;MS&lt;/font&gt;&lt;font color="blue"&gt;:&lt;/font&gt;&lt;font color="maroon"&gt;TemplateItem&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="red"&gt;Name&lt;/font&gt;&lt;font color="blue"&gt;="Template2"&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt;&lt;font color="maroon"&gt;Template&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;Some Other Content&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="maroon"&gt;Template&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="maroon"&gt;MS&lt;/font&gt;&lt;font color="blue"&gt;:&lt;/font&gt;&lt;font color="maroon"&gt;TemplateItem&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="maroon"&gt;MS&lt;/font&gt;&lt;font color="blue"&gt;:&lt;/font&gt;&lt;font color="maroon"&gt;TemplateLibrary&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&lt;/font&gt; &lt;/div&gt; &lt;div style="FONT-SIZE: 9pt; FONT-FAMILY: monospace; BACKGROUND-COLOR: white"&gt;&amp;nbsp;&lt;/div&gt; &lt;div style="FONT-SIZE: 9pt; FONT-FAMILY: monospace; BACKGROUND-COLOR: white"&gt;&amp;nbsp;&lt;/div&gt; &lt;div style="FONT-SIZE: 9pt; FONT-FAMILY: monospace; BACKGROUND-COLOR: white"&gt; &lt;div style="FONT-SIZE: 9pt; FONT-FAMILY: monospace; BACKGROUND-COLOR: white"&gt;&lt;font color="blue"&gt;protected&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;void&lt;/font&gt;&lt;font color="black"&gt; Page_Load(&lt;/font&gt;&lt;font color="blue"&gt;object&lt;/font&gt;&lt;font color="black"&gt; sender, &lt;/font&gt;&lt;font color="teal"&gt;EventArgs&lt;/font&gt;&lt;font color="black"&gt; e)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Menu1.StaticItemTemplate = TemplateLibrary1.Templates[&lt;/font&gt;&lt;font color="maroon"&gt;"Template1"&lt;/font&gt;&lt;font color="black"&gt;];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Menu1.DynamicItemTemplate = TemplateLibrary1.Templates[&lt;/font&gt;&lt;font color="maroon"&gt;"Template2"&lt;/font&gt;&lt;font color="black"&gt;];&lt;br /&gt;}&lt;/font&gt; &lt;/div&gt; &lt;div style="FONT-SIZE: 9pt; FONT-FAMILY: monospace; BACKGROUND-COLOR: white"&gt;&amp;nbsp;&lt;/div&gt;&lt;/div&gt; &lt;p&gt;As shown here, the end result is that the templates are built by the parser but exposed through a public property on the control.&amp;nbsp; The control itself has no inherent rendering so it doesn't really affect the page output.&amp;nbsp; Since the templates are assigned in code, some special logic could be used to choose which template should be applied where.&amp;nbsp; Here are a couple more examples of things you can do that would, otherwise, have been&amp;nbsp;a great deal more difficult to accomplish.&amp;nbsp; &lt;/p&gt; &lt;p&gt;&lt;strong&gt;Example 1&lt;/strong&gt;: This first example&amp;nbsp;makes uses of the templated TreeNodes from the previous post.&amp;nbsp; In this case, I'm choosing, dynamically, based on the data in web.sitemap, which template should be applied.&lt;/p&gt; &lt;div style="FONT-SIZE: 9pt; FONT-FAMILY: monospace; BACKGROUND-COLOR: white"&gt;&amp;lt;%&lt;font color="blue"&gt;@&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="maroon"&gt;Page&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="red"&gt;Language&lt;/font&gt;&lt;font color="blue"&gt;="C#"&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="red"&gt;Debug&lt;/font&gt;&lt;font color="blue"&gt;="true"&lt;/font&gt;&lt;font color="black"&gt; %&amp;gt;&lt;br /&gt;&amp;lt;%&lt;/font&gt;&lt;font color="blue"&gt;@&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="maroon"&gt;Register&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="red"&gt;Namespace&lt;/font&gt;&lt;font color="blue"&gt;="MSSamples"&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="red"&gt;TagPrefix&lt;/font&gt;&lt;font color="blue"&gt;="MS"&lt;/font&gt;&lt;font color="black"&gt; %&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;!&lt;/font&gt;&lt;font color="maroon"&gt;DOCTYPE&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="red"&gt;html&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="red"&gt;PUBLIC&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;"-//W3C//DTD XHTML 1.0 Transitional//EN"&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;&lt;/font&gt;&lt;font color="maroon"&gt;script&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="red"&gt;runat&lt;/font&gt;&lt;font color="blue"&gt;="server"&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;protected&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;void&lt;/font&gt;&lt;font color="black"&gt; MyTreeView1_TreeNodeDataBound(&lt;/font&gt;&lt;font color="blue"&gt;object&lt;/font&gt;&lt;font color="black"&gt; sender, &lt;/font&gt;&lt;font color="teal"&gt;TreeNodeEventArgs&lt;/font&gt;&lt;font color="black"&gt; e)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;if&lt;/font&gt;&lt;font color="black"&gt; (e.Node &lt;/font&gt;&lt;font color="blue"&gt;is&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="teal"&gt;TemplatedTreeNode&lt;/font&gt;&lt;font color="black"&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="teal"&gt;TemplatedTreeNode&lt;/font&gt;&lt;font color="black"&gt; tn = e.Node &lt;/font&gt;&lt;font color="blue"&gt;as&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="teal"&gt;TemplatedTreeNode&lt;/font&gt;&lt;font color="black"&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="teal"&gt;SiteMapNode&lt;/font&gt;&lt;font color="black"&gt; smn = e.Node.DataItem &lt;/font&gt;&lt;font color="blue"&gt;as&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="teal"&gt;SiteMapNode&lt;/font&gt;&lt;font color="black"&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;if&lt;/font&gt;&lt;font color="black"&gt;( smn != &lt;/font&gt;&lt;font color="blue"&gt;null&lt;/font&gt;&lt;font color="black"&gt; &amp;amp;&amp;amp; smn[&lt;/font&gt;&lt;font color="maroon"&gt;"preTemplate"&lt;/font&gt;&lt;font color="black"&gt;] != &lt;/font&gt;&lt;font color="blue"&gt;null&lt;/font&gt;&lt;font color="black"&gt; )&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;tn.PreTextTemplate = TemplateLibrary1.Templates[ smn[&lt;/font&gt;&lt;font color="maroon"&gt;"preTemplate"&lt;/font&gt;&lt;font color="black"&gt;] ];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;if&lt;/font&gt;&lt;font color="black"&gt;( smn != &lt;/font&gt;&lt;font color="blue"&gt;null&lt;/font&gt;&lt;font color="black"&gt; &amp;amp;&amp;amp; smn[&lt;/font&gt;&lt;font color="maroon"&gt;"postTemplate"&lt;/font&gt;&lt;font color="black"&gt;] != &lt;/font&gt;&lt;font color="blue"&gt;null&lt;/font&gt;&lt;font color="black"&gt; )&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;tn.PostTextTemplate = TemplateLibrary1.Templates[ smn[&lt;/font&gt;&lt;font color="maroon"&gt;"postTemplate"&lt;/font&gt;&lt;font color="black"&gt;] ];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="maroon"&gt;script&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;&lt;/font&gt;&lt;font color="maroon"&gt;html&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="red"&gt;xmlns&lt;/font&gt;&lt;font color="blue"&gt;="http://www.w3.org/1999/xhtml"&amp;gt;&lt;br /&gt;&amp;lt;&lt;/font&gt;&lt;font color="maroon"&gt;head&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="red"&gt;id&lt;/font&gt;&lt;font color="blue"&gt;="Head1"&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="red"&gt;runat&lt;/font&gt;&lt;font color="blue"&gt;="server"&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt;&lt;font color="maroon"&gt;title&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&lt;/font&gt;&lt;font color="black"&gt;Untitled Page&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="maroon"&gt;title&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&lt;br /&gt;&amp;lt;/&lt;/font&gt;&lt;font color="maroon"&gt;head&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&lt;br /&gt;&amp;lt;&lt;/font&gt;&lt;font color="maroon"&gt;body&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt;&lt;font color="maroon"&gt;form&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="red"&gt;id&lt;/font&gt;&lt;font color="blue"&gt;="form1"&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="red"&gt;runat&lt;/font&gt;&lt;font color="blue"&gt;="server"&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt;&lt;font color="maroon"&gt;div&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt;&lt;font color="maroon"&gt;MS&lt;/font&gt;&lt;font color="blue"&gt;:&lt;/font&gt;&lt;font color="maroon"&gt;MyTreeView&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="red"&gt;runat&lt;/font&gt;&lt;font color="blue"&gt;="server"&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="red"&gt;ID&lt;/font&gt;&lt;font color="blue"&gt;="MyTreeView1"&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="red"&gt;ExpandDepth&lt;/font&gt;&lt;font color="blue"&gt;="2"&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="red"&gt;DataSourceID&lt;/font&gt;&lt;font color="blue"&gt;="SiteMapDataSource1"&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="red"&gt;OnTreeNodeDataBound&lt;/font&gt;&lt;font color="blue"&gt;="MyTreeView1_TreeNodeDataBound"&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="maroon"&gt;MS&lt;/font&gt;&lt;font color="blue"&gt;:&lt;/font&gt;&lt;font color="maroon"&gt;MyTreeView&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt;&lt;font color="maroon"&gt;asp&lt;/font&gt;&lt;font color="blue"&gt;:&lt;/font&gt;&lt;font color="maroon"&gt;SiteMapDataSource&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="red"&gt;ID&lt;/font&gt;&lt;font color="blue"&gt;="SiteMapDataSource1"&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="red"&gt;runat&lt;/font&gt;&lt;font color="blue"&gt;="server"&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;/&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt;&lt;font color="maroon"&gt;MS&lt;/font&gt;&lt;font color="blue"&gt;:&lt;/font&gt;&lt;font color="maroon"&gt;TemplateLibrary&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="red"&gt;runat&lt;/font&gt;&lt;font color="blue"&gt;="server"&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="red"&gt;ID&lt;/font&gt;&lt;font color="blue"&gt;="TemplateLibrary1"&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt;&lt;font color="maroon"&gt;MS&lt;/font&gt;&lt;font color="blue"&gt;:&lt;/font&gt;&lt;font color="maroon"&gt;TemplateItem&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="red"&gt;Name&lt;/font&gt;&lt;font color="blue"&gt;="arrow"&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt;&lt;font color="maroon"&gt;Template&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;==&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="maroon"&gt;Template&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="maroon"&gt;MS&lt;/font&gt;&lt;font color="blue"&gt;:&lt;/font&gt;&lt;font color="maroon"&gt;TemplateItem&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt;&lt;font color="maroon"&gt;MS&lt;/font&gt;&lt;font color="blue"&gt;:&lt;/font&gt;&lt;font color="maroon"&gt;TemplateItem&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="red"&gt;Name&lt;/font&gt;&lt;font color="blue"&gt;="valuePath"&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt;&lt;font color="maroon"&gt;Template&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ValuePath:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;%&lt;/font&gt;&lt;font color="blue"&gt;#&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="teal"&gt;DataBinder&lt;/font&gt;&lt;font color="black"&gt;.Eval(Container.DataItem, &lt;/font&gt;&lt;font color="maroon"&gt;"ValuePath"&lt;/font&gt;&lt;font color="black"&gt;) %&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="maroon"&gt;Template&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="maroon"&gt;MS&lt;/font&gt;&lt;font color="blue"&gt;:&lt;/font&gt;&lt;font color="maroon"&gt;TemplateItem&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="maroon"&gt;MS&lt;/font&gt;&lt;font color="blue"&gt;:&lt;/font&gt;&lt;font color="maroon"&gt;TemplateLibrary&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="maroon"&gt;div&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="maroon"&gt;form&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&lt;br /&gt;&amp;lt;/&lt;/font&gt;&lt;font color="maroon"&gt;body&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&lt;br /&gt;&amp;lt;/&lt;/font&gt;&lt;font color="maroon"&gt;html&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;/div&gt; &lt;div style="FONT-SIZE: 9pt; FONT-FAMILY: monospace; BACKGROUND-COLOR: white"&gt;&lt;font color="blue"&gt;&lt;/font&gt;&amp;nbsp;&lt;/div&gt; &lt;div style="FONT-SIZE: 9pt; FONT-FAMILY: monospace; BACKGROUND-COLOR: white"&gt;&lt;font color="blue"&gt;&lt;/font&gt;&amp;nbsp;&lt;/div&gt; &lt;div style="FONT-SIZE: 9pt; FONT-FAMILY: monospace; BACKGROUND-COLOR: white"&gt;&lt;font color="#000000" size="3"&gt;&lt;strong&gt;Web.SiteMap Contents:&lt;/strong&gt;&lt;/font&gt;&lt;/div&gt; &lt;div style="FONT-SIZE: 9pt; FONT-FAMILY: monospace; BACKGROUND-COLOR: white"&gt;&amp;nbsp;&lt;/div&gt; &lt;div style="FONT-SIZE: 9pt; FONT-FAMILY: monospace; BACKGROUND-COLOR: white"&gt;&lt;font color="blue"&gt;&amp;lt;?&lt;/font&gt;&lt;font color="maroon"&gt;xml&lt;/font&gt;&lt;font color="blue"&gt; &lt;/font&gt;&lt;font color="red"&gt;version&lt;/font&gt;&lt;font color="blue"&gt;=&lt;/font&gt;&lt;font color="black"&gt;"&lt;/font&gt;&lt;font color="blue"&gt;1.0&lt;/font&gt;&lt;font color="black"&gt;"&lt;/font&gt;&lt;font color="blue"&gt; &lt;/font&gt;&lt;font color="red"&gt;encoding&lt;/font&gt;&lt;font color="blue"&gt;=&lt;/font&gt;&lt;font color="black"&gt;"&lt;/font&gt;&lt;font color="blue"&gt;utf-8&lt;/font&gt;&lt;font color="black"&gt;"&lt;/font&gt;&lt;font color="blue"&gt; ?&amp;gt;&lt;br /&gt;&amp;lt;&lt;/font&gt;&lt;font color="maroon"&gt;siteMap&lt;/font&gt;&lt;font color="blue"&gt; &lt;/font&gt;&lt;font color="red"&gt;xmlns&lt;/font&gt;&lt;font color="blue"&gt;=&lt;/font&gt;&lt;font color="black"&gt;"&lt;/font&gt;&lt;font color="blue"&gt;http://schemas.microsoft.com/AspNet/SiteMap-File-1.0&lt;/font&gt;&lt;font color="black"&gt;"&lt;/font&gt;&lt;font color="blue"&gt; &amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;/font&gt;&lt;font color="maroon"&gt;siteMapNode&lt;/font&gt;&lt;font color="blue"&gt; &lt;/font&gt;&lt;font color="red"&gt;title&lt;/font&gt;&lt;font color="blue"&gt;=&lt;/font&gt;&lt;font color="black"&gt;"&lt;/font&gt;&lt;font color="blue"&gt;Home&lt;/font&gt;&lt;font color="black"&gt;"&lt;/font&gt;&lt;font color="blue"&gt; &lt;/font&gt;&lt;font color="red"&gt;preTemplate&lt;/font&gt;&lt;font color="blue"&gt;=&lt;/font&gt;&lt;font color="black"&gt;"&lt;/font&gt;&lt;font color="blue"&gt;arrow&lt;/font&gt;&lt;font color="black"&gt;"&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;/font&gt;&lt;font color="maroon"&gt;siteMapNode&lt;/font&gt;&lt;font color="blue"&gt; &lt;/font&gt;&lt;font color="red"&gt;title&lt;/font&gt;&lt;font color="blue"&gt;=&lt;/font&gt;&lt;font color="black"&gt;"&lt;/font&gt;&lt;font color="blue"&gt;Products&lt;/font&gt;&lt;font color="black"&gt;"&lt;/font&gt;&lt;font color="blue"&gt; &amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;/font&gt;&lt;font color="maroon"&gt;siteMapNode&lt;/font&gt;&lt;font color="blue"&gt; &lt;/font&gt;&lt;font color="red"&gt;title&lt;/font&gt;&lt;font color="blue"&gt;=&lt;/font&gt;&lt;font color="black"&gt;"&lt;/font&gt;&lt;font color="blue"&gt;Hardware&lt;/font&gt;&lt;font color="black"&gt;"&lt;/font&gt;&lt;font color="blue"&gt; &lt;/font&gt;&lt;font color="red"&gt;postTemplate&lt;/font&gt;&lt;font color="blue"&gt;=&lt;/font&gt;&lt;font color="black"&gt;"&lt;/font&gt;&lt;font color="blue"&gt;valuePath&lt;/font&gt;&lt;font color="black"&gt;"&lt;/font&gt;&lt;font color="blue"&gt;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/&lt;/font&gt;&lt;font color="maroon"&gt;siteMapNode&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/&lt;/font&gt;&lt;font color="maroon"&gt;siteMapNode&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;lt;/&lt;/font&gt;&lt;font color="maroon"&gt;siteMap&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&lt;/font&gt; &lt;/div&gt; &lt;div style="FONT-SIZE: 9pt; FONT-FAMILY: monospace; BACKGROUND-COLOR: white"&gt;&amp;nbsp;&lt;/div&gt; &lt;div style="FONT-SIZE: 9pt; FONT-FAMILY: monospace; BACKGROUND-COLOR: white"&gt;&lt;strong&gt;&lt;font size="3"&gt;Output:&lt;/font&gt;&lt;/strong&gt;&lt;/div&gt; &lt;div style="FONT-SIZE: 9pt; FONT-FAMILY: monospace; BACKGROUND-COLOR: white"&gt;&lt;img src="http://dannychen.members.winisp.net/blog/2006_01_27/20060127_1.jpg" /&gt;&lt;/div&gt; &lt;p&gt;&lt;strong&gt;Example 2&lt;/strong&gt;: The key&amp;nbsp;concept in this example is that the template library could be shared through a user control to every page that requires it.&amp;nbsp; &lt;/p&gt; &lt;div style="FONT-SIZE: 9pt; FONT-FAMILY: monospace; BACKGROUND-COLOR: white"&gt;&amp;nbsp;&lt;/div&gt; &lt;div style="FONT-SIZE: 9pt; FONT-FAMILY: monospace; BACKGROUND-COLOR: white"&gt;&lt;strong&gt;&lt;font size="3"&gt;Templates.ascx:&lt;/font&gt;&lt;/strong&gt;&lt;/div&gt; &lt;div style="FONT-SIZE: 9pt; FONT-FAMILY: monospace; BACKGROUND-COLOR: white"&gt;&amp;lt;%&lt;font color="blue"&gt;@&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="maroon"&gt;Control&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="red"&gt;Language&lt;/font&gt;&lt;font color="blue"&gt;="C#"&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="red"&gt;ClassName&lt;/font&gt;&lt;font color="blue"&gt;="Templates"&lt;/font&gt;&lt;font color="black"&gt; %&amp;gt;&lt;br /&gt;&amp;lt;%&lt;/font&gt;&lt;font color="blue"&gt;@&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="maroon"&gt;Register&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="red"&gt;Namespace&lt;/font&gt;&lt;font color="blue"&gt;="MSSamples"&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="red"&gt;TagPrefix&lt;/font&gt;&lt;font color="blue"&gt;="MS"&lt;/font&gt;&lt;font color="black"&gt; %&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt;&lt;font color="maroon"&gt;script&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="red"&gt;runat&lt;/font&gt;&lt;font color="blue"&gt;="server"&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;public&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="teal"&gt;TemplateLibrary&lt;/font&gt;&lt;font color="black"&gt; TLib&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;get&lt;/font&gt;&lt;font color="black"&gt; { &lt;/font&gt;&lt;font color="blue"&gt;return&lt;/font&gt;&lt;font color="black"&gt; TemplateLibrary1; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="maroon"&gt;script&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt;&lt;font color="maroon"&gt;MS&lt;/font&gt;&lt;font color="blue"&gt;:&lt;/font&gt;&lt;font color="maroon"&gt;TemplateLibrary&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="red"&gt;runat&lt;/font&gt;&lt;font color="blue"&gt;="server"&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="red"&gt;ID&lt;/font&gt;&lt;font color="blue"&gt;="TemplateLibrary1"&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt;&lt;font color="maroon"&gt;MS&lt;/font&gt;&lt;font color="blue"&gt;:&lt;/font&gt;&lt;font color="maroon"&gt;TemplateItem&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="red"&gt;Name&lt;/font&gt;&lt;font color="blue"&gt;="greenTemplate"&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt;&lt;font color="maroon"&gt;Template&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt;&lt;font color="maroon"&gt;div&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="red"&gt;style&lt;/font&gt;&lt;font color="blue"&gt;="background-color:Green"&amp;gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;lt;%&lt;/font&gt;&lt;font color="blue"&gt;#&lt;/font&gt;&lt;font color="black"&gt; Eval(&lt;/font&gt;&lt;font color="maroon"&gt;"Text"&lt;/font&gt;&lt;font color="black"&gt;) %&amp;gt;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="maroon"&gt;div&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="maroon"&gt;Template&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="maroon"&gt;MS&lt;/font&gt;&lt;font color="blue"&gt;:&lt;/font&gt;&lt;font color="maroon"&gt;TemplateItem&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt;&lt;font color="maroon"&gt;MS&lt;/font&gt;&lt;font color="blue"&gt;:&lt;/font&gt;&lt;font color="maroon"&gt;TemplateItem&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="red"&gt;Name&lt;/font&gt;&lt;font color="blue"&gt;="yellowTemplate"&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt;&lt;font color="maroon"&gt;Template&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt;&lt;font color="maroon"&gt;div&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="red"&gt;style&lt;/font&gt;&lt;font color="blue"&gt;="background-color:Yellow"&amp;gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;lt;%&lt;/font&gt;&lt;font color="blue"&gt;#&lt;/font&gt;&lt;font color="black"&gt; Eval(&lt;/font&gt;&lt;font color="maroon"&gt;"Text"&lt;/font&gt;&lt;font color="black"&gt;) %&amp;gt;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="maroon"&gt;div&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="maroon"&gt;Template&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="maroon"&gt;MS&lt;/font&gt;&lt;font color="blue"&gt;:&lt;/font&gt;&lt;font color="maroon"&gt;TemplateItem&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt;&lt;font color="maroon"&gt;MS&lt;/font&gt;&lt;font color="blue"&gt;:&lt;/font&gt;&lt;font color="maroon"&gt;TemplateItem&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="red"&gt;Name&lt;/font&gt;&lt;font color="blue"&gt;="redTemplate"&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt;&lt;font color="maroon"&gt;Template&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt;&lt;font color="maroon"&gt;div&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="red"&gt;style&lt;/font&gt;&lt;font color="blue"&gt;="background-color:Red"&amp;gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;lt;%&lt;/font&gt;&lt;font color="blue"&gt;#&lt;/font&gt;&lt;font color="black"&gt; Eval(&lt;/font&gt;&lt;font color="maroon"&gt;"Text"&lt;/font&gt;&lt;font color="black"&gt;) %&amp;gt;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="maroon"&gt;div&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="maroon"&gt;Template&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="maroon"&gt;MS&lt;/font&gt;&lt;font color="blue"&gt;:&lt;/font&gt;&lt;font color="maroon"&gt;TemplateItem&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="maroon"&gt;MS&lt;/font&gt;&lt;font color="blue"&gt;:&lt;/font&gt;&lt;font color="maroon"&gt;TemplateLibrary&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&lt;/font&gt; &lt;/div&gt; &lt;div style="FONT-SIZE: 9pt; FONT-FAMILY: monospace; BACKGROUND-COLOR: white"&gt;&amp;nbsp;&lt;/div&gt; &lt;div style="FONT-SIZE: 9pt; FONT-FAMILY: monospace; BACKGROUND-COLOR: white"&gt;&amp;nbsp;&lt;/div&gt; &lt;div style="FONT-SIZE: 9pt; FONT-FAMILY: monospace; BACKGROUND-COLOR: white"&gt;&lt;strong&gt;&lt;font size="3"&gt;MyPage.aspx&lt;/font&gt;&lt;/strong&gt;&lt;/div&gt; &lt;div style="FONT-SIZE: 9pt; FONT-FAMILY: monospace; BACKGROUND-COLOR: white"&gt;&lt;strong&gt;&lt;font size="4"&gt;&lt;/font&gt;&lt;/strong&gt;&amp;nbsp;&lt;/div&gt; &lt;div style="FONT-SIZE: 9pt; FONT-FAMILY: monospace; BACKGROUND-COLOR: white"&gt;&amp;lt;%&lt;font color="blue"&gt;@&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="maroon"&gt;Page&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="red"&gt;Language&lt;/font&gt;&lt;font color="blue"&gt;="C#"&lt;/font&gt;&lt;font color="black"&gt; %&amp;gt;&lt;br /&gt;&amp;lt;%&lt;/font&gt;&lt;font color="blue"&gt;@&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="maroon"&gt;Import&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="red"&gt;Namespace&lt;/font&gt;&lt;font color="blue"&gt;="MSSamples"&lt;/font&gt;&lt;font color="black"&gt; %&amp;gt;&lt;br /&gt;&amp;lt;%&lt;/font&gt;&lt;font color="blue"&gt;@&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="maroon"&gt;Register&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="red"&gt;Src&lt;/font&gt;&lt;font color="blue"&gt;="Templates.ascx"&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="red"&gt;TagName&lt;/font&gt;&lt;font color="blue"&gt;="Templates"&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="red"&gt;TagPrefix&lt;/font&gt;&lt;font color="blue"&gt;="uc1"&lt;/font&gt;&lt;font color="black"&gt; %&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;!&lt;/font&gt;&lt;font color="maroon"&gt;DOCTYPE&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="red"&gt;html&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="red"&gt;PUBLIC&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;"-//W3C//DTD XHTML 1.0 Transitional//EN"&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;&lt;/font&gt;&lt;font color="maroon"&gt;script&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="red"&gt;runat&lt;/font&gt;&lt;font color="blue"&gt;="server"&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;protected&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;void&lt;/font&gt;&lt;font color="black"&gt; Page_Load(&lt;/font&gt;&lt;font color="blue"&gt;object&lt;/font&gt;&lt;font color="black"&gt; sender, &lt;/font&gt;&lt;font color="teal"&gt;EventArgs&lt;/font&gt;&lt;font color="black"&gt; e)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;foreach&lt;/font&gt;&lt;font color="black"&gt;( &lt;/font&gt;&lt;font color="teal"&gt;TemplateItem&lt;/font&gt;&lt;font color="black"&gt; ti &lt;/font&gt;&lt;font color="blue"&gt;in&lt;/font&gt;&lt;font color="black"&gt; Templates1.TLib.Templates )&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="teal"&gt;Menu&lt;/font&gt;&lt;font color="black"&gt; m1 = &lt;/font&gt;&lt;font color="blue"&gt;new&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="teal"&gt;Menu&lt;/font&gt;&lt;font color="black"&gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;m1.Items.Add(&lt;/font&gt;&lt;font color="blue"&gt;new&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="teal"&gt;MenuItem&lt;/font&gt;&lt;font color="black"&gt;(&lt;/font&gt;&lt;font color="maroon"&gt;"Item One"&lt;/font&gt;&lt;font color="black"&gt;));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;m1.Items.Add(&lt;/font&gt;&lt;font color="blue"&gt;new&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="teal"&gt;MenuItem&lt;/font&gt;&lt;font color="black"&gt;(&lt;/font&gt;&lt;font color="maroon"&gt;"Item Two"&lt;/font&gt;&lt;font color="black"&gt;));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;m1.StaticItemTemplate = ti;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;form1.Controls.Add(m1);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="maroon"&gt;script&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;&lt;/font&gt;&lt;font color="maroon"&gt;html&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="red"&gt;xmlns&lt;/font&gt;&lt;font color="blue"&gt;="http://www.w3.org/1999/xhtml"&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&lt;br /&gt;&amp;lt;&lt;/font&gt;&lt;font color="maroon"&gt;head&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="red"&gt;runat&lt;/font&gt;&lt;font color="blue"&gt;="server"&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt;&lt;font color="maroon"&gt;title&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&lt;/font&gt;&lt;font color="black"&gt;Untitled Page&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="maroon"&gt;title&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&lt;br /&gt;&amp;lt;/&lt;/font&gt;&lt;font color="maroon"&gt;head&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&lt;br /&gt;&amp;lt;&lt;/font&gt;&lt;font color="maroon"&gt;body&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt;&lt;font color="maroon"&gt;form&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="red"&gt;id&lt;/font&gt;&lt;font color="blue"&gt;="form1"&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="red"&gt;runat&lt;/font&gt;&lt;font color="blue"&gt;="server"&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt;&lt;font color="maroon"&gt;div&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt;&lt;font color="maroon"&gt;uc1&lt;/font&gt;&lt;font color="blue"&gt;:&lt;/font&gt;&lt;font color="maroon"&gt;Templates&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="red"&gt;id&lt;/font&gt;&lt;font color="blue"&gt;="Templates1"&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="red"&gt;runat&lt;/font&gt;&lt;font color="blue"&gt;="server"&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="maroon"&gt;uc1&lt;/font&gt;&lt;font color="blue"&gt;:&lt;/font&gt;&lt;font color="maroon"&gt;Templates&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="maroon"&gt;div&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="maroon"&gt;form&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&lt;br /&gt;&amp;lt;/&lt;/font&gt;&lt;font color="maroon"&gt;body&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&lt;br /&gt;&amp;lt;/&lt;/font&gt;&lt;font color="maroon"&gt;html&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&lt;/font&gt; &lt;/div&gt; &lt;div style="FONT-SIZE: 9pt; FONT-FAMILY: monospace; BACKGROUND-COLOR: white"&gt;&amp;nbsp;&lt;/div&gt; &lt;div style="FONT-SIZE: 9pt; FONT-FAMILY: monospace; BACKGROUND-COLOR: white"&gt;&lt;strong&gt;&lt;font size="3"&gt;Output:&lt;/font&gt;&lt;/strong&gt;&lt;/div&gt; &lt;div style="FONT-SIZE: 9pt; FONT-FAMILY: monospace; BACKGROUND-COLOR: white"&gt;&lt;img src="http://dannychen.members.winisp.net/blog/2006_01_27/20060127_2.jpg" /&gt;&lt;/div&gt; &lt;div style="FONT-SIZE: 9pt; FONT-FAMILY: monospace; BACKGROUND-COLOR: white"&gt;&amp;nbsp;&lt;/div&gt; &lt;div style="FONT-SIZE: 9pt; FONT-FAMILY: monospace; BACKGROUND-COLOR: white"&gt;EDIT: One subtle note that I don't really mention in the article.&amp;nbsp; A large portion of DataBinding happens through reflection.&amp;nbsp; This really lets the Templates in the "library" maintain their ability to databind even though the container and data object isn't yet known.&amp;nbsp; This is cool because if&amp;nbsp;two data objects happen to have the same property name, the same template could be used for either one.&amp;nbsp;&amp;nbsp;I did&amp;nbsp;assume that the container would be&amp;nbsp;an IDataItemContainer,&amp;nbsp;and that seems to work pretty well.&amp;nbsp; &lt;/div&gt; &lt;p&gt;&lt;A href="http://weblogs.asp.net/dannychen/articles/436700.aspx"&gt;Link to C# code listing&lt;/a&gt;&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=436714" width="1" height="1"&gt;</description></item><item><title>Customizing TreeNodes with RenderPreText and RenderPostText</title><link>http://weblogs.asp.net/dannychen/archive/2006/01/25/436454.aspx</link><pubDate>Wed, 25 Jan 2006 18:50:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:436454</guid><dc:creator>dannychen</dc:creator><slash:comments>12</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/dannychen/rsscomments.aspx?PostID=436454</wfw:commentRss><comments>http://weblogs.asp.net/dannychen/archive/2006/01/25/436454.aspx#comments</comments><description>&lt;p&gt;Most of the ASP.NET 2.0 controls provide ways for the users to customize the look at feel of the output.&amp;nbsp; Some controls such as the Button have relatively little that can be&amp;nbsp;customized while controls such as the DataList or Repeater allow the user nearly complete control over the rendering.&amp;nbsp; In some cases&amp;nbsp;such as a Label&amp;nbsp;this is presented through a series of properties that the user can set and in other cases, like Menu,&amp;nbsp;this is done through templating.&amp;nbsp; &lt;/p&gt; &lt;p&gt;The TreeView offers a rather unique version.&amp;nbsp; The TreeNode object can be extended and used in place of the frameworks TreeNode.&amp;nbsp; In the object, two hooks are exposed that allow the developer to inject their own custom content.&amp;nbsp; These hooks are called "RenderPreText" and "RenderPostText".&amp;nbsp; They are enabled by creating an object which inherits from TreeNode and overriding these virtual functions.&amp;nbsp; Because they are virtual, the base TreeNode class will always call into the function defined in the subclass.&lt;/p&gt; &lt;p&gt;Here's a basic example that is pretty straight forward.&amp;nbsp; A bit of text is emitted from each handler to demonstrate their effect:&lt;/p&gt; &lt;table&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td valign="top" width="50%"&gt; &lt;div style="FONT-SIZE: 9pt; FONT-FAMILY: monospace; BACKGROUND-COLOR: white"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="green"&gt;// Basic overriding of the Pre/Post Text methods&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="green"&gt;// This is the simplist form that enables a developer to&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="green"&gt;// add custom content to the rendering of the TreeNode&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;public&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;class&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="teal"&gt;CustomTreeNode&lt;/font&gt;&lt;font color="black"&gt; : &lt;/font&gt;&lt;font color="teal"&gt;TreeNode&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;protected&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;override&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;void&lt;/font&gt;&lt;font color="black"&gt; RenderPreText(&lt;/font&gt;&lt;font color="teal"&gt;HtmlTextWriter&lt;/font&gt;&lt;font color="black"&gt; writer)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;writer.Write(&lt;/font&gt;&lt;font color="maroon"&gt;" PRE TEXT "&lt;/font&gt;&lt;font color="black"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;base&lt;/font&gt;&lt;font color="black"&gt;.RenderPreText(writer);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;protected&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;override&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;void&lt;/font&gt;&lt;font color="black"&gt; RenderPostText(&lt;/font&gt;&lt;font color="teal"&gt;HtmlTextWriter&lt;/font&gt;&lt;font color="black"&gt; writer)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;writer.Write(&lt;/font&gt;&lt;font color="maroon"&gt;" POST TEXT "&lt;/font&gt;&lt;font color="black"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;base&lt;/font&gt;&lt;font color="black"&gt;.RenderPostText(writer);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/font&gt; &lt;/div&gt;&lt;/td&gt; &lt;td valign="top" width="50%"&gt; &lt;div style="FONT-SIZE: 9pt; FONT-FAMILY: monospace; BACKGROUND-COLOR: white"&gt;&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt;&lt;font color="maroon"&gt;asp&lt;/font&gt;&lt;font color="blue"&gt;:&lt;/font&gt;&lt;font color="maroon"&gt;TreeView&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="red"&gt;ID&lt;/font&gt;&lt;font color="blue"&gt;="TreeView1"&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="red"&gt;runat&lt;/font&gt;&lt;font color="blue"&gt;="server"&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt;&lt;font color="maroon"&gt;Nodes&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt;&lt;font color="maroon"&gt;My&lt;/font&gt;&lt;font color="blue"&gt;:&lt;/font&gt;&lt;font color="maroon"&gt;CustomTreeNode&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="red"&gt;Text&lt;/font&gt;&lt;font color="blue"&gt;="Node A"&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;/div&gt; &lt;div style="FONT-SIZE: 9pt; FONT-FAMILY: monospace; BACKGROUND-COLOR: white"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="red"&gt;Value&lt;/font&gt;&lt;font color="blue"&gt;="Node A"&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt;&lt;font color="maroon"&gt;My&lt;/font&gt;&lt;font color="blue"&gt;:&lt;/font&gt;&lt;font color="maroon"&gt;CustomTreeNode&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="red"&gt;Text&lt;/font&gt;&lt;font color="blue"&gt;="Node B"&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;/div&gt; &lt;div style="FONT-SIZE: 9pt; FONT-FAMILY: monospace; BACKGROUND-COLOR: white"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="red"&gt;Value&lt;/font&gt;&lt;font color="blue"&gt;="Node B"&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="maroon"&gt;My&lt;/font&gt;&lt;font color="blue"&gt;:&lt;/font&gt;&lt;font color="maroon"&gt;CustomTreeNode&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="maroon"&gt;My&lt;/font&gt;&lt;font color="blue"&gt;:&lt;/font&gt;&lt;font color="maroon"&gt;CustomTreeNode&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="maroon"&gt;Nodes&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="maroon"&gt;asp&lt;/font&gt;&lt;font color="blue"&gt;:&lt;/font&gt;&lt;font color="maroon"&gt;TreeView&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&lt;/font&gt; &lt;/div&gt; &lt;div style="FONT-SIZE: 9pt; FONT-FAMILY: monospace; BACKGROUND-COLOR: white"&gt;&amp;nbsp;&lt;/div&gt; &lt;div style="FONT-SIZE: 9pt; FONT-FAMILY: monospace; BACKGROUND-COLOR: white"&gt;&amp;nbsp;&lt;/div&gt;&lt;br /&gt;&lt;img src="http://dannychen.members.winisp.net/blog/2006_01_25/20060125_1.jpg" /&gt; &lt;/img&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt; &lt;p&gt;You might imagine that there is a lot that can be accomplished through these methods.&amp;nbsp; Here are a couple examples I put together to demonstrate some various things that can be done:&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Setting a per-node background image:&lt;/strong&gt;&lt;/p&gt; &lt;table&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td valign="top" width="50%"&gt; &lt;div style="FONT-SIZE: 9pt; FONT-FAMILY: monospace; BACKGROUND-COLOR: white"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="green"&gt;// BG images for TreeNodes&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="green"&gt;// This version adds two features.&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="green"&gt;// 1) it adds a specific property whose value is consumed&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="green"&gt;// 2) it injects an additional control (&amp;lt;div&amp;gt;) into the rendering&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;public&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;class&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="teal"&gt;BGTreeNode&lt;/font&gt;&lt;font color="black"&gt; : &lt;/font&gt;&lt;font color="teal"&gt;TreeNode&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&lt;br /&gt; &lt;div style="FONT-SIZE: 9pt; FONT-FAMILY: monospace; BACKGROUND-COLOR: white"&gt;&lt;font color="green"&gt; &lt;div style="FONT-SIZE: 9pt; FONT-FAMILY: monospace; BACKGROUND-COLOR: white"&gt;&lt;font color="green"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// This constructors is needed if a custom TreeView&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&lt;/font&gt;&lt;font color="green"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // instantiates this in CreateNode&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&lt;/font&gt;&lt;font color="blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public&lt;/font&gt;&lt;font color="black"&gt; BGTreeNode() : &lt;/font&gt;&lt;font color="blue"&gt;base&lt;/font&gt;&lt;font color="black"&gt;() { }&lt;br /&gt;&lt;/font&gt;&lt;font color="blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public&lt;/font&gt;&lt;font color="black"&gt; BGTreeNode(&lt;/font&gt;&lt;font color="teal"&gt;TreeView&lt;/font&gt;&lt;font color="black"&gt; owner, &lt;/font&gt;&lt;font color="blue"&gt;bool&lt;/font&gt;&lt;font color="black"&gt; isRoot) : &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;base&lt;/font&gt;&lt;font color="black"&gt;(owner, isRoot) { }&lt;br /&gt;&lt;/font&gt;&lt;/div&gt;&lt;/font&gt;&lt;font color="black"&gt;&lt;br /&gt;&lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;private&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;string&lt;/font&gt;&lt;font color="black"&gt; _bgImageUrl;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;public&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;string&lt;/font&gt;&lt;font color="black"&gt; BackGroundImageUrl&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;get&lt;/font&gt;&lt;font color="black"&gt; { &lt;/font&gt;&lt;font color="blue"&gt;return&lt;/font&gt;&lt;font color="black"&gt; _bgImageUrl;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;set&lt;/font&gt;&lt;font color="black"&gt; { _bgImageUrl = &lt;/font&gt;&lt;font color="blue"&gt;value&lt;/font&gt;&lt;font color="black"&gt;; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;protected&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;override&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;void&lt;/font&gt;&lt;font color="black"&gt; RenderPreText(&lt;/font&gt;&lt;font color="teal"&gt;HtmlTextWriter&lt;/font&gt;&lt;font color="black"&gt; writer)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;writer.AddStyleAttribute( &lt;/font&gt;&lt;/div&gt;&lt;/div&gt; &lt;div style="FONT-SIZE: 9pt; FONT-FAMILY: monospace; BACKGROUND-COLOR: white"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="teal"&gt;HtmlTextWriterStyle&lt;/font&gt;&lt;font color="black"&gt;.BackgroundImage, &lt;/font&gt;&lt;/div&gt; &lt;div style="FONT-SIZE: 9pt; FONT-FAMILY: monospace; BACKGROUND-COLOR: white"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="maroon"&gt;"url('"&lt;/font&gt;&lt;font color="black"&gt; + BackGroundImageUrl + &lt;/font&gt;&lt;font color="maroon"&gt;"')"&lt;/font&gt;&lt;font color="black"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="green"&gt;//writer.AddStyleAttribute( &lt;/font&gt;&lt;/div&gt; &lt;div style="FONT-SIZE: 9pt; FONT-FAMILY: monospace; BACKGROUND-COLOR: white"&gt;&lt;font color="green"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;&amp;nbsp; HtmlTextWriterStyle.Height, "35px");&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="green"&gt;//writer.AddStyleAttribute( &lt;/font&gt;&lt;/div&gt; &lt;div style="FONT-SIZE: 9pt; FONT-FAMILY: monospace; BACKGROUND-COLOR: white"&gt;&lt;font color="green"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;&amp;nbsp; HtmlTextWriterStyle.Width, "300px");&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;writer.AddStyleAttribute( &lt;/font&gt;&lt;/div&gt; &lt;div style="FONT-SIZE: 9pt; FONT-FAMILY: monospace; BACKGROUND-COLOR: white"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="teal"&gt;HtmlTextWriterStyle&lt;/font&gt;&lt;font color="black"&gt;.TextAlign, &lt;/font&gt;&lt;/div&gt; &lt;div style="FONT-SIZE: 9pt; FONT-FAMILY: monospace; BACKGROUND-COLOR: white"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="maroon"&gt;"center"&lt;/font&gt;&lt;font color="black"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;writer.RenderBeginTag( &lt;/font&gt;&lt;font color="teal"&gt;HtmlTextWriterTag&lt;/font&gt;&lt;font color="black"&gt;.Div );&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;base&lt;/font&gt;&lt;font color="black"&gt;.RenderPreText(writer);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;protected&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;override&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;void&lt;/font&gt;&lt;font color="black"&gt; RenderPostText(&lt;/font&gt;&lt;font color="teal"&gt;HtmlTextWriter&lt;/font&gt;&lt;font color="black"&gt; writer)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;writer.RenderEndTag();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;base&lt;/font&gt;&lt;font color="black"&gt;.RenderPostText(writer);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/font&gt; &lt;/div&gt;&lt;/td&gt; &lt;td valign="top" width="50%"&gt; &lt;div style="FONT-SIZE: 9pt; FONT-FAMILY: monospace; BACKGROUND-COLOR: white"&gt;&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt;&lt;font color="maroon"&gt;asp&lt;/font&gt;&lt;font color="blue"&gt;:&lt;/font&gt;&lt;font color="maroon"&gt;TreeView&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="red"&gt;ID&lt;/font&gt;&lt;font color="blue"&gt;="TreeView2"&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="red"&gt;runat&lt;/font&gt;&lt;font color="blue"&gt;="server"&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt;&lt;font color="maroon"&gt;Nodes&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt;&lt;font color="maroon"&gt;My&lt;/font&gt;&lt;font color="blue"&gt;:&lt;/font&gt;&lt;font color="maroon"&gt;BGTreeNode&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="red"&gt;Text&lt;/font&gt;&lt;font color="blue"&gt;="Node A"&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="red"&gt;Value&lt;/font&gt;&lt;font color="blue"&gt;="A"&lt;/font&gt;&lt;/div&gt; &lt;div style="FONT-SIZE: 9pt; FONT-FAMILY: monospace; BACKGROUND-COLOR: white"&gt;&lt;font color="#0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&lt;/font&gt;&lt;font color="red"&gt;BackgroundImageUrl&lt;/font&gt;&lt;font color="blue"&gt;="bg2.jpg"&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt;&lt;font color="maroon"&gt;My&lt;/font&gt;&lt;font color="blue"&gt;:&lt;/font&gt;&lt;font color="maroon"&gt;BGTreeNode&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="red"&gt;Text&lt;/font&gt;&lt;font color="blue"&gt;="Node B"&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="red"&gt;Value&lt;/font&gt;&lt;font color="blue"&gt;="B"&lt;/font&gt;&lt;/div&gt; &lt;div style="FONT-SIZE: 9pt; FONT-FAMILY: monospace; BACKGROUND-COLOR: white"&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font color="red"&gt;BackgroundImageUrl&lt;/font&gt;&lt;font color="blue"&gt;="bg3.jpg"&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="maroon"&gt;My&lt;/font&gt;&lt;font color="blue"&gt;:&lt;/font&gt;&lt;font color="maroon"&gt;BGTreeNode&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="maroon"&gt;My&lt;/font&gt;&lt;font color="blue"&gt;:&lt;/font&gt;&lt;font color="maroon"&gt;BGTreeNode&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="maroon"&gt;Nodes&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="maroon"&gt;asp&lt;/font&gt;&lt;font color="blue"&gt;:&lt;/font&gt;&lt;font color="maroon"&gt;TreeView&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&lt;/font&gt; &lt;/div&gt;&lt;img src="http://dannychen.members.winisp.net/blog/2006_01_25/20060125_2.jpg" /&gt; &lt;/img&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt; &lt;p&gt;&lt;strong&gt;Creating individual TreeNode CSS styles:&lt;/strong&gt;&lt;/p&gt; &lt;table&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td valign="top" width="50%"&gt; &lt;div style="FONT-SIZE: 9pt; FONT-FAMILY: monospace; BACKGROUND-COLOR: white"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="green"&gt;// CssClasses per TreeNode&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="green"&gt;// This is a more general form of the &lt;/font&gt;&lt;/div&gt; &lt;div style="FONT-SIZE: 9pt; FONT-FAMILY: monospace; BACKGROUND-COLOR: white"&gt;&lt;font color="green"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // background image treeNode.&amp;nbsp;&amp;nbsp;This would enable&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="green"&gt;// invidividual customization of TreeNodes&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;public&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;class&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="teal"&gt;CSSTreeNode&lt;/font&gt;&lt;font color="black"&gt; : &lt;/font&gt;&lt;font color="teal"&gt;TreeNode&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&lt;br /&gt;&lt;/div&gt; &lt;div style="FONT-SIZE: 9pt; FONT-FAMILY: monospace; BACKGROUND-COLOR: white"&gt;&lt;font color="green"&gt; &lt;div style="FONT-SIZE: 9pt; FONT-FAMILY: monospace; BACKGROUND-COLOR: white"&gt;&lt;font color="green"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// This constructors is needed if a custom TreeView&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&lt;/font&gt;&lt;font color="green"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // instantiates this in CreateNode&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&lt;/font&gt;&lt;font color="blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public&lt;/font&gt;&lt;font color="black"&gt; CSSTreeNode() : &lt;/font&gt;&lt;font color="blue"&gt;base&lt;/font&gt;&lt;font color="black"&gt;() { }&lt;br /&gt;&lt;/font&gt;&lt;font color="blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public&lt;/font&gt;&lt;font color="black"&gt; CSSTreeNode(&lt;/font&gt;&lt;font color="teal"&gt;TreeView&lt;/font&gt;&lt;font color="black"&gt; owner, &lt;/font&gt;&lt;font color="blue"&gt;bool&lt;/font&gt;&lt;font color="black"&gt; isRoot) : &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;base&lt;/font&gt;&lt;font color="black"&gt;(owner, isRoot) { }&lt;br /&gt;&lt;/font&gt;&lt;/div&gt;&lt;/font&gt;&lt;font color="black"&gt;&lt;br /&gt;&amp;nbsp;&lt;/div&gt; &lt;div style="FONT-SIZE: 9pt; FONT-FAMILY: monospace; BACKGROUND-COLOR: white"&gt;&lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;private&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;string&lt;/font&gt;&lt;font color="black"&gt; _cssClass;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;public&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;string&lt;/font&gt;&lt;font color="black"&gt; CssClass&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;get&lt;/font&gt;&lt;font color="black"&gt; { &lt;/font&gt;&lt;font color="blue"&gt;return&lt;/font&gt;&lt;font color="black"&gt; _cssClass; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;set&lt;/font&gt;&lt;font color="black"&gt; { _cssClass = &lt;/font&gt;&lt;font color="blue"&gt;value&lt;/font&gt;&lt;font color="black"&gt;; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;protected&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;override&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;void&lt;/font&gt;&lt;font color="black"&gt; RenderPreText(&lt;/font&gt;&lt;font color="teal"&gt;HtmlTextWriter&lt;/font&gt;&lt;font color="black"&gt; writer)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;writer.AddAttribute( &lt;/font&gt;&lt;/div&gt; &lt;div style="FONT-SIZE: 9pt; FONT-FAMILY: monospace; BACKGROUND-COLOR: white"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="teal"&gt;HtmlTextWriterAttribute&lt;/font&gt;&lt;font color="black"&gt;.Class, CssClass);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;writer.RenderBeginTag(&lt;/font&gt;&lt;font color="teal"&gt;HtmlTextWriterTag&lt;/font&gt;&lt;font color="black"&gt;.Div);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;base&lt;/font&gt;&lt;font color="black"&gt;.RenderPreText(writer);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;protected&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;override&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;void&lt;/font&gt;&lt;font color="black"&gt; RenderPostText(&lt;/font&gt;&lt;font color="teal"&gt;HtmlTextWriter&lt;/font&gt;&lt;font color="black"&gt; writer)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;writer.RenderEndTag();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;base&lt;/font&gt;&lt;font color="black"&gt;.RenderPostText(writer);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/font&gt; &lt;/div&gt;&lt;/td&gt; &lt;td valign="top" width="50%"&gt; &lt;div style="FONT-SIZE: 9pt; FONT-FAMILY: monospace; BACKGROUND-COLOR: white"&gt;&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt;&lt;font color="maroon"&gt;asp&lt;/font&gt;&lt;font color="blue"&gt;:&lt;/font&gt;&lt;font color="maroon"&gt;TreeView&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="red"&gt;ID&lt;/font&gt;&lt;font color="blue"&gt;="TreeView3"&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="red"&gt;runat&lt;/font&gt;&lt;font color="blue"&gt;="server"&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt;&lt;font color="maroon"&gt;Nodes&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt;&lt;font color="maroon"&gt;My&lt;/font&gt;&lt;font color="blue"&gt;:&lt;/font&gt;&lt;font color="maroon"&gt;CssTreeNode&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="red"&gt;Text&lt;/font&gt;&lt;font color="blue"&gt;="Node A"&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="red"&gt;Value&lt;/font&gt;&lt;font color="blue"&gt;="Node A"&lt;/font&gt;&lt;/div&gt; &lt;div style="FONT-SIZE: 9pt; FONT-FAMILY: monospace; BACKGROUND-COLOR: white"&gt;&lt;font color="#0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&lt;/font&gt;&lt;font color="red"&gt;CssClass&lt;/font&gt;&lt;font color="blue"&gt;="nodea"&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt;&lt;font color="maroon"&gt;My&lt;/font&gt;&lt;font color="blue"&gt;:&lt;/font&gt;&lt;font color="maroon"&gt;CssTreeNode&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="red"&gt;Text&lt;/font&gt;&lt;font color="blue"&gt;="Node B"&lt;/font&gt;&lt;font color="black"&gt;&lt;/font&gt;&lt;font color="red"&gt;&amp;nbsp; Value&lt;/font&gt;&lt;font color="blue"&gt;="Node B"&lt;/font&gt;&lt;/div&gt; &lt;div style="FONT-SIZE: 9pt; FONT-FAMILY: monospace; BACKGROUND-COLOR: white"&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/font&gt;&lt;font color="red"&gt;CssClass&lt;/font&gt;&lt;font color="blue"&gt;="nodeb"&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="maroon"&gt;My&lt;/font&gt;&lt;font color="blue"&gt;:&lt;/font&gt;&lt;font color="maroon"&gt;CssTreeNode&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="maroon"&gt;My&lt;/font&gt;&lt;font color="blue"&gt;:&lt;/font&gt;&lt;font color="maroon"&gt;CssTreeNode&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="maroon"&gt;Nodes&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="maroon"&gt;asp&lt;/font&gt;&lt;font color="blue"&gt;:&lt;/font&gt;&lt;font color="maroon"&gt;TreeView&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&lt;/font&gt; &lt;/div&gt;&lt;br /&gt;&lt;img src="http://dannychen.members.winisp.net/blog/2006_01_25/20060125_3.jpg" /&gt; &lt;/img&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt; &lt;p&gt;&lt;strong&gt;And the&amp;nbsp;ultimate - Templating the PreText/PostText content&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Update:&amp;nbsp; One issue I found when using this was that the template needs to be repeatedly assigned.&amp;nbsp; If you need any kind of reuse, there's a follow up technique:&amp;nbsp;&lt;A href="http://weblogs.asp.net/dannychen/archive/2006/01/27/436714.aspx"&gt;http://weblogs.asp.net/dannychen/archive/2006/01/27/436714.aspx&lt;/a&gt;&lt;/p&gt; &lt;table&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td valign="top" width="50%"&gt; &lt;div style="FONT-SIZE: 9pt; FONT-FAMILY: monospace; BACKGROUND-COLOR: white"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="green"&gt;// Templated PreText and PostText of a TreeNode&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="green"&gt;// This enables individual TreeNodes to be able to Template some of their contents.&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="green"&gt;// Done this way, it is a per-node basis meaning that each node that is to be templated&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="green"&gt;// would need the markup for the template it it's declaration.&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[&lt;/font&gt;&lt;font color="teal"&gt;ParseChildren&lt;/font&gt;&lt;font color="black"&gt;(&lt;/font&gt;&lt;font color="blue"&gt;false&lt;/font&gt;&lt;font color="black"&gt;)]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;public&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;class&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="teal"&gt;TemplatedTreeNode&lt;/font&gt;&lt;font color="black"&gt; : &lt;/font&gt;&lt;font color="teal"&gt;TreeNode&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&lt;br /&gt; &lt;div style="FONT-SIZE: 9pt; FONT-FAMILY: monospace; BACKGROUND-COLOR: white"&gt;&lt;font color="green"&gt; &lt;div style="FONT-SIZE: 9pt; FONT-FAMILY: monospace; BACKGROUND-COLOR: white"&gt;&lt;font color="green"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// This constructors is needed if a custom TreeView&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&lt;/font&gt;&lt;font color="green"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // instantiates this in CreateNode&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&lt;/font&gt;&lt;font color="blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public&lt;/font&gt;&lt;font color="black"&gt; TemplatedTreeNode() : &lt;/font&gt;&lt;font color="blue"&gt;base&lt;/font&gt;&lt;font color="black"&gt;() { }&lt;br /&gt;&lt;/font&gt;&lt;font color="blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public&lt;/font&gt;&lt;font color="black"&gt; TemplatedTreeNode(&lt;/font&gt;&lt;font color="teal"&gt;TreeView&lt;/font&gt;&lt;font color="black"&gt; owner, &lt;/font&gt;&lt;font color="blue"&gt;bool&lt;/font&gt;&lt;font color="black"&gt; isRoot) : &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;base&lt;/font&gt;&lt;font color="black"&gt;(owner, isRoot) { }&lt;br /&gt;&lt;/font&gt;&lt;/div&gt;&lt;/font&gt;&lt;font color="black"&gt;&lt;br /&gt;&lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;private&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="teal"&gt;ITemplate&lt;/font&gt;&lt;font color="black"&gt; _preTextTemplate;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[&lt;/font&gt;&lt;font color="teal"&gt;PersistenceMode&lt;/font&gt;&lt;font color="black"&gt;(&lt;/font&gt;&lt;font color="teal"&gt;PersistenceMode&lt;/font&gt;&lt;font color="black"&gt;.InnerProperty),&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font color="teal"&gt;TemplateContainer&lt;/font&gt;&lt;font color="black"&gt;(&lt;/font&gt;&lt;font color="blue"&gt;typeof&lt;/font&gt;&lt;font color="black"&gt;(&lt;/font&gt;&lt;font color="teal"&gt;TreeNodeTemplateContainer&lt;/font&gt;&lt;font color="black"&gt;))]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;public&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="teal"&gt;ITemplate&lt;/font&gt;&lt;font color="black"&gt; PreTextTemplate&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;get&lt;/font&gt;&lt;font color="black"&gt; { &lt;/font&gt;&lt;font color="blue"&gt;return&lt;/font&gt;&lt;font color="black"&gt; _preTextTemplate; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;set&lt;/font&gt;&lt;font color="black"&gt; { _preTextTemplate = &lt;/font&gt;&lt;font color="blue"&gt;value&lt;/font&gt;&lt;font color="black"&gt;; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;private&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="teal"&gt;ITemplate&lt;/font&gt;&lt;font color="black"&gt; _postTextTemplate;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[&lt;/font&gt;&lt;font color="teal"&gt;PersistenceMode&lt;/font&gt;&lt;font color="black"&gt;(&lt;/font&gt;&lt;font color="teal"&gt;PersistenceMode&lt;/font&gt;&lt;font color="black"&gt;.InnerProperty),&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font color="teal"&gt;TemplateContainer&lt;/font&gt;&lt;font color="black"&gt;(&lt;/font&gt;&lt;font color="blue"&gt;typeof&lt;/font&gt;&lt;font color="black"&gt;(&lt;/font&gt;&lt;font color="teal"&gt;TreeNodeTemplateContainer&lt;/font&gt;&lt;font color="black"&gt;))]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;public&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="teal"&gt;ITemplate&lt;/font&gt;&lt;font color="black"&gt; PostTextTemplate&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;get&lt;/font&gt;&lt;font color="black"&gt; { &lt;/font&gt;&lt;font color="blue"&gt;return&lt;/font&gt;&lt;font color="black"&gt; _postTextTemplate; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;set&lt;/font&gt;&lt;font color="black"&gt; { _postTextTemplate = &lt;/font&gt;&lt;font color="blue"&gt;value&lt;/font&gt;&lt;font color="black"&gt;; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;protected&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;override&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;void&lt;/font&gt;&lt;font color="black"&gt; RenderPreText(&lt;/font&gt;&lt;font color="teal"&gt;HtmlTextWriter&lt;/font&gt;&lt;font color="black"&gt; writer)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;if&lt;/font&gt;&lt;font color="black"&gt; (PreTextTemplate != &lt;/font&gt;&lt;font color="blue"&gt;null&lt;/font&gt;&lt;font color="black"&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="teal"&gt;TreeNodeTemplateContainer&lt;/font&gt;&lt;font color="black"&gt; container = &lt;/font&gt;&lt;/div&gt;&lt;/div&gt; &lt;div style="FONT-SIZE: 9pt; FONT-FAMILY: monospace; BACKGROUND-COLOR: white"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;new&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="teal"&gt;TreeNodeTemplateContainer&lt;/font&gt;&lt;font color="black"&gt;(&lt;/font&gt;&lt;font color="blue"&gt;this&lt;/font&gt;&lt;font color="black"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;PreTextTemplate.InstantiateIn(container);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;container.DataBind();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;container.RenderControl(writer);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;base&lt;/font&gt;&lt;font color="black"&gt;.RenderPreText(writer);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;protected&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;override&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;void&lt;/font&gt;&lt;font color="black"&gt; RenderPostText(&lt;/font&gt;&lt;font color="teal"&gt;HtmlTextWriter&lt;/font&gt;&lt;font color="black"&gt; writer)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;if&lt;/font&gt;&lt;font color="black"&gt; (PostTextTemplate != &lt;/font&gt;&lt;font color="blue"&gt;null&lt;/font&gt;&lt;font color="black"&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="teal"&gt;TreeNodeTemplateContainer&lt;/font&gt;&lt;font color="black"&gt; container = &lt;/font&gt;&lt;/div&gt; &lt;div style="FONT-SIZE: 9pt; FONT-FAMILY: monospace; BACKGROUND-COLOR: white"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;new&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="teal"&gt;TreeNodeTemplateContainer&lt;/font&gt;&lt;font color="black"&gt;(&lt;/font&gt;&lt;font color="blue"&gt;this&lt;/font&gt;&lt;font color="black"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;PostTextTemplate.InstantiateIn(container);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;container.DataBind();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;container.RenderControl(writer);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;base&lt;/font&gt;&lt;font color="black"&gt;.RenderPostText(writer);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="green"&gt;// Template container for the TemplatedTreeNode class&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;public&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;class&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="teal"&gt;TreeNodeTemplateContainer&lt;/font&gt;&lt;font color="black"&gt; : &lt;/font&gt;&lt;font color="teal"&gt;WebControl&lt;/font&gt;&lt;font color="black"&gt;, &lt;/font&gt;&lt;font color="teal"&gt;IDataItemContainer&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;private&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="teal"&gt;TreeNode&lt;/font&gt;&lt;font color="black"&gt; _node;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;public&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="teal"&gt;TreeNode&lt;/font&gt;&lt;font color="black"&gt; Node { &lt;/font&gt;&lt;font color="blue"&gt;get&lt;/font&gt;&lt;font color="black"&gt; { &lt;/font&gt;&lt;font color="blue"&gt;return&lt;/font&gt;&lt;font color="black"&gt; _node; } }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;public&lt;/font&gt;&lt;font color="black"&gt; TreeNodeTemplateContainer(&lt;/font&gt;&lt;font color="teal"&gt;TreeNode&lt;/font&gt;&lt;font color="black"&gt; n)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;_node = n;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#region&lt;/font&gt;&lt;font color="black"&gt; IDataItemContainer Members&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;public&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;object&lt;/font&gt;&lt;font color="black"&gt; DataItem&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;get&lt;/font&gt;&lt;font color="black"&gt; { &lt;/font&gt;&lt;font color="blue"&gt;return&lt;/font&gt;&lt;font color="black"&gt; Node; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;public&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;int&lt;/font&gt;&lt;font color="black"&gt; DataItemIndex&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;get&lt;/font&gt;&lt;font color="black"&gt; { &lt;/font&gt;&lt;font color="blue"&gt;return&lt;/font&gt;&lt;font color="black"&gt; 0; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;public&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;int&lt;/font&gt;&lt;font color="black"&gt; DisplayIndex&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;get&lt;/font&gt;&lt;font color="black"&gt; { &lt;/font&gt;&lt;font color="blue"&gt;return&lt;/font&gt;&lt;font color="black"&gt; 0; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#endregion&lt;br /&gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/font&gt; &lt;/div&gt;&lt;/td&gt; &lt;td valign="top" width="50%"&gt; &lt;div style="FONT-SIZE: 9pt; FONT-FAMILY: monospace; BACKGROUND-COLOR: white"&gt;&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt;&lt;font color="maroon"&gt;asp&lt;/font&gt;&lt;font color="blue"&gt;:&lt;/font&gt;&lt;font color="maroon"&gt;TreeView&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="red"&gt;ID&lt;/font&gt;&lt;font color="blue"&gt;="TreeView4"&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="red"&gt;runat&lt;/font&gt;&lt;font color="blue"&gt;="server"&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt;&lt;font color="maroon"&gt;Nodes&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt;&lt;font color="maroon"&gt;My&lt;/font&gt;&lt;font color="blue"&gt;:&lt;/font&gt;&lt;font color="maroon"&gt;TemplatedTreeNode&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="red"&gt;Text&lt;/font&gt;&lt;font color="blue"&gt;="Node A"&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;/div&gt; &lt;div style="FONT-SIZE: 9pt; FONT-FAMILY: monospace; BACKGROUND-COLOR: white"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="red"&gt;Value&lt;/font&gt;&lt;font color="blue"&gt;="Node A"&amp;nbsp;&amp;gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt;&lt;font color="maroon"&gt;PreTextTemplate&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Text: &amp;lt;%&lt;/font&gt;&lt;font color="blue"&gt;#&lt;/font&gt;&lt;font color="black"&gt; Databinder.Eval(Container.DataItem, &lt;/font&gt;&lt;font color="maroon"&gt;"Text"&lt;/font&gt;&lt;font color="black"&gt;) %&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="maroon"&gt;PreTextTemplate&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt;&lt;font color="maroon"&gt;PostTextTemplate&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Value: &amp;lt;%&lt;/font&gt;&lt;font color="blue"&gt;#&lt;/font&gt;&lt;font color="black"&gt;DataBinder.Eval(Container.DataItem, &lt;/font&gt;&lt;font color="maroon"&gt;"Value"&lt;/font&gt;&lt;font color="black"&gt;)%&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="maroon"&gt;PostTextTemplate&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt;&lt;font color="maroon"&gt;ChildNodes&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt;&lt;font color="maroon"&gt;My&lt;/font&gt;&lt;font color="blue"&gt;:&lt;/font&gt;&lt;font color="maroon"&gt;TemplatedTreeNode&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="red"&gt;Text&lt;/font&gt;&lt;font color="blue"&gt;="Node B"&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;/div&gt; &lt;div style="FONT-SIZE: 9pt; FONT-FAMILY: monospace; BACKGROUND-COLOR: white"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="red"&gt;Value&lt;/font&gt;&lt;font color="blue"&gt;="Node B"&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="maroon"&gt;My&lt;/font&gt;&lt;font color="blue"&gt;:&lt;/font&gt;&lt;font color="maroon"&gt;TemplatedTreeNode&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="maroon"&gt;ChildNodes&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="maroon"&gt;My&lt;/font&gt;&lt;font color="blue"&gt;:&lt;/font&gt;&lt;font color="maroon"&gt;TemplatedTreeNode&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="maroon"&gt;Nodes&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="maroon"&gt;asp&lt;/font&gt;&lt;font color="blue"&gt;:&lt;/font&gt;&lt;font color="maroon"&gt;TreeView&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;/div&gt;&lt;img src="http://dannychen.members.winisp.net/blog/2006_01_25/20060125_4.jpg" /&gt; &lt;/img&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt; &lt;p&gt;There are a couple caveats of doing this.&amp;nbsp; The most obvious one you'll notice is that simplified databinding doesn't work.&amp;nbsp; Simplified databinding needs the controls to exist in the control hierarchy of the page.&amp;nbsp; Since TreeNodes aren't technically controls and don't exist in the control hierarchy of the page, they can't take advantage of simplified databinding.&amp;nbsp; However, as in my example, "old school" databinding still works.&amp;nbsp; Secondly, and less obvious, templates are normally instantiated in CreateChildControls which is much earlier in the lifecycle than Render where these templates are being instantiated.&amp;nbsp; Because of this, there are some quirks such as Databinding events for the templated controls being fired in Render instead of PreRender.&amp;nbsp;&amp;nbsp;Just be aware that these added&amp;nbsp;templates&amp;nbsp;may not&amp;nbsp;act 100% like templates that were designed into a control but they should work pretty well.&amp;nbsp;&lt;/p&gt; &lt;p&gt;Hopefully these examples will give you some ideas of what can be accomplished with Pre/Post Text.&amp;nbsp; One thing you'll quickly figure out when you try this is that you don't have much intellisense for your custom TreeNodes.&amp;nbsp; This is because intellisense is only enabled for objects in the same namespace.&amp;nbsp; Since the TreeView and the TreeNodes are in different namespaces, the intellisense hookup doesn't work.&amp;nbsp; If this is a big issue, you can create a custom TreeView in the same namespace as your custom tree nodes and use that TreeView instead.&amp;nbsp; It's not a necessity.&lt;/p&gt; &lt;p&gt;footnote:&amp;nbsp; if this wasn't enough for you, there's no reason why you couldn't mix your custom node types in the same TreeView either.....&lt;/p&gt; &lt;p&gt;EDIT:&amp;nbsp; Bertrand pointed out below that you would need a custom TreeView to utilize these custom nodes for a DataBound kind of scenario.&amp;nbsp; Heres an example of how that would work: &lt;/p&gt; &lt;div style="FONT-SIZE: 9pt; FONT-FAMILY: monospace; BACKGROUND-COLOR: white"&gt;&lt;font color="#000000"&gt;Custom TreeView Code:&lt;/font&gt;&lt;/div&gt; &lt;div style="FONT-SIZE: 9pt; FONT-FAMILY: monospace; BACKGROUND-COLOR: white"&gt;&lt;font color="#0000ff"&gt;&lt;/font&gt;&amp;nbsp;&lt;/div&gt; &lt;div style="FONT-SIZE: 9pt; FONT-FAMILY: monospace; BACKGROUND-COLOR: white"&gt;&lt;font color="blue"&gt; &lt;div style="FONT-SIZE: 9pt; FONT-FAMILY: monospace; BACKGROUND-COLOR: white"&gt;&lt;font color="blue"&gt;public&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;class&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="teal"&gt;MyTreeView&lt;/font&gt;&lt;font color="black"&gt; : &lt;/font&gt;&lt;font color="teal"&gt;TreeView&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;protected&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;override&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="teal"&gt;TreeNode&lt;/font&gt;&lt;font color="black"&gt; CreateNode()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;return&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;new&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="teal"&gt;CSSTreeNode&lt;/font&gt;&lt;font color="black"&gt;(&lt;/font&gt;&lt;font color="blue"&gt;this&lt;/font&gt;&lt;font color="black"&gt;, &lt;/font&gt;&lt;font color="blue"&gt;false&lt;/font&gt;&lt;font color="black"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;}&lt;/font&gt; &lt;/div&gt;&lt;/font&gt;&lt;/div&gt; &lt;div style="FONT-SIZE: 9pt; FONT-FAMILY: monospace; BACKGROUND-COLOR: white"&gt;&amp;nbsp;&lt;/div&gt; &lt;div style="FONT-SIZE: 9pt; FONT-FAMILY: monospace; BACKGROUND-COLOR: white"&gt;Plus Some Markup:&lt;/div&gt; &lt;div style="FONT-SIZE: 9pt; FONT-FAMILY: monospace; BACKGROUND-COLOR: white"&gt;&amp;nbsp;&lt;/div&gt; &lt;div style="FONT-SIZE: 9pt; FONT-FAMILY: monospace; BACKGROUND-COLOR: white"&gt;&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt;&lt;font color="maroon"&gt;My&lt;/font&gt;&lt;font color="blue"&gt;:&lt;/font&gt;&lt;font color="maroon"&gt;MyTreeView&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="red"&gt;runat&lt;/font&gt;&lt;font color="blue"&gt;="server"&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="red"&gt;ID&lt;/font&gt;&lt;font color="blue"&gt;="MyTreeView1"&lt;/font&gt;&lt;font color="black"&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="red"&gt;DataSourceID&lt;/font&gt;&lt;font color="blue"&gt;="SiteMapDataSource1"&lt;/font&gt;&lt;font color="black"&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="red"&gt;OnTreeNodeDataBound&lt;/font&gt;&lt;font color="blue"&gt;="MyTreeView1_TreeNodeDataBound"&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="maroon"&gt;My&lt;/font&gt;&lt;font color="blue"&gt;:&lt;/font&gt;&lt;font color="maroon"&gt;MyTreeView&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt;&lt;font color="maroon"&gt;asp&lt;/font&gt;&lt;font color="blue"&gt;:&lt;/font&gt;&lt;font color="maroon"&gt;SiteMapDataSource&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="red"&gt;ID&lt;/font&gt;&lt;font color="blue"&gt;="SiteMapDataSource1"&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="red"&gt;runat&lt;/font&gt;&lt;font color="blue"&gt;="server"&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;/&amp;gt;&lt;/font&gt; &lt;/div&gt; &lt;div style="FONT-SIZE: 9pt; FONT-FAMILY: monospace; BACKGROUND-COLOR: white"&gt;&amp;nbsp;&lt;/div&gt; &lt;div style="FONT-SIZE: 9pt; FONT-FAMILY: monospace; BACKGROUND-COLOR: white"&gt;Plus an Event Handler:&lt;/div&gt; &lt;div style="FONT-SIZE: 9pt; FONT-FAMILY: monospace; BACKGROUND-COLOR: white"&gt;&amp;nbsp;&lt;/div&gt; &lt;div style="FONT-SIZE: 9pt; FONT-FAMILY: monospace; BACKGROUND-COLOR: white"&gt; &lt;div style="FONT-SIZE: 9pt; FONT-FAMILY: monospace; BACKGROUND-COLOR: white"&gt;&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt;&lt;font color="maroon"&gt;script&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="red"&gt;runat&lt;/font&gt;&lt;font color="blue"&gt;="server"&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&lt;/font&gt;&lt;font color="blue"&gt;protected&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;void&lt;/font&gt;&lt;font color="black"&gt; MyTreeView1_TreeNodeDataBound(&lt;/font&gt;&lt;font color="blue"&gt;object&lt;/font&gt;&lt;font color="black"&gt; sender, &lt;/font&gt;&lt;font color="teal"&gt;TreeNodeEventArgs&lt;/font&gt;&lt;font color="black"&gt; e)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;if&lt;/font&gt;&lt;font color="black"&gt; (e.Node &lt;/font&gt;&lt;font color="blue"&gt;is&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="teal"&gt;CSSTreeNode&lt;/font&gt;&lt;font color="black"&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="teal"&gt;CSSTreeNode&lt;/font&gt;&lt;font color="black"&gt; tn = e.Node &lt;/font&gt;&lt;font color="blue"&gt;as&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="teal"&gt;CSSTreeNode&lt;/font&gt;&lt;font color="black"&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;tn.CssClass = ((&lt;/font&gt;&lt;font color="teal"&gt;SiteMapNode&lt;/font&gt;&lt;font color="black"&gt;)e.Node.DataItem)[&lt;/font&gt;&lt;font color="maroon"&gt;"style"&lt;/font&gt;&lt;font color="black"&gt;];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;}&lt;br /&gt;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="maroon"&gt;script&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&lt;/font&gt; &lt;/div&gt; &lt;div style="FONT-SIZE: 9pt; FONT-FAMILY: monospace; BACKGROUND-COLOR: white"&gt;&amp;nbsp;&lt;/div&gt; &lt;div style="FONT-SIZE: 9pt; FONT-FAMILY: monospace; BACKGROUND-COLOR: white"&gt;Equals:&lt;/div&gt;&lt;img src="http://dannychen.members.winisp.net/blog/2006_01_25/20060125_5.jpg" /&gt; &lt;/div&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=436454" width="1" height="1"&gt;</description></item><item><title>Dealing with concurrency issues in custom SiteMapProviders</title><link>http://weblogs.asp.net/dannychen/archive/2006/01/03/434411.aspx</link><pubDate>Tue, 03 Jan 2006 16:56:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:434411</guid><dc:creator>dannychen</dc:creator><slash:comments>5</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/dannychen/rsscomments.aspx?PostID=434411</wfw:commentRss><comments>http://weblogs.asp.net/dannychen/archive/2006/01/03/434411.aspx#comments</comments><description>&lt;p&gt;I spend a lot of time on the &lt;a href="http://forums.asp.net/"&gt;ASP.NET forums&lt;/a&gt;.&amp;nbsp; Hopefully my efforts over there help steer users into the right direction of how to use my features and ASP.NET properly and most effectively.&amp;nbsp; But sometimes I see some really alarming things.&amp;nbsp; Recently, the most scary thing I've seen is some quite improperly written SiteMapProviders.&amp;nbsp;&amp;nbsp;Unfortunately, I'm not saying there are just plain buggy or wrongly implemented.&amp;nbsp; Those are the obvious kinds of issues that the developers will find easily through testing and don't really bother me that much.&amp;nbsp; What&amp;nbsp;does bother me is&amp;nbsp;code&amp;nbsp;that&amp;nbsp;will only fail when it's deployed and stressed.&amp;nbsp; &lt;/p&gt; &lt;p&gt;Here's an example, what's wrong with the following code:&lt;/p&gt; &lt;div style="FONT-SIZE: 9pt; FONT-FAMILY: monospace; BACKGROUND-COLOR: white"&gt;&lt;font color="#ff0000"&gt;' BAD CODE EXAMPLE&lt;br /&gt;&lt;/font&gt;&lt;font color="blue"&gt; &lt;div style="FONT-SIZE: 9pt; FONT-FAMILY: monospace; BACKGROUND-COLOR: white"&gt;&lt;font color="blue"&gt;Public&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;Class&lt;/font&gt;&lt;font color="black"&gt; BadProvider&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;Inherits&lt;/font&gt;&lt;font color="black"&gt; StaticSiteMapProvider&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;Private&lt;/font&gt;&lt;font color="black"&gt; _rootNode &lt;/font&gt;&lt;font color="blue"&gt;As&lt;/font&gt;&lt;font color="black"&gt; SiteMapNode&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;Public&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;Overrides&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;Function&lt;/font&gt;&lt;font color="black"&gt; BuildSiteMap() &lt;/font&gt;&lt;font color="blue"&gt;As&lt;/font&gt;&lt;font color="black"&gt; SiteMapNode&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;If&lt;/font&gt;&lt;font color="black"&gt; _rootNode &lt;/font&gt;&lt;font color="blue"&gt;Is&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;Nothing&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;Then&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddNode(newNode1, &lt;/font&gt;&lt;font color="blue"&gt;Nothing&lt;/font&gt;&lt;font color="black"&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddNode(newNode2, newNode1)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddNode(newNode3, newNode1)&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;_rootNode = newNode1&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;End&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;If&lt;br /&gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;Return&lt;/font&gt;&lt;font color="black"&gt; _rootNode&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;End&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;Function&lt;br /&gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;Protected&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;Overrides&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;Function&lt;/font&gt;&lt;font color="black"&gt; GetRootNodeCore() &lt;/font&gt;&lt;font color="blue"&gt;As&lt;/font&gt;&lt;font color="black"&gt; SiteMapNode&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;Return&lt;/font&gt;&lt;font color="black"&gt; BuildSiteMap()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;End&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;Function&lt;br /&gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt; &lt;div style="FONT-SIZE: 9pt; FONT-FAMILY: monospace; BACKGROUND-COLOR: white"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="blue"&gt;Protected&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;Overrides&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;Sub&lt;/font&gt;&lt;font color="black"&gt; Clear()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;_rootNode = &lt;/font&gt;&lt;font color="blue"&gt;Nothing&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;MyBase&lt;/font&gt;&lt;font color="black"&gt;.Clear()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;End&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;Sub&lt;br /&gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;Protected&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;Sub&lt;/font&gt;&lt;font color="black"&gt; MyInvalidationMethod()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Clear()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;End&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;Sub&lt;br /&gt;End&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;Class&lt;/font&gt; &lt;/div&gt;&lt;/font&gt;&lt;/div&gt;&lt;br /&gt;&lt;/font&gt;&lt;/div&gt; &lt;p&gt;Give up yet?&amp;nbsp; Simply and generally stated, the problem is that it's not &lt;a href="http://en.wikipedia.org/wiki/Thread-safe]"&gt;Thread Safe&lt;/a&gt; Why not?&amp;nbsp; Well, perhaps this is the hardest concept for users to either grasp or accept about the Provider Model.&amp;nbsp; Providers are instantiated as a single instance across the app domain.&amp;nbsp; This means a single provider is shared by all of the worker processes (ie all the requests) that come into the site.&amp;nbsp; &lt;/p&gt; &lt;p&gt;&lt;img src="http://dannychen.members.winisp.net/blog/2006_01_03/2006_01_03_001.jpg" /&gt;&lt;/p&gt; &lt;p&gt;In this example, one particular request triggers the Clear() event while the others all query data.&amp;nbsp; Each query to data implicitly calls into BuildSiteMap out of necessity.&amp;nbsp; There are several potential problems here:&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;1) A race condition between BuildSiteMap and Clear trying to modify the data at the same time&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;2) Simultaneous threads executing the BuildSiteMapCode at the same time&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;3) A race condition between BuildSiteMap, Clear, and the calling page performing future accesses&lt;/p&gt; &lt;p&gt;These are not new issues presented by the SiteMapProvider model, these are fundamental issues that need to be dealt with in any multithreaded design.&amp;nbsp; Ok, I've talked the talk, how do I walk the walk.&amp;nbsp; With ASP.NET, it's relatively easy.&amp;nbsp; Simply use the lock(object) (C#) or SyncLock object (VB) features.&amp;nbsp; The important part is to know what to lock.&amp;nbsp;&amp;nbsp;The&amp;nbsp;StaticSiteMapProvider protects all of it's APIs but anytime&amp;nbsp;an API is overridden&amp;nbsp;that can modify the data, it&amp;nbsp;needs to be protected.&amp;nbsp; This means:&amp;nbsp; AddNode, RemoveNode, Clear, and BuildSiteMap.&amp;nbsp; Here's the previous example properly coded.&amp;nbsp; If AddNode or RemoveNode needs to be overriden, they should be overridden the same way Clear has been.&lt;br /&gt;&lt;br /&gt; &lt;table&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td&gt; &lt;div style="FONT-SIZE: 9pt; FONT-FAMILY: monospace; BACKGROUND-COLOR: white"&gt;&lt;font color="blue"&gt;Public&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;Class&lt;/font&gt;&lt;font color="black"&gt; GoodProvider&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;Inherits&lt;/font&gt;&lt;font color="black"&gt; StaticSiteMapProvider&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;Private&lt;/font&gt;&lt;font color="black"&gt; lockObj &lt;/font&gt;&lt;font color="blue"&gt;As&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;New&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;Object&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;Private&lt;/font&gt;&lt;font color="black"&gt; _rootNode &lt;/font&gt;&lt;font color="blue"&gt;As&lt;/font&gt;&lt;font color="black"&gt; SiteMapNode&lt;br /&gt;&lt;br /&gt; &lt;div style="FONT-SIZE: 9pt; FONT-FAMILY: monospace; BACKGROUND-COLOR: white"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="blue"&gt;Public&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;Overrides&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;Function&lt;/font&gt;&lt;font color="black"&gt; BuildSiteMap() &lt;/font&gt;&lt;font color="blue"&gt;As&lt;/font&gt;&lt;font color="black"&gt; SiteMapNode&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;Dim&lt;/font&gt;&lt;font color="black"&gt; _tempRoot &lt;/font&gt;&lt;font color="blue"&gt;As&lt;/font&gt;&lt;font color="black"&gt; SiteMapNode = _rootNode&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;If&lt;/font&gt;&lt;font color="black"&gt; _tempRoot &lt;/font&gt;&lt;font color="blue"&gt;IsNot&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;Nothing&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;Then&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;Return&lt;/font&gt;&lt;font color="black"&gt; _tempRoot&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;End&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;If&lt;br /&gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;SyncLock&lt;/font&gt;&lt;font color="black"&gt; lockObj&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;If&lt;/font&gt;&lt;font color="black"&gt; _rootNode &lt;/font&gt;&lt;font color="blue"&gt;Is&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;Nothing&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;Then&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;MyBase&lt;/font&gt;&lt;font color="black"&gt;.Clear()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddNode(newNode1, &lt;/font&gt;&lt;font color="blue"&gt;Nothing&lt;/font&gt;&lt;font color="black"&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddNode(newNode2, newNode1)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddNode(newNode3, newNode1)&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;_rootNode = newNode1&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;End&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;If&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;Return&lt;/font&gt;&lt;font color="black"&gt; _rootNode&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;End&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;SyncLock&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;End&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;Function&lt;/font&gt; &lt;/div&gt;&lt;/font&gt;&lt;font color="blue"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;Protected&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;Overrides&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;Function&lt;/font&gt;&lt;font color="black"&gt; GetRootNodeCore() &lt;/font&gt;&lt;font color="blue"&gt;As&lt;/font&gt;&lt;font color="black"&gt; SiteMapNode&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;Return&lt;/font&gt;&lt;font color="black"&gt; BuildSiteMap()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;End&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;Function&lt;br /&gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;Protected&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;Overrides&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;Sub&lt;/font&gt;&lt;font color="black"&gt; Clear()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;SyncLock&lt;/font&gt;&lt;font color="black"&gt; lockObj&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;_rootNode = &lt;/font&gt;&lt;font color="blue"&gt;Nothing&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;End&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;SyncLock&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;End&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;Sub&lt;br /&gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;Protected&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;Sub&lt;/font&gt;&lt;font color="black"&gt; MyInvalidationMethod()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Clear()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;End&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;Sub&lt;br /&gt;End&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;Class&lt;/font&gt; &lt;/div&gt;&lt;/td&gt; &lt;td&gt;&lt;br /&gt; &lt;div style="FONT-SIZE: 9pt; FONT-FAMILY: monospace; BACKGROUND-COLOR: white"&gt;&lt;font color="blue"&gt;public&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;class&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="teal"&gt;GoodProvider&lt;/font&gt;&lt;font color="black"&gt; : &lt;/font&gt;&lt;font color="teal"&gt;StaticSiteMapProvider&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;private&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;object&lt;/font&gt;&lt;font color="black"&gt; _lockObj = &lt;/font&gt;&lt;font color="blue"&gt;new&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;object&lt;/font&gt;&lt;font color="black"&gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;private&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="teal"&gt;SiteMapNode&lt;/font&gt;&lt;font color="black"&gt; _rootNode;&lt;br /&gt;&lt;br /&gt; &lt;div style="FONT-SIZE: 9pt; FONT-FAMILY: monospace; BACKGROUND-COLOR: white"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="blue"&gt;public&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;override&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="teal"&gt;SiteMapNode&lt;/font&gt;&lt;font color="black"&gt; BuildSiteMap()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="teal"&gt;SiteMapNode&lt;/font&gt;&lt;font color="black"&gt; _tempRoot = _rootNode;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;if&lt;/font&gt;&lt;font color="black"&gt; (_tempRoot != &lt;/font&gt;&lt;font color="blue"&gt;null&lt;/font&gt;&lt;font color="black"&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;return&lt;/font&gt;&lt;font color="black"&gt; _tempRoot;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;lock&lt;/font&gt;&lt;font color="black"&gt; (_lockObj)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;if&lt;/font&gt;&lt;font color="black"&gt; (_rootNode == &lt;/font&gt;&lt;font color="blue"&gt;null&lt;/font&gt;&lt;font color="black"&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;base&lt;/font&gt;&lt;font color="black"&gt;.Clear();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddNode(newNode1, &lt;/font&gt;&lt;font color="blue"&gt;null&lt;/font&gt;&lt;font color="black"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddNode(newNode2, newNode1);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddNode(newNode3, newNode1);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;_rootNode = newNode1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;return&lt;/font&gt;&lt;font color="black"&gt; _rootNode;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/font&gt; &lt;/div&gt;&lt;/font&gt;&lt;font color="black"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;protected&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;override&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="teal"&gt;SiteMapNode&lt;/font&gt;&lt;font color="black"&gt; GetRootNodeCore()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;return&lt;/font&gt;&lt;font color="black"&gt; BuildSiteMap();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;protected&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;override&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;void&lt;/font&gt;&lt;font color="black"&gt; Clear()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;lock&lt;/font&gt;&lt;font color="black"&gt; (_lockObj)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;_rootNode = &lt;/font&gt;&lt;font color="blue"&gt;null&lt;/font&gt;&lt;font color="black"&gt;;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;protected&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;void&lt;/font&gt;&lt;font color="black"&gt; MyInvalidationFunction()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Clear();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;}&lt;/font&gt; &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;One thing to look more closely at in this example is the BuildSiteMap method.&amp;nbsp; As I previously mentioned, all the data reading APIs&amp;nbsp;of the SiteMapProvider call into BuildSiteMap to ensure the provider data has been populated.&amp;nbsp; In short, it gets called a lot.&amp;nbsp; Because of this, it's important that the primary flow of that function not be locked and only the creation portion does.&lt;/p&gt; &lt;p&gt;Update 1/12/2006: I was alerted to a couple&amp;nbsp;remaining race conditions in my good code so I've updated BuildSiteMap to eliminate them.&amp;nbsp; Thanks Joe for looking at this.&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=434411" width="1" height="1"&gt;</description></item><item><title>Rendering a databound UL menu</title><link>http://weblogs.asp.net/dannychen/archive/2005/12/19/433523.aspx</link><pubDate>Mon, 19 Dec 2005 17:09:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:433523</guid><dc:creator>dannychen</dc:creator><slash:comments>28</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/dannychen/rsscomments.aspx?PostID=433523</wfw:commentRss><comments>http://weblogs.asp.net/dannychen/archive/2005/12/19/433523.aspx#comments</comments><description>&lt;p&gt;&lt;font face="Courier New"&gt;One &lt;strong&gt;very &lt;/strong&gt;common request I get is how to render the Menu with &amp;lt;UL&amp;gt;'s and &amp;lt;LI&amp;gt;'s instead of the heavy table rendering.&amp;nbsp; Even though the Menu allows for templating, most users quickly find that this cannot be solved with just templating.&amp;nbsp; Perhaps we didn't expect this or we didn't think it was important enough at the time; I'm not sure, the decision was made long before me.&amp;nbsp;&amp;nbsp;However, whatever the reason, the Menu doesn't support this kind of rendering.&amp;nbsp; But, of course, since you're reading this, there&amp;nbsp;are several solutions...&lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;font face="Courier New" size="4"&gt;&lt;strong&gt;A simple UL menu&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Courier New"&gt;The simplest solution for a single level of hierarchy is to simply use a Repeater control bound to your SiteMapDataSource:&lt;/font&gt;&lt;/p&gt;&lt;font face="Courier New"&gt; &lt;div style="FONT-SIZE: 9pt; FONT-FAMILY: monospace; BACKGROUND-COLOR: white"&gt;&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt;&lt;font color="maroon"&gt;asp&lt;/font&gt;&lt;font color="blue"&gt;:&lt;/font&gt;&lt;font color="maroon"&gt;SiteMapDataSource&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="red"&gt;ID&lt;/font&gt;&lt;font color="blue"&gt;="SiteMapDataSource1"&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="red"&gt;runat&lt;/font&gt;&lt;font color="blue"&gt;="server"&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="red"&gt;ShowStartingNode&lt;/font&gt;&lt;font color="blue"&gt;="False"&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;/&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt;&lt;font color="maroon"&gt;asp&lt;/font&gt;&lt;font color="blue"&gt;:&lt;/font&gt;&lt;font color="maroon"&gt;Repeater&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="red"&gt;ID&lt;/font&gt;&lt;font color="blue"&gt;="Repeater1"&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="red"&gt;runat&lt;/font&gt;&lt;font color="blue"&gt;="server"&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="red"&gt;DataSourceID&lt;/font&gt;&lt;font color="blue"&gt;="SiteMapDataSource1"&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt;&lt;font color="maroon"&gt;HeaderTemplate&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&amp;lt;&lt;/font&gt;&lt;font color="maroon"&gt;ul&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&amp;lt;/&lt;/font&gt;&lt;font color="maroon"&gt;HeaderTemplate&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt;&lt;font color="maroon"&gt;ItemTemplate&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&amp;lt;&lt;/font&gt;&lt;font color="maroon"&gt;li&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;lt;%&lt;/font&gt;&lt;font color="blue"&gt;#&lt;/font&gt;&lt;font color="black"&gt; Eval(&lt;/font&gt;&lt;font color="maroon"&gt;"title"&lt;/font&gt;&lt;font color="black"&gt;) %&amp;gt;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="maroon"&gt;li&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&amp;lt;/&lt;/font&gt;&lt;font color="maroon"&gt;ItemTemplate&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt;&lt;font color="maroon"&gt;FooterTemplate&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&amp;lt;/&lt;/font&gt;&lt;font color="maroon"&gt;ul&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&amp;lt;/&lt;/font&gt;&lt;font color="maroon"&gt;FooterTemplate&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="maroon"&gt;asp&lt;/font&gt;&lt;font color="blue"&gt;:&lt;/font&gt;&lt;font color="maroon"&gt;Repeater&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;/div&gt;&lt;/font&gt; &lt;p&gt;&lt;font face="Courier New"&gt;It's a pretty straight forward solution.&amp;nbsp; It's fairly flexible as well.&amp;nbsp; Templating and Databinding are availible so custom styling of individual items should be easily possible.&amp;nbsp;&lt;/font&gt; &lt;/p&gt; &lt;p&gt;&lt;font face="Courier New"&gt;The next obvious improvement is to allow some hierarchy information.&amp;nbsp; This can be done with nesting the Repeaters.&lt;/font&gt;&lt;/p&gt;&lt;font face="Courier New"&gt; &lt;div style="FONT-SIZE: 9pt; FONT-FAMILY: monospace; BACKGROUND-COLOR: white"&gt;&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt;&lt;font color="maroon"&gt;asp&lt;/font&gt;&lt;font color="blue"&gt;:&lt;/font&gt;&lt;font color="maroon"&gt;SiteMapDataSource&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="red"&gt;ID&lt;/font&gt;&lt;font color="blue"&gt;="SiteMapDataSource2"&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="red"&gt;runat&lt;/font&gt;&lt;font color="blue"&gt;="server"&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="red"&gt;ShowStartingNode&lt;/font&gt;&lt;font color="blue"&gt;="False"&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;/&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt;&lt;font color="maroon"&gt;asp&lt;/font&gt;&lt;font color="blue"&gt;:&lt;/font&gt;&lt;font color="maroon"&gt;Repeater&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="red"&gt;ID&lt;/font&gt;&lt;font color="blue"&gt;="Repeater2"&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="red"&gt;runat&lt;/font&gt;&lt;font color="blue"&gt;="server"&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="red"&gt;DataSourceID&lt;/font&gt;&lt;font color="blue"&gt;="SiteMapDataSource2"&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt;&lt;font color="maroon"&gt;HeaderTemplate&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&amp;lt;&lt;/font&gt;&lt;font color="maroon"&gt;ul&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&amp;lt;/&lt;/font&gt;&lt;font color="maroon"&gt;HeaderTemplate&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt;&lt;font color="maroon"&gt;ItemTemplate&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&amp;lt;&lt;/font&gt;&lt;font color="maroon"&gt;li&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;lt;%&lt;/font&gt;&lt;font color="blue"&gt;#&lt;/font&gt;&lt;font color="black"&gt; Eval(&lt;/font&gt;&lt;font color="maroon"&gt;"title"&lt;/font&gt;&lt;font color="black"&gt;) %&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt;&lt;font color="maroon"&gt;asp&lt;/font&gt;&lt;font color="blue"&gt;:&lt;/font&gt;&lt;font color="maroon"&gt;SiteMapDataSource&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="red"&gt;ID&lt;/font&gt;&lt;font color="blue"&gt;="SiteMapDataSource2_1"&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="red"&gt;runat&lt;/font&gt;&lt;font color="blue"&gt;="server"&lt;/font&gt;&lt;font color="black"&gt; &lt;br /&gt;&lt;/font&gt;&lt;font color="red"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ShowStartingNode&lt;/font&gt;&lt;font color="blue"&gt;="False"&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="red"&gt;StartingNodeUrl&lt;/font&gt;&lt;font color="blue"&gt;='&lt;/font&gt;&lt;font color="black"&gt;&amp;lt;%# Eval("url") %&amp;gt;&lt;/font&gt;&lt;font color="blue"&gt;'&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;/&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt;&lt;font color="maroon"&gt;asp&lt;/font&gt;&lt;font color="blue"&gt;:&lt;/font&gt;&lt;font color="maroon"&gt;Repeater&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="red"&gt;ID&lt;/font&gt;&lt;font color="blue"&gt;="Repeater3"&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="red"&gt;runat&lt;/font&gt;&lt;font color="blue"&gt;="server"&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="red"&gt;DataSourceID&lt;/font&gt;&lt;font color="blue"&gt;="SiteMapDataSource2_1"&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt;&lt;font color="maroon"&gt;HeaderTemplate&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&amp;lt;&lt;/font&gt;&lt;font color="maroon"&gt;ul&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&amp;lt;/&lt;/font&gt;&lt;font color="maroon"&gt;HeaderTemplate&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt;&lt;font color="maroon"&gt;ItemTemplate&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&amp;lt;&lt;/font&gt;&lt;font color="maroon"&gt;li&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;lt;%&lt;/font&gt;&lt;font color="blue"&gt;#&lt;/font&gt;&lt;font color="black"&gt; Eval(&lt;/font&gt;&lt;font color="maroon"&gt;"title"&lt;/font&gt;&lt;font color="black"&gt;) %&amp;gt;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="maroon"&gt;li&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&amp;lt;/&lt;/font&gt;&lt;font color="maroon"&gt;ItemTemplate&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt;&lt;font color="maroon"&gt;FooterTemplate&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&amp;lt;/&lt;/font&gt;&lt;font color="maroon"&gt;ul&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&amp;lt;/&lt;/font&gt;&lt;font color="maroon"&gt;FooterTemplate&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="maroon"&gt;asp&lt;/font&gt;&lt;font color="blue"&gt;:&lt;/font&gt;&lt;font color="maroon"&gt;Repeater&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="maroon"&gt;li&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="maroon"&gt;ItemTemplate&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt;&lt;font color="maroon"&gt;FooterTemplate&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&amp;lt;/&lt;/font&gt;&lt;font color="maroon"&gt;ul&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&amp;lt;/&lt;/font&gt;&lt;font color="maroon"&gt;FooterTemplate&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="maroon"&gt;asp&lt;/font&gt;&lt;font color="blue"&gt;:&lt;/font&gt;&lt;font color="maroon"&gt;Repeater&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&lt;/font&gt; &lt;/div&gt;&lt;/font&gt; &lt;p&gt;&lt;font face="Courier New"&gt;Again this works fairly well and doesn't use any code.&amp;nbsp; But there are a couple obvious issues with this approach.&amp;nbsp; First, although it provides for hierarchy, it's still limited to a fixed depth.&amp;nbsp; Second, if a node has no child nodes, the code will still render and empty &amp;lt;ul&amp;gt;&amp;lt;/ul&amp;gt; tag.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Courier New" size="4"&gt;&lt;strong&gt;A custom, templated HierarchicalDataBoundControl&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Courier New"&gt;Ok, so writing this blog entry was just an excuse for me to have a little fun and come up with this sample.&amp;nbsp; But, the way to get the most flexible rendering is a custom control.&amp;nbsp; This is also a good example of creating a templated control and implementing a HierarchicalDataBound control.&amp;nbsp;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Implementing Templates and Databinding&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Courier New"&gt;Actually templates aren't new, they've been around for a while.&amp;nbsp; Using them is pretty straight forward.&amp;nbsp; Declare a template property using the ITemplate interface and instantiate it with InstantiateIn(container).&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Courier New"&gt;&lt;font color="#0000ff" size="2"&gt;Private&lt;/font&gt;&lt;font size="2"&gt; _HeaderTemplate &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;As&lt;/font&gt;&lt;font size="2"&gt; ITemplate&lt;br /&gt;&lt;br /&gt;&amp;lt;PersistenceMode(PersistenceMode.InnerProperty), _&lt;br /&gt;&amp;nbsp;TemplateContainer(&lt;font color="blue"&gt;GetType&lt;/font&gt;&lt;font color="black"&gt;(MyDataItem))&amp;gt; _&lt;br /&gt;&lt;/font&gt;&lt;font color="blue"&gt;Public&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;Property&lt;/font&gt;&lt;font color="black"&gt; HeaderTemplate() &lt;/font&gt;&lt;font color="blue"&gt;As&lt;/font&gt;&lt;font color="black"&gt; ITemplate&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;Get&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;Return&lt;/font&gt;&lt;font color="black"&gt; _HeaderTemplate&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;End&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;Get&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;Set&lt;/font&gt;&lt;font color="black"&gt;(&lt;/font&gt;&lt;font color="blue"&gt;ByVal&lt;/font&gt;&lt;font color="black"&gt; value &lt;/font&gt;&lt;font color="blue"&gt;As&lt;/font&gt;&lt;font color="black"&gt; ITemplate)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;_HeaderTemplate = value&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;End&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;Set&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&lt;/font&gt;&lt;font color="blue"&gt;End&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;Property&lt;br /&gt;&lt;br /&gt;&lt;font color="blue"&gt;Protected&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;Overrides&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;Sub&lt;/font&gt;&lt;font color="black"&gt; CreateChildControls()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="blue"&gt;Dim&lt;/font&gt;&lt;font color="black"&gt; header &lt;/font&gt;&lt;font color="blue"&gt;As&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;New&lt;/font&gt;&lt;font color="black"&gt; MyDataItem(&lt;/font&gt;&lt;font color="blue"&gt;String&lt;/font&gt;&lt;font color="black"&gt;.Empty)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;HeaderTemplate.InstantiateIn(header)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Controls.Add(header)&lt;br /&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="blue"&gt;End&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;Sub&lt;br /&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;div style="FONT-SIZE: 9pt; FONT-FAMILY: monospace; BACKGROUND-COLOR: white"&gt;&lt;font color="blue"&gt;&lt;br /&gt;&lt;/font&gt;&amp;nbsp;&lt;/div&gt;&lt;/font&gt;&lt;/font&gt; &lt;p&gt;&lt;font face="Courier New"&gt;What &lt;strong&gt;is&lt;/strong&gt; new is the IDataItemContainer interface.&amp;nbsp; This new interface is designed to make it easier to databind using Eval(&amp;lt;prop&amp;gt;).&amp;nbsp; The interface has 3 members:&lt;/font&gt;&lt;/p&gt;&lt;font face="Courier New"&gt; &lt;p&gt;&lt;font color="#0000ff"&gt;Public&lt;/font&gt; &lt;font color="#0000ff"&gt;ReadOnly&lt;/font&gt; &lt;font color="#0000ff"&gt;Property&lt;/font&gt; DataItem() &lt;font color="#0000ff"&gt;As&lt;/font&gt; &lt;font color="#0000ff"&gt;Object&lt;/font&gt; &lt;font color="#0000ff"&gt;Implements&lt;/font&gt; IDataItemContainer.DataItem&lt;br /&gt;&lt;font color="#0000ff"&gt;Public&lt;/font&gt; &lt;font color="#0000ff"&gt;ReadOnly&lt;/font&gt; &lt;font color="#0000ff"&gt;Property&lt;/font&gt; DataItemIndex() &lt;font color="#0000ff"&gt;As&lt;/font&gt; &lt;font color="#0000ff"&gt;Integer&lt;/font&gt; &lt;font color="#0000ff"&gt;Implements &lt;/font&gt;IDataItemContainer.DataItemIndex&lt;br /&gt;&lt;font color="#0000ff"&gt;Public&lt;/font&gt; &lt;font color="#0000ff"&gt;ReadOnly&lt;/font&gt; &lt;font color="#0000ff"&gt;Property&lt;/font&gt; DisplayIndex() &lt;font color="#0000ff"&gt;As&lt;/font&gt; &lt;font color="#0000ff"&gt;Integer&lt;/font&gt; &lt;font color="#0000ff"&gt;Implements&lt;/font&gt; IDataItemContainer.DisplayIndex&lt;/p&gt;&lt;/font&gt; &lt;p&gt;&lt;font face="Courier New"&gt;The DataItemIndex and DisplayIndex properties are used to keep track of the index of the current item and it's index in the rendering.&amp;nbsp; This can be useful for controls that do paging.&amp;nbsp; However, if you aren't paging, you can cheat (like I did) and return a dummy value.&amp;nbsp; The DataItem property is the most interesting one.&amp;nbsp; It's the object that is returned from an operation like:&amp;nbsp; &amp;lt;%&lt;font color="blue"&gt;#&lt;/font&gt;&lt;font color="black"&gt; Container.DataItem %&amp;gt;&lt;/font&gt;&amp;nbsp; The way this ties into templates is that the template container should implement the IDataItemContainer interface.&amp;nbsp; &lt;/font&gt;&lt;/p&gt;&lt;font face="Courier New"&gt; &lt;div style="FONT-SIZE: 9pt; FONT-FAMILY: monospace; BACKGROUND-COLOR: white"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="blue"&gt;Public&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;Class&lt;/font&gt;&lt;font color="black"&gt; MyDataItem&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;Inherits&lt;/font&gt;&lt;font color="black"&gt; Control&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;Implements&lt;/font&gt;&lt;font color="black"&gt; INamingContainer&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;Implements&lt;/font&gt;&lt;font color="black"&gt; IDataItemContainer&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;Private&lt;/font&gt;&lt;font color="black"&gt; _data &lt;/font&gt;&lt;font color="blue"&gt;As&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;MyDataObject&lt;br /&gt;&lt;/font&gt;&lt;font color="blue"&gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;Public&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;ReadOnly&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;Property&lt;/font&gt;&lt;font color="black"&gt; DataItem() &lt;/font&gt;&lt;font color="blue"&gt;As&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;Object&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;Implements&lt;/font&gt;&lt;font color="black"&gt; UI.IDataItemContainer.DataItem&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;Get&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;Return&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;&lt;font color="#000000"&gt;_data&lt;/font&gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;End&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;Get&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;End&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;Property&lt;br /&gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;Public&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;ReadOnly&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;Property&lt;/font&gt;&lt;font color="black"&gt; DataItemIndex() &lt;/font&gt;&lt;font color="blue"&gt;As&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;Integer&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;Implements&lt;/font&gt;&lt;font color="black"&gt; IDataItemContainer.DataItemIndex&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;Get&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;Return&lt;/font&gt;&lt;font color="black"&gt; 0&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;End&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;Get&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;End&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;Property&lt;br /&gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;Public&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;ReadOnly&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;Property&lt;/font&gt;&lt;font color="black"&gt; DisplayIndex() &lt;/font&gt;&lt;font color="blue"&gt;As&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;Integer&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;Implements&lt;/font&gt;&lt;font color="black"&gt; IDataItemContainer.DisplayIndex&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;Get&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;Return&lt;/font&gt;&lt;font color="black"&gt; 0&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;End&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;Get&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;End&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;Property&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;End&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;Class&lt;/font&gt; &lt;/div&gt;&lt;/font&gt; &lt;p&gt;&lt;font face="Courier New"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Implementing a HierarchicalDataBoundControl&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Courier New"&gt;&lt;font face="Courier New"&gt;Implementing a HierarchicalDataBoundControl is a lot like any other custom control.&amp;nbsp; The best place to override is CreateChildControls.&amp;nbsp; A common design pattern is to create a private recursive CreateChildControls and call into it from CreateChildControls.&amp;nbsp; The biggest feature that the HierarchicalDataBoundControl base class gives us is GetData(string) and GetDataSource().&amp;nbsp; These two provide access to a HierarchicalDataSourceView which in turn provides access to the hierarchy data through IHierarchicalEnumerable and IHierarchyData objects.&amp;nbsp; You can see&amp;nbsp;more information about those interfaces&amp;nbsp;in&amp;nbsp;this &lt;/font&gt;&lt;A href="http://weblogs.asp.net/dannychen/archive/2005/12/05/432382.aspx"&gt;&lt;font face="Courier New"&gt;previous post&lt;/font&gt;&lt;/a&gt;&lt;font face="Courier New"&gt;&amp;nbsp;and at the links at the end of the article.&lt;/font&gt;&amp;nbsp; &lt;/font&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;font face="Courier New"&gt; &lt;div style="FONT-SIZE: 9pt; FONT-FAMILY: monospace; BACKGROUND-COLOR: white"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="blue"&gt;Protected&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;Overrides&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;Sub&lt;/font&gt;&lt;font color="black"&gt; CreateChildControls()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;RecursiveCreateChildControls(GetData(&lt;/font&gt;&lt;font color="maroon"&gt;""&lt;/font&gt;&lt;font color="black"&gt;).Select())&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;End&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;Sub&lt;br /&gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;Private&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;Sub&lt;/font&gt;&lt;font color="black"&gt; RecursiveCreateChildControls(&lt;/font&gt;&lt;font color="blue"&gt;ByVal&lt;/font&gt;&lt;font color="black"&gt; dataItems &lt;/font&gt;&lt;font color="blue"&gt;As&lt;/font&gt;&lt;font color="black"&gt; IHierarchicalEnumerable)&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;For&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;Each&lt;/font&gt;&lt;font color="black"&gt; e &lt;/font&gt;&lt;font color="blue"&gt;As&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;Object&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;In&lt;/font&gt;&lt;font color="black"&gt; dataItems&lt;br /&gt;&lt;/font&gt;&lt;font color="blue"&gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;Dim&lt;/font&gt;&lt;font color="black"&gt; data &lt;/font&gt;&lt;font color="blue"&gt;As&lt;/font&gt;&lt;font color="black"&gt; IHierarchyData = dataItems.GetHierarchyData(e)&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;Dim&lt;/font&gt;&lt;font color="black"&gt; text &lt;/font&gt;&lt;font color="blue"&gt;As&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;String&lt;/font&gt;&lt;font color="black"&gt; = &lt;/font&gt;&lt;font color="blue"&gt;String&lt;/font&gt;.Empty&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;text = DataBinder.GetPropertyValue(data, TextField)&lt;br /&gt;&lt;/div&gt; &lt;div style="FONT-SIZE: 9pt; FONT-FAMILY: monospace; BACKGROUND-COLOR: white"&gt;&amp;nbsp;&lt;/div&gt; &lt;div style="FONT-SIZE: 9pt; FONT-FAMILY: monospace; BACKGROUND-COLOR: white"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ...&amp;nbsp;add controls ...&lt;/div&gt; &lt;div style="FONT-SIZE: 9pt; FONT-FAMILY: monospace; BACKGROUND-COLOR: white"&gt;&amp;nbsp;&lt;/div&gt; &lt;div style="FONT-SIZE: 9pt; FONT-FAMILY: monospace; BACKGROUND-COLOR: white"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;RecursiveCreateChildControls(data.GetChildren())&lt;br /&gt;&lt;br /&gt;&lt;font color="blue"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;Next&lt;/font&gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;End&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;Sub&lt;br /&gt;&lt;/div&gt;&lt;/font&gt;&lt;/font&gt; &lt;p&gt;&lt;font face="Courier New"&gt;One other extremely useful class is the DataBinder class.&amp;nbsp; Recall from the IDataItemContainer interface that the data is just an object reference.&amp;nbsp; It may be an xmlElement or a SiteMapNode or a DataRowView or some other object.&amp;nbsp; In order to extract property values from&amp;nbsp;an arbitrary object, the DataBinder.GetPropertyValue(object, string) function can be used.&amp;nbsp; Putting together all these concepts and we have a HierchicalDataBoundControl that supports templates and databinding.&amp;nbsp; The complete code listing for this custom control is availible at the end of this post.&amp;nbsp; Here's how it can be used for a &amp;lt;UL&amp;gt; &amp;lt;LI&amp;gt; menu.&amp;nbsp; The exact same code can also be bound to a XmlDataSource.&lt;/font&gt;&lt;/p&gt;&lt;font face="Courier New"&gt; &lt;div style="FONT-SIZE: 9pt; FONT-FAMILY: monospace; BACKGROUND-COLOR: white"&gt;&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt;&lt;font color="maroon"&gt;asp&lt;/font&gt;&lt;font color="blue"&gt;:&lt;/font&gt;&lt;font color="maroon"&gt;SiteMapDataSource&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="red"&gt;ID&lt;/font&gt;&lt;font color="blue"&gt;="SiteMapDataSource3"&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="red"&gt;runat&lt;/font&gt;&lt;font color="blue"&gt;="server"&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;/&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt;&lt;font color="maroon"&gt;My&lt;/font&gt;&lt;font color="blue"&gt;:&lt;/font&gt;&lt;font color="maroon"&gt;RecursiveULMenu&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="red"&gt;ID&lt;/font&gt;&lt;font color="blue"&gt;="rl1"&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="red"&gt;DataSourceID&lt;/font&gt;&lt;font color="blue"&gt;="SiteMapDataSource3"&lt;/font&gt;&lt;font color="black"&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="red"&gt;runat&lt;/font&gt;&lt;font color="blue"&gt;="server"&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="red"&gt;TextField&lt;/font&gt;&lt;font color="blue"&gt;="title"&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt;&lt;font color="maroon"&gt;HeaderTemplate&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&amp;lt;&lt;/font&gt;&lt;font color="maroon"&gt;ul&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&amp;lt;/&lt;/font&gt;&lt;font color="maroon"&gt;HeaderTemplate&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt;&lt;font color="maroon"&gt;FooterTemplate&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&amp;lt;/&lt;/font&gt;&lt;font color="maroon"&gt;ul&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&amp;lt;/&lt;/font&gt;&lt;font color="maroon"&gt;FooterTemplate&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt;&lt;font color="maroon"&gt;ItemHeaderTemplate&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&amp;lt;&lt;/font&gt;&lt;font color="maroon"&gt;LI&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&amp;lt;/&lt;/font&gt;&lt;font color="maroon"&gt;ItemHeaderTemplate&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt;&lt;font color="maroon"&gt;ItemTemplate&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;%&lt;/font&gt;&lt;font color="blue"&gt;#&lt;/font&gt;&lt;font color="black"&gt; Eval(&lt;/font&gt;&lt;font color="maroon"&gt;"Text"&lt;/font&gt;&lt;font color="black"&gt;) %&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="maroon"&gt;ItemTemplate&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt;&lt;font color="maroon"&gt;ItemFooterTemplate&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&amp;lt;/&lt;/font&gt;&lt;font color="maroon"&gt;LI&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&amp;lt;/&lt;/font&gt;&lt;font color="maroon"&gt;ItemFooterTemplate&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="maroon"&gt;My&lt;/font&gt;&lt;font color="blue"&gt;:&lt;/font&gt;&lt;font color="maroon"&gt;RecursiveULMenu&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt;&lt;font color="maroon"&gt;asp&lt;/font&gt;&lt;font color="blue"&gt;:&lt;/font&gt;&lt;font color="maroon"&gt;XmlDataSource&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="red"&gt;ID&lt;/font&gt;&lt;font color="blue"&gt;="XmlDataSource1"&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="red"&gt;runat&lt;/font&gt;&lt;font color="blue"&gt;="server"&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="red"&gt;DataFile&lt;/font&gt;&lt;font color="blue"&gt;="XMLFile.xml"&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;/&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt;&lt;font color="maroon"&gt;My&lt;/font&gt;&lt;font color="blue"&gt;:&lt;/font&gt;&lt;font color="maroon"&gt;RecursiveULMenu&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="red"&gt;ID&lt;/font&gt;&lt;font color="blue"&gt;="RecursiveList1"&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="red"&gt;DataSourceID&lt;/font&gt;&lt;font color="blue"&gt;="XmlDataSource1"&lt;/font&gt;&lt;font color="black"&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="red"&gt;runat&lt;/font&gt;&lt;font color="blue"&gt;="server"&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="red"&gt;TextField&lt;/font&gt;&lt;font color="blue"&gt;="name"&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt;&lt;font color="maroon"&gt;HeaderTemplate&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&amp;lt;&lt;/font&gt;&lt;font color="maroon"&gt;ol&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&amp;lt;/&lt;/font&gt;&lt;font color="maroon"&gt;HeaderTemplate&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt;&lt;font color="maroon"&gt;FooterTemplate&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&amp;lt;/&lt;/font&gt;&lt;font color="maroon"&gt;ol&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&amp;lt;/&lt;/font&gt;&lt;font color="maroon"&gt;FooterTemplate&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt;&lt;font color="maroon"&gt;ItemHeaderTemplate&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&amp;lt;&lt;/font&gt;&lt;font color="maroon"&gt;LI&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&amp;lt;/&lt;/font&gt;&lt;font color="maroon"&gt;ItemHeaderTemplate&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt;&lt;font color="maroon"&gt;ItemTemplate&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;%&lt;/font&gt;&lt;font color="blue"&gt;#&lt;/font&gt;&lt;font color="black"&gt; Eval(&lt;/font&gt;&lt;font color="maroon"&gt;"Text"&lt;/font&gt;&lt;font color="black"&gt;) %&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="maroon"&gt;ItemTemplate&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;&lt;/font&gt;&lt;font color="maroon"&gt;ItemFooterTemplate&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&amp;lt;/&lt;/font&gt;&lt;font color="maroon"&gt;LI&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&amp;lt;/&lt;/font&gt;&lt;font color="maroon"&gt;ItemFooterTemplate&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;&lt;/font&gt;&lt;font color="blue"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="maroon"&gt;My&lt;/font&gt;&lt;font color="blue"&gt;:&lt;/font&gt;&lt;font color="maroon"&gt;RecursiveULMenu&lt;/font&gt;&lt;font color="blue"&gt;&amp;gt;&lt;/font&gt; &lt;/div&gt;&lt;/font&gt; &lt;p&gt;&lt;font face="Courier New"&gt;References:&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Courier New"&gt;&lt;a href="http://msdn2.microsoft.com/library/system.web.ui.idataitemcontainer.aspx"&gt;http://msdn2.microsoft.com/library/system.web.ui.idataitemcontainer.aspx&lt;/a&gt;&lt;br /&gt;&lt;a href="http://msdn2.microsoft.com/library/system.web.ui.webcontrols.hierarchicaldataboundcontrol.aspx"&gt;http://msdn2.microsoft.com/library/system.web.ui.webcontrols.hierarchicaldataboundcontrol.aspx&lt;/a&gt;&lt;br /&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/system.web.ui.itemplate.aspx"&gt;http://msdn2.microsoft.com/en-us/library/system.web.ui.itemplate.aspx&lt;/a&gt;&lt;br /&gt;&lt;a href="http://msdn2.microsoft.com/library/system.web.ui.ihierarchicalenumerable.aspx"&gt;http://msdn2.microsoft.com/library/system.web.ui.ihierarchicalenumerable.aspx&lt;/a&gt;&lt;br /&gt;&lt;a href="http://msdn2.microsoft.com/library/system.web.ui.ihierarchydata.aspx"&gt;http://msdn2.microsoft.com/library/system.web.ui.ihierarchydata.aspx&lt;/a&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Courier New"&gt;Code Listings:&lt;/font&gt;&lt;/p&gt;&lt;A href="http://weblogs.asp.net/dannychen/articles/433524.aspx"&gt;Link to VB code listing&lt;/a&gt; &lt;br /&gt;&lt;A href="http://weblogs.asp.net/dannychen/articles/433525.aspx"&gt;Link to C# code listing&lt;/a&gt; &lt;p&gt;&lt;font face="Courier New"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;font face="Courier New"&gt;UPDATE 1/6/06: &lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Courier New"&gt;&amp;nbsp; As found by Eric in the comments below, the code gets wrapped in a SPAN.&amp;nbsp; It's possible that you might want to wrap the control with a DIV instead.&amp;nbsp; In that case you can override RenderBeginTag like so: &lt;/font&gt;&lt;/p&gt; &lt;div style="FONT-SIZE: 9pt; FONT-FAMILY: monospace; BACKGROUND-COLOR: white"&gt;&lt;font color="blue"&gt;Public&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;Overrides&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;Sub&lt;/font&gt;&lt;font color="black"&gt; RenderBeginTag(&lt;/font&gt;&lt;font color="blue"&gt;ByVal&lt;/font&gt;&lt;font color="black"&gt; writer &lt;/font&gt;&lt;font color="blue"&gt;As&lt;/font&gt;&lt;font color="black"&gt; System.Web.UI.HtmlTextWriter)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;writer.AddAttribute(HtmlTextWriterAttribute.Id, &lt;/font&gt;&lt;font color="blue"&gt;Me&lt;/font&gt;&lt;font color="black"&gt;.ClientID)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;writer.RenderBeginTag(HtmlTextWriterTag.Div)&lt;br /&gt;&lt;/font&gt;&lt;font color="blue"&gt;End&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;Sub&lt;/font&gt; &lt;/div&gt; &lt;div style="FONT-SIZE: 9pt; FONT-FAMILY: monospace; BACKGROUND-COLOR: white"&gt;&amp;nbsp;&lt;/div&gt; &lt;div style="FONT-SIZE: 9pt; FONT-FAMILY: monospace; BACKGROUND-COLOR: white"&gt;&amp;nbsp;or &lt;/div&gt; &lt;div style="FONT-SIZE: 9pt; FONT-FAMILY: monospace; BACKGROUND-COLOR: white"&gt;&amp;nbsp;&lt;/div&gt; &lt;div style="FONT-SIZE: 9pt; FONT-FAMILY: monospace; BACKGROUND-COLOR: white"&gt; &lt;div style="FONT-SIZE: 9pt; FONT-FAMILY: monospace; BACKGROUND-COLOR: white"&gt;&lt;font color="blue"&gt;public&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;override&lt;/font&gt;&lt;font color="black"&gt; &lt;/font&gt;&lt;font color="blue"&gt;void&lt;/font&gt;&lt;font color="black"&gt; RenderBeginTag(System.Web.UI.&lt;/font&gt;&lt;font color="teal"&gt;HtmlTextWriter&lt;/font&gt;&lt;font color="black"&gt; writer) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;writer.AddAttribute(&lt;/font&gt;&lt;font color="teal"&gt;HtmlTextWriterAttribute&lt;/font&gt;&lt;font color="black"&gt;.Id, &lt;/font&gt;&lt;font color="blue"&gt;this&lt;/font&gt;&lt;font color="black"&gt;.ClientID);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;writer.RenderBeginTag(&lt;/font&gt;&lt;font color="teal"&gt;HtmlTextWriterTag&lt;/font&gt;&lt;font color="black"&gt;.Div);&lt;br /&gt;}&lt;br /&gt;&lt;/font&gt;&lt;/div&gt;&lt;/div&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=433523" width="1" height="1"&gt;</description></item></channel></rss>