<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet type='text/xsl' href='http://damianpedwards.spaces.live.com/mmm2008-07-24_12.50/rsspretty.aspx?rssquery=en-US;http%3a%2f%2fdamianpedwards.spaces.live.com%2fblog%2ffeed.rss' version='1.0'?><rss version="2.0" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:msn="http://schemas.microsoft.com/msn/spaces/2005/rss" xmlns:live="http://schemas.microsoft.com/live/spaces/2006/rss" xmlns:dcterms="http://purl.org/dc/terms/" xmlns:cf="http://www.microsoft.com/schemas/rss/core/2005" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Damo's spot on the web: Blog</title><description /><link>http://DamianPEdwards.spaces.live.com/blog</link><language>en-US</language><pubDate>Wed, 03 Sep 2008 06:01:39 GMT</pubDate><lastBuildDate>Wed, 03 Sep 2008 06:01:39 GMT</lastBuildDate><generator>Microsoft Spaces v1.1</generator><docs>http://www.rssboard.org/rss-specification</docs><ttl>60</ttl><cf:parentRSS>http://DamianPEdwards.spaces.live.com/feed.rss</cf:parentRSS><live:type>blog</live:type><live:identity><live:id>-6883226023675471693</live:id><live:alias>DamianPEdwards</live:alias></live:identity><image><title>Damo's spot on the web: Blog</title><url>http://blufiles.storage.live.com/y1p0xGr80z-SngLLn4wLAUQdWYE75N7Id-Ypl78BcDnaSD-1euLaWGsFFPa6gi9_yvU</url><link>http://DamianPEdwards.spaces.live.com/blog</link></image><cf:listinfo><cf:group ns="http://schemas.microsoft.com/live/spaces/2006/rss" element="typelabel" label="Type" /><cf:group ns="http://schemas.microsoft.com/live/spaces/2006/rss" element="tag" label="Tag" /><cf:group element="category" label="Category" /><cf:sort element="pubDate" label="Date" data-type="date" default="true" /><cf:sort element="title" label="Title" data-type="string" /><cf:sort ns="http://purl.org/rss/1.0/modules/slash/" element="comments" label="Comments" data-type="number" /></cf:listinfo><item><title>iPhone Speed Check updated to test connection latency</title><link>http://DamianPEdwards.spaces.live.com/Blog/cns!A079DE667E1958B3!705.entry</link><description>&lt;p&gt;I've published an update to &lt;a href="http://iphonespeedcheck.com"&gt;iphonespeedcheck.com&lt;/a&gt; so that it tests connection latency. I've also stripped out the dependency on third-party JavaScript libraries so it's extra lean. There's also a shiny new home screen icon too. &lt;p&gt;Note that the site will only work properly in Safari on Windows, Mac or iPhone/iPod Touch. &lt;p&gt;Thanks to &lt;a href="http://www.cybner.com.au"&gt;Cybner&lt;/a&gt; for the hosting.&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-6883226023675471693&amp;page=RSS%3a+iPhone+Speed+Check+updated+to+test+connection+latency&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=damianpedwards.spaces.live.com&amp;amp;GT1=DamianPEdwards"&gt;</description><category>Computers and Internet</category><comments>http://DamianPEdwards.spaces.live.com/Blog/cns!A079DE667E1958B3!705.entry#comment</comments><guid isPermaLink="true">http://DamianPEdwards.spaces.live.com/Blog/cns!A079DE667E1958B3!705.entry</guid><pubDate>Sat, 16 Aug 2008 14:37:30 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://DamianPEdwards.spaces.live.com/blog/cns!A079DE667E1958B3!705/comments/feed.rss</wfw:commentRss><wfw:comment>http://DamianPEdwards.spaces.live.com/Blog/cns!A079DE667E1958B3!705.entry#comment</wfw:comment><dcterms:modified>2008-08-16T14:37:30Z</dcterms:modified></item><item><title>Using PageDataSource (was ParentDataSource) with ASP.NET Web Site projects</title><link>http://DamianPEdwards.spaces.live.com/Blog/cns!A079DE667E1958B3!704.entry</link><description>&lt;p&gt;I got a request today from somebody who was trying to use my &lt;a href="http://damianpedwards.spaces.live.com/blog/cns!A079DE667E1958B3!567.entry"&gt;ParentDataSource&lt;/a&gt; (now called PageDataSource) control in an ASP.NET Web Site project and was running into problems. The bound control kept throwing an InvalidOperationException saying it couldn't load the type. Turns out the problem is with the difference in the way that pages and assemblies are dynamically compiled and loaded by the BuildManager in web site projects. The fix involves simple adding the dynamic assembly name to the type name so that the BuildManager can locate it correctly when the bound control asks for it:&lt;pre&gt;&lt;span style="background:#2e2e2e;color:cyan"&gt;if &lt;/span&gt;&lt;span style="background:#2e2e2e;color:#d2d200"&gt;(&lt;/span&gt;&lt;span style="background:#2e2e2e;color:#f8ffc6"&gt;ctl&lt;/span&gt;&lt;span style="background:#2e2e2e;color:#d2d200"&gt;.&lt;/span&gt;&lt;span style="background:#2e2e2e;color:#f8ffc6"&gt;Parent &lt;/span&gt;&lt;span style="background:#2e2e2e;color:#d2d200"&gt;== &lt;/span&gt;&lt;span style="background:#2e2e2e;color:cyan"&gt;null&lt;/span&gt;&lt;span style="background:#2e2e2e;color:#d2d200"&gt;)
{
    &lt;/span&gt;&lt;span style="background:#2e2e2e;color:lime"&gt;// At the top of the control tree and user control was not found, use page base type instead
    &lt;/span&gt;&lt;span style="background:#2e2e2e;color:cyan"&gt;this&lt;/span&gt;&lt;span style="background:#2e2e2e;color:#d2d200"&gt;.&lt;/span&gt;&lt;span style="background:#2e2e2e;color:#f8ffc6"&gt;TypeName &lt;/span&gt;&lt;span style="background:#2e2e2e;color:#d2d200"&gt;= &lt;/span&gt;&lt;span style="background:#2e2e2e;color:#2b91af"&gt;Assembly&lt;/span&gt;&lt;span style="background:#2e2e2e;color:#d2d200"&gt;.&lt;/span&gt;&lt;span style="background:#2e2e2e;color:#f8ffc6"&gt;CreateQualifiedName&lt;/span&gt;&lt;span style="background:#2e2e2e;color:#d2d200"&gt;(
        &lt;/span&gt;&lt;span style="background:#2e2e2e;color:cyan"&gt;this&lt;/span&gt;&lt;span style="background:#2e2e2e;color:#d2d200"&gt;.&lt;/span&gt;&lt;span style="background:#2e2e2e;color:#f8ffc6"&gt;Page&lt;/span&gt;&lt;span style="background:#2e2e2e;color:#d2d200"&gt;.&lt;/span&gt;&lt;span style="background:#2e2e2e;color:#f8ffc6"&gt;GetType&lt;/span&gt;&lt;span style="background:#2e2e2e;color:#d2d200"&gt;().&lt;/span&gt;&lt;span style="background:#2e2e2e;color:#f8ffc6"&gt;Assembly&lt;/span&gt;&lt;span style="background:#2e2e2e;color:#d2d200"&gt;.&lt;/span&gt;&lt;span style="background:#2e2e2e;color:#f8ffc6"&gt;FullName&lt;/span&gt;&lt;span style="background:#2e2e2e;color:#d2d200"&gt;,
        &lt;/span&gt;&lt;span style="background:#2e2e2e;color:cyan"&gt;this&lt;/span&gt;&lt;span style="background:#2e2e2e;color:#d2d200"&gt;.&lt;/span&gt;&lt;span style="background:#2e2e2e;color:#f8ffc6"&gt;Page&lt;/span&gt;&lt;span style="background:#2e2e2e;color:#d2d200"&gt;.&lt;/span&gt;&lt;span style="background:#2e2e2e;color:#f8ffc6"&gt;GetType&lt;/span&gt;&lt;span style="background:#2e2e2e;color:#d2d200"&gt;().&lt;/span&gt;&lt;span style="background:#2e2e2e;color:#f8ffc6"&gt;BaseType&lt;/span&gt;&lt;span style="background:#2e2e2e;color:#d2d200"&gt;.&lt;/span&gt;&lt;span style="background:#2e2e2e;color:#f8ffc6"&gt;FullName&lt;/span&gt;&lt;span style="background:#2e2e2e;color:#d2d200"&gt;);
    &lt;/span&gt;&lt;span style="background:#2e2e2e;color:#f8ffc6"&gt;_parentHost &lt;/span&gt;&lt;span style="background:#2e2e2e;color:#d2d200"&gt;= &lt;/span&gt;&lt;span style="background:#2e2e2e;color:cyan"&gt;this&lt;/span&gt;&lt;span style="background:#2e2e2e;color:#d2d200"&gt;.&lt;/span&gt;&lt;span style="background:#2e2e2e;color:#f8ffc6"&gt;Page&lt;/span&gt;&lt;span style="background:#2e2e2e;color:#d2d200"&gt;;
    &lt;/span&gt;&lt;span style="background:#2e2e2e;color:cyan"&gt;return&lt;/span&gt;&lt;span style="background:#2e2e2e;color:#d2d200"&gt;;
}&lt;/span&gt;&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;
&lt;p&gt;You can download the updated control class file from &lt;a href="http://files.damianedwards.com/PageDataSource.zip"&gt;here&lt;/a&gt;.&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-6883226023675471693&amp;page=RSS%3a+Using+PageDataSource+(was+ParentDataSource)+with+ASP.NET+Web+Site+projects&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=damianpedwards.spaces.live.com&amp;amp;GT1=DamianPEdwards"&gt;</description><category>Readify</category><comments>http://DamianPEdwards.spaces.live.com/Blog/cns!A079DE667E1958B3!704.entry#comment</comments><guid isPermaLink="true">http://DamianPEdwards.spaces.live.com/Blog/cns!A079DE667E1958B3!704.entry</guid><pubDate>Wed, 13 Aug 2008 12:13:28 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://DamianPEdwards.spaces.live.com/blog/cns!A079DE667E1958B3!704/comments/feed.rss</wfw:commentRss><wfw:comment>http://DamianPEdwards.spaces.live.com/Blog/cns!A079DE667E1958B3!704.entry#comment</wfw:comment><dcterms:modified>2008-08-13T12:13:28Z</dcterms:modified></item><item><title>What have I been up to?</title><link>http://DamianPEdwards.spaces.live.com/Blog/cns!A079DE667E1958B3!689.entry</link><description>&lt;p&gt;I haven't posted here in a long time so I thought I'd do a quick heads up of what I've been doing lately: &lt;ul&gt; &lt;li&gt;I received an &lt;a href="https://mvp.support.microsoft.com/profile/Damian.Edwards"&gt;MVP award&lt;/a&gt; from Microsoft in ASP/ASP.NET. &lt;li&gt;I passed a couple more MS exams to complete my &lt;a href="http://www.microsoft.com/learning/mcp/mcsd/"&gt;MCSD.NET&lt;/a&gt;. This leaves me only one MS exam off of finishing my &lt;a href="http://www.itmasters.com.au/"&gt;Masters degree&lt;/a&gt;. &lt;li&gt;I bought an &lt;a href="http://www.apple.com/au/iphone/"&gt;iPhone 3G&lt;/a&gt;. &lt;li&gt;I published my first &lt;a href="http://www.iphonespeedcheck.com"&gt;iPhone web app&lt;/a&gt;. It's an online connection speed test: &lt;a href="http://www.iphonespeedcheck.com"&gt;http://www.iphonespeedcheck.com&lt;/a&gt; &lt;li&gt;I hosted another meeting of the Ballarat.NET SIG. We were lucky enough to have two great presenters in &lt;a href="http://blogesh.wordpress.com/"&gt;Mahesh Krishnan&lt;/a&gt; and &lt;a href="http://blog.tatham.oddie.com.au/"&gt;Tatham Oddie&lt;/a&gt;. Thanks again to &lt;a href="http://www.commandercentre.com/"&gt;Command Centre&lt;/a&gt; Ballarat for providing us with the venue. (if you're interested in presenting at future Ballarat.NET SIG events I'm always looking for presenters so please drop me a line via email, &lt;a href="http://www.facebook.com/profile.php?id=684500956"&gt;facebook&lt;/a&gt;, &lt;a href="https://twitter.com/DamianEdwards"&gt;twitter&lt;/a&gt;, messenger, etc.)&lt;/ul&gt; &lt;p&gt;On top of that I finished up a long term gig I'd been on and took a couple of weeks off to unwind. &lt;p&gt;What's on my radar for the coming months? &lt;ul&gt; &lt;li&gt;Presenting the session &lt;a href="http://lachstock.com.au/"&gt;Lachlan Hardy&lt;/a&gt; and I did at &lt;a href="http://www.microsoft.com/australia/remix08/index.aspx"&gt;ReMIX&lt;/a&gt; this year on Internet Explorer 8 at the &lt;a href="http://www.readify.net/rdn.aspx"&gt;RDN&lt;/a&gt; &lt;a href="http://www.readify.net/rdncalendar.aspx"&gt;events&lt;/a&gt; in Sydney and Melbourne. &lt;li&gt;I'm helping to organise and coordinate the &lt;a href="http://www.microsoft.com.au/teched/tech_training.aspx"&gt;Chalk Talks&lt;/a&gt; at this year's &lt;a href="http://www.microsoft.com.au/teched/"&gt;Tech.Ed&lt;/a&gt; in Sydney (more details on this soon). &lt;li&gt;Check out &lt;a href="http://www.webdirections.org/"&gt;Web Directions South&lt;/a&gt; in Sydney. &lt;li&gt;Do some further updates to &lt;a href="http://www.iphonespeedcheck.com"&gt;www.iphonespeedcheck.com&lt;/a&gt; &lt;li&gt;Explore the new features in &lt;a href="http://www.codeplex.com/aspnet/Release/ProjectReleases.aspx?ReleaseId=15511"&gt;ASP.NET AJAX 4&lt;/a&gt;. &lt;li&gt;Add some new features to the &lt;a href="http://www.codeplex.com/accesskeyhighlighter"&gt;AccessKeyHighlighter&lt;/a&gt; AJAX control. &lt;li&gt;Record some screencasts on the AccessKeyHighlighter and ASP.NET AJAX 4. &lt;li&gt;Participate in the &lt;a href="http://blogs.msdn.com/ie/archive/2008/07/30/wanted-ie8-beta-testers.aspx"&gt;Internet Explorer 8 Beta 2 Feedback&lt;/a&gt; and generally checking out what it has to offer. &lt;li&gt;Look into completing the requirements to become a &lt;a href="http://www.microsoft.com/learning/mcp/mct/"&gt;Microsoft Certified Trainer&lt;/a&gt;. &lt;li&gt;Build a new developer workstation for home.&lt;/ul&gt; &lt;p&gt;Phew, that looks like enough! If you want to know what I'm thinking at any given time I can usually be heard chirping over on &lt;a href="https://twitter.com/DamianEdwards"&gt;Twitter&lt;/a&gt;.&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-6883226023675471693&amp;page=RSS%3a+What+have+I+been+up+to%3f&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=damianpedwards.spaces.live.com&amp;amp;GT1=DamianPEdwards"&gt;</description><category>Readify</category><comments>http://DamianPEdwards.spaces.live.com/Blog/cns!A079DE667E1958B3!689.entry#comment</comments><guid isPermaLink="true">http://DamianPEdwards.spaces.live.com/Blog/cns!A079DE667E1958B3!689.entry</guid><pubDate>Sat, 02 Aug 2008 11:13:43 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://DamianPEdwards.spaces.live.com/blog/cns!A079DE667E1958B3!689/comments/feed.rss</wfw:commentRss><wfw:comment>http://DamianPEdwards.spaces.live.com/Blog/cns!A079DE667E1958B3!689.entry#comment</wfw:comment><dcterms:modified>2008-08-02T11:13:43Z</dcterms:modified></item><item><title>AccessKeyHighlighter v1.0.1 released</title><link>http://DamianPEdwards.spaces.live.com/Blog/cns!A079DE667E1958B3!637.entry</link><description>&lt;p&gt;I've &lt;a href="https://www.codeplex.com/Release/ProjectReleases.aspx?ProjectName=accesskeyhighlighter&amp;amp;ReleaseId=13800"&gt;released an update&lt;/a&gt; to the AccessKeyHighlighter to resolve a couple of issues and add some new features. Check it out on its &lt;a href="http://www.codeplex.com/accesskeyhighlighter"&gt;CodePlex page&lt;/a&gt;. &lt;br&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-6883226023675471693&amp;page=RSS%3a+AccessKeyHighlighter+v1.0.1+released&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=damianpedwards.spaces.live.com&amp;amp;GT1=DamianPEdwards"&gt;</description><category>Readify</category><comments>http://DamianPEdwards.spaces.live.com/Blog/cns!A079DE667E1958B3!637.entry#comment</comments><guid isPermaLink="true">http://DamianPEdwards.spaces.live.com/Blog/cns!A079DE667E1958B3!637.entry</guid><pubDate>Sat, 31 May 2008 00:05:22 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://DamianPEdwards.spaces.live.com/blog/cns!A079DE667E1958B3!637/comments/feed.rss</wfw:commentRss><wfw:comment>http://DamianPEdwards.spaces.live.com/Blog/cns!A079DE667E1958B3!637.entry#comment</wfw:comment><dcterms:modified>2008-06-30T01:49:47Z</dcterms:modified></item><item><title>Announcing the AccessKeyHighlighter control for ASP.NET AJAX</title><link>http://DamianPEdwards.spaces.live.com/Blog/cns!A079DE667E1958B3!629.entry</link><description>&lt;p&gt;I've finally managed to get the first release of my &lt;a href="http://www.codeplex.com/accesskeyhighlighter"&gt;AccessKeyHighlighter control for ASP.NET AJAX&lt;/a&gt; published. When the control is placed on a form it highlights the access keys assigned to form fields when the user holds down the access key shortcut key in their browser (Alt for IE &amp;amp; Safari, Shift+Alt for Firefox). You can see a live demo of it in action &lt;a href="http://files.damianedwards.com/AccessKeyHighlighter"&gt;here&lt;/a&gt;. &lt;p&gt;If you find it useful, be sure to leave me a note on the CodePlex site, and if you find any issues or have any suggestions for improvements or new features, please create a feature request on the Issue Tracker page.&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-6883226023675471693&amp;page=RSS%3a+Announcing+the+AccessKeyHighlighter+control+for+ASP.NET+AJAX&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=damianpedwards.spaces.live.com&amp;amp;GT1=DamianPEdwards"&gt;</description><category>Readify</category><comments>http://DamianPEdwards.spaces.live.com/Blog/cns!A079DE667E1958B3!629.entry#comment</comments><guid isPermaLink="true">http://DamianPEdwards.spaces.live.com/Blog/cns!A079DE667E1958B3!629.entry</guid><pubDate>Sun, 25 May 2008 07:23:51 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://DamianPEdwards.spaces.live.com/blog/cns!A079DE667E1958B3!629/comments/feed.rss</wfw:commentRss><wfw:comment>http://DamianPEdwards.spaces.live.com/Blog/cns!A079DE667E1958B3!629.entry#comment</wfw:comment><dcterms:modified>2008-05-25T09:51:21Z</dcterms:modified></item><item><title>ReMIX08 Australia Welcome to Internet Explorer 8 session content</title><link>http://DamianPEdwards.spaces.live.com/Blog/cns!A079DE667E1958B3!622.entry</link><description>&lt;p&gt;Thanks to all those who attended my and &lt;a href="http://log.lachstock.com.au/"&gt;Lachlan's&lt;/a&gt; &lt;a href="http://www.microsoft.com/australia/remix08/sessions.aspx"&gt;session&lt;/a&gt; on IE8 at &lt;a href="http://www.microsoft.com/australia/remix08/index.aspx"&gt;ReMIX&lt;/a&gt; in Sydney and Melbourne. We hope you got something out of it. You can download the deck and demo from the session below. 
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://files.damianedwards.com/ReMIX08/IE8ReMIX08.pptx"&gt;ReMIX Welcome to Internet Explorer 8: PowerPoint slide deck&lt;/a&gt; 
&lt;li&gt;&lt;a href="http://files.damianedwards.com/ReMIX08/ReMIX08Demo.zip"&gt;ReMIX Welcome to Internet Explorer 8: Demos&lt;/a&gt;&lt;/ul&gt;&lt;br&gt;&lt;br&gt; &lt;br&gt; &lt;br&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-6883226023675471693&amp;page=RSS%3a+ReMIX08+Australia+Welcome+to+Internet+Explorer+8+session+content&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=damianpedwards.spaces.live.com&amp;amp;GT1=DamianPEdwards"&gt;</description><category>Readify</category><comments>http://DamianPEdwards.spaces.live.com/Blog/cns!A079DE667E1958B3!622.entry#comment</comments><guid isPermaLink="true">http://DamianPEdwards.spaces.live.com/Blog/cns!A079DE667E1958B3!622.entry</guid><pubDate>Thu, 22 May 2008 11:22:00 GMT</pubDate><slash:comments>11</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://DamianPEdwards.spaces.live.com/blog/cns!A079DE667E1958B3!622/comments/feed.rss</wfw:commentRss><wfw:comment>http://DamianPEdwards.spaces.live.com/Blog/cns!A079DE667E1958B3!622.entry#comment</wfw:comment><dcterms:modified>2008-08-13T12:15:24Z</dcterms:modified></item><item><title>Suggested improvements for CSS editor in Visual Web Developer and Expression Web</title><link>http://DamianPEdwards.spaces.live.com/Blog/cns!A079DE667E1958B3!619.entry</link><description>&lt;p&gt;People who know me will know that I love CSS and that I can often be found with my head deep in a CSS file in Visual Web Developer (the web tools in Visual Studio). Recently I've been thinking about how Microsoft could make the support for editing CSS files directly in these tools more conducive to discovering features of CSS you don't know about, improving productivity through better contextual awareness, and offering insight as to real world issues such as browser compatibilities. &lt;p&gt;So I've put together a &lt;a href="http://files.damianedwards.com/VisualWebDeveloperImprovementSuggestions.pptx"&gt;series of mock-ups&lt;/a&gt; that illustrate some of the ideas I have for improving the support for CSS file editing: &lt;ul&gt; &lt;li&gt;Inline RGB colour picker &lt;li&gt;Ability to define colour swatches in XML comments including name, RGB and category &lt;li&gt;Inline colour swatch picker with $ keyboard shortcut that replaces name with hex RGB value on completion &lt;li&gt;Inline named colour picker with preview of named colour in pick list &lt;li&gt;Ability to choose browsers to warn of incompatibilities with when schema checking CSS &lt;li&gt;Green &amp;quot;squigglies&amp;quot; under CSS selectors and properties know to be unsupported or have issues in chosen warning browsers &lt;li&gt;ToolTips for CSS properties showing description and browser compatibility summary with hyperlinks to further information &lt;li&gt;ToolTips for CSS selectors showing description of what elements it will select, browser compatibility summary and specificity score with hyperlinks to further information on each &lt;li&gt;ToolTip preview of url resources (images) showing file size and image dimensions &lt;li&gt;ToolTip preview of font-family showing font source (TrueType, W3C, etc.) and font rendering preview &lt;li&gt;Support for automatic indenting of style declarations based on descendant or child selectors if they appear after each other&lt;/ul&gt; &lt;p&gt;Hopefully somebody on the &lt;a href="http://blogs.msdn.com/expression/default.aspx"&gt;appropriate&lt;/a&gt; &lt;a href="http://blogs.msdn.com/webdevtools/default.aspx"&gt;teams&lt;/a&gt; in Microsoft will here me :)&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-6883226023675471693&amp;page=RSS%3a+Suggested+improvements+for+CSS+editor+in+Visual+Web+Developer+and+Expression+Web&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=damianpedwards.spaces.live.com&amp;amp;GT1=DamianPEdwards"&gt;</description><category>Readify</category><comments>http://DamianPEdwards.spaces.live.com/Blog/cns!A079DE667E1958B3!619.entry#comment</comments><guid isPermaLink="true">http://DamianPEdwards.spaces.live.com/Blog/cns!A079DE667E1958B3!619.entry</guid><pubDate>Wed, 21 May 2008 04:08:45 GMT</pubDate><slash:comments>2</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://DamianPEdwards.spaces.live.com/blog/cns!A079DE667E1958B3!619/comments/feed.rss</wfw:commentRss><wfw:comment>http://DamianPEdwards.spaces.live.com/Blog/cns!A079DE667E1958B3!619.entry#comment</wfw:comment><dcterms:modified>2008-05-21T04:08:45Z</dcterms:modified></item><item><title>Presenting at ReMIX Australia</title><link>http://DamianPEdwards.spaces.live.com/Blog/cns!A079DE667E1958B3!618.entry</link><description>&lt;p&gt;This week I'm presenting at &lt;a href="http://www.microsoft.com/australia/remix08/index.aspx"&gt;ReMIX&lt;/a&gt; Australia in Sydney (yesterday) and Melbourne (tomorrow). I'm presenting a &lt;a href="http://www.microsoft.com/australia/remix08/sessions.aspx"&gt;session&lt;/a&gt; along with &lt;a href="http://lachstock.com.au/"&gt;Lachlan Hardy&lt;/a&gt; on &lt;a href="http://www.microsoft.com/windows/products/winfamily/ie/ie8/default.mspx"&gt;Internet Explorer 8&lt;/a&gt;. The talk focuses heavily on web standards as that is the big news for IE8. Hope to see you there.&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-6883226023675471693&amp;page=RSS%3a+Presenting+at+ReMIX+Australia&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=damianpedwards.spaces.live.com&amp;amp;GT1=DamianPEdwards"&gt;</description><category>Readify</category><comments>http://DamianPEdwards.spaces.live.com/Blog/cns!A079DE667E1958B3!618.entry#comment</comments><guid isPermaLink="true">http://DamianPEdwards.spaces.live.com/Blog/cns!A079DE667E1958B3!618.entry</guid><pubDate>Wed, 21 May 2008 03:36:07 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://DamianPEdwards.spaces.live.com/blog/cns!A079DE667E1958B3!618/comments/feed.rss</wfw:commentRss><wfw:comment>http://DamianPEdwards.spaces.live.com/Blog/cns!A079DE667E1958B3!618.entry#comment</wfw:comment><dcterms:modified>2008-05-21T03:36:07Z</dcterms:modified></item><item><title>IE8 beta 1 browser version targeting and ASP.NET Themes</title><link>http://DamianPEdwards.spaces.live.com/Blog/cns!A079DE667E1958B3!591.entry</link><description>&lt;p&gt;You might find that when you add the meta tag required to force IE8 beta 1 into IE7 (or 6) rendering mode into your ASP.NET page (or Master Page) that it doesn't work as expected.... IE8 continues to render the site in full standards mode. The reason might be that in beta 1 of IE8 the &amp;quot;X-UA-Compatible&amp;quot; meta tag &lt;strong&gt;must be the first element in the page head element&lt;/strong&gt; and by default ASP.NET will insert the link tags to the CSS files in your theme at the beginning of the head element of your page (or Master Page), before any other elements that might actually be defined in the .aspx or .master file. &lt;p&gt;To fix this, add the following code to the page's (or Master Page's) PreRender event handler (Page_PreRender):&lt;pre&gt;&lt;span style="color:green"&gt;// Move browser tageting meta tag to top of header
&lt;/span&gt;&lt;span style="color:#2b91af"&gt;HtmlMeta &lt;/span&gt;meta = &lt;span style="color:blue"&gt;null&lt;/span&gt;;
&lt;span style="color:blue"&gt;int &lt;/span&gt;metaXUACompatIndex = -&lt;span style="color:magenta"&gt;1&lt;/span&gt;;
&lt;span style="color:blue"&gt;foreach &lt;/span&gt;(&lt;span style="color:#2b91af"&gt;Control &lt;/span&gt;ctl &lt;span style="color:blue"&gt;in &lt;/span&gt;page.Header.Controls)
{
    meta = ctl &lt;span style="color:blue"&gt;as &lt;/span&gt;&lt;span style="color:#2b91af"&gt;HtmlMeta&lt;/span&gt;;
    &lt;span style="color:blue"&gt;if &lt;/span&gt;(meta == &lt;span style="color:blue"&gt;null&lt;/span&gt;)
        &lt;span style="color:blue"&gt;continue&lt;/span&gt;;

    &lt;span style="color:blue"&gt;if &lt;/span&gt;(meta.HttpEquiv == &lt;span style="color:#a31515"&gt;&amp;quot;X-UA-Compatible&amp;quot;&lt;/span&gt;)
    {
        &lt;span style="color:green"&gt;// Grab index
        &lt;/span&gt;metaXUACompatIndex = page.Header.Controls.IndexOf(meta);
        &lt;span style="color:blue"&gt;break&lt;/span&gt;;
    }
}
&lt;span style="color:blue"&gt;if &lt;/span&gt;(metaXUACompatIndex &amp;gt; &lt;span style="color:magenta"&gt;0&lt;/span&gt;)
{
    &lt;span style="color:#2b91af"&gt;HtmlMeta &lt;/span&gt;metaXUACompat = page.Header.Controls[metaXUACompatIndex] &lt;span style="color:blue"&gt;as &lt;/span&gt;&lt;span style="color:#2b91af"&gt;HtmlMeta&lt;/span&gt;;
    page.Header.Controls.RemoveAt(metaXUACompatIndex);
    page.Header.Controls.AddAt(&lt;span style="color:magenta"&gt;0&lt;/span&gt;, metaXUACompat);
}&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;
&lt;p&gt;This will move the browser targeting meta tag to the top of the list so that IE8 will honour it.&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-6883226023675471693&amp;page=RSS%3a+IE8+beta+1+browser+version+targeting+and+ASP.NET+Themes&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=damianpedwards.spaces.live.com&amp;amp;GT1=DamianPEdwards"&gt;</description><category>Readify</category><comments>http://DamianPEdwards.spaces.live.com/Blog/cns!A079DE667E1958B3!591.entry#comment</comments><guid isPermaLink="true">http://DamianPEdwards.spaces.live.com/Blog/cns!A079DE667E1958B3!591.entry</guid><pubDate>Tue, 11 Mar 2008 01:08:49 GMT</pubDate><slash:comments>4</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://DamianPEdwards.spaces.live.com/blog/cns!A079DE667E1958B3!591/comments/feed.rss</wfw:commentRss><wfw:comment>http://DamianPEdwards.spaces.live.com/Blog/cns!A079DE667E1958B3!591.entry#comment</wfw:comment><dcterms:modified>2008-03-11T01:08:49Z</dcterms:modified></item><item><title>I'm at MIX08 in Las Vegas</title><link>http://DamianPEdwards.spaces.live.com/Blog/cns!A079DE667E1958B3!589.entry</link><description>&lt;p&gt;Keep track of what I'm doing (when I have charge) on twitter: &lt;a title="http://twitter.com/DamianEdwards" href="http://twitter.com/DamianEdwards"&gt;http://twitter.com/DamianEdwards&lt;/a&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-6883226023675471693&amp;page=RSS%3a+I'm+at+MIX08+in+Las+Vegas&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=damianpedwards.spaces.live.com&amp;amp;GT1=DamianPEdwards"&gt;</description><category>Readify</category><comments>http://DamianPEdwards.spaces.live.com/Blog/cns!A079DE667E1958B3!589.entry#comment</comments><guid isPermaLink="true">http://DamianPEdwards.spaces.live.com/Blog/cns!A079DE667E1958B3!589.entry</guid><pubDate>Wed, 05 Mar 2008 21:31:27 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://DamianPEdwards.spaces.live.com/blog/cns!A079DE667E1958B3!589/comments/feed.rss</wfw:commentRss><wfw:comment>http://DamianPEdwards.spaces.live.com/Blog/cns!A079DE667E1958B3!589.entry#comment</wfw:comment><dcterms:modified>2008-03-05T21:31:27Z</dcterms:modified></item><item><title>ASP.NET &amp; CSS: Using skins to "zero out" default style and set default CSS class names</title><link>http://DamianPEdwards.spaces.live.com/Blog/cns!A079DE667E1958B3!584.entry</link><description>&lt;p&gt;ASP.NET includes a feature called &amp;quot;Themes&amp;quot; that allows you to organise styling artifacts including CSS stylesheets and images into logical units that can be easily applied to a page or entire site through configuration. Part of this feature is the ability to create .skin files that set default values for certain properties of ASP.NET server controls as part of a theme. &lt;p&gt;Not all properties of ASP.NET controls are skinnable. Indeed the initial intention of .skin files was to enable the setting of default values for properties such as FontColor and BorderWidth, which when serving to CSS supporting browsers ASP.NET will render as inline style attributes on the emitted HTML controls. So what place do they have when we apply all of our style rules via way of attached CSS stylesheets and selectors (the way we should)? &lt;p&gt;Despite their evil initial purpose we can put .skin files to good use for two purposes: &lt;ol&gt; &lt;li&gt;Assigning CSS classes to all instances of particular ASP.NET server controls; and  &lt;li&gt;Zeroing out the default inline style that ASP.NET sets on some controls.&lt;/ol&gt; &lt;p&gt;So how does this work? &lt;p&gt;In your theme folder add a new .skin file called Controls.skin: &lt;p&gt; &lt;a href="http://s511va.tuk.livefilestore.com/y1p8p3J9ORFPvTvOJRwhwGbd3kZme2gZ3ojMosxt04Q8arArcho8aPvLnYKvyFDYYp6r5TLkAJ5R8I?PARTNER=WRITER"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px" height=490 alt="Add a skin file to your theme folder" src="http://s511va.tuk.livefilestore.com/y1pc2epRtTqjlHe1pQIqWMM9x4mUM4_2PfhcRgupdJETY4RYDirmFGAirf7HPx7oJ8ziBPfABGBYO6ryPxkC-w34YoliqjfWym3?PARTNER=WRITER" width=671 border=0&gt;&lt;/a&gt;  &lt;p&gt;Now we want to add some declarations to the file to: &lt;ol&gt; &lt;li&gt;Zero out the inline style of the ASP.NET validator controls; and  &lt;li&gt;Assign a default CSS class name to the Button, LinkButton, TextBox and validator controls.&lt;/ol&gt;&lt;pre&gt;&lt;span style="color:blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;asp&lt;/span&gt;&lt;span style="color:blue"&gt;:&lt;/span&gt;&lt;span style="color:#a31515"&gt;RequiredFieldValidator &lt;/span&gt;&lt;span style="color:red"&gt;runat&lt;/span&gt;&lt;span style="color:blue"&gt;=&amp;quot;server&amp;quot; &lt;/span&gt;&lt;span style="color:red"&gt;ForeColor&lt;/span&gt;&lt;span style="color:blue"&gt;=&amp;quot;&amp;quot; &lt;/span&gt;&lt;span style="color:red"&gt;CssClass&lt;/span&gt;&lt;span style="color:blue"&gt;=&amp;quot;validation-error&amp;quot; /&amp;gt;
&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;asp&lt;/span&gt;&lt;span style="color:blue"&gt;:&lt;/span&gt;&lt;span style="color:#a31515"&gt;RangeValidator &lt;/span&gt;&lt;span style="color:red"&gt;runat&lt;/span&gt;&lt;span style="color:blue"&gt;=&amp;quot;server&amp;quot; &lt;/span&gt;&lt;span style="color:red"&gt;ForeColor&lt;/span&gt;&lt;span style="color:blue"&gt;=&amp;quot;&amp;quot; &lt;/span&gt;&lt;span style="color:red"&gt;CssClass&lt;/span&gt;&lt;span style="color:blue"&gt;=&amp;quot;validation-error&amp;quot; /&amp;gt;
&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;asp&lt;/span&gt;&lt;span style="color:blue"&gt;:&lt;/span&gt;&lt;span style="color:#a31515"&gt;CompareValidator &lt;/span&gt;&lt;span style="color:red"&gt;runat&lt;/span&gt;&lt;span style="color:blue"&gt;=&amp;quot;server&amp;quot; &lt;/span&gt;&lt;span style="color:red"&gt;ForeColor&lt;/span&gt;&lt;span style="color:blue"&gt;=&amp;quot;&amp;quot; &lt;/span&gt;&lt;span style="color:red"&gt;CssClass&lt;/span&gt;&lt;span style="color:blue"&gt;=&amp;quot;validation-error&amp;quot; /&amp;gt;
&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;asp&lt;/span&gt;&lt;span style="color:blue"&gt;:&lt;/span&gt;&lt;span style="color:#a31515"&gt;RegularExpressionValidator &lt;/span&gt;&lt;span style="color:red"&gt;runat&lt;/span&gt;&lt;span style="color:blue"&gt;=&amp;quot;server&amp;quot; &lt;/span&gt;&lt;span style="color:red"&gt;ForeColor&lt;/span&gt;&lt;span style="color:blue"&gt;=&amp;quot;&amp;quot; &lt;/span&gt;&lt;span style="color:red"&gt;CssClass&lt;/span&gt;&lt;span style="color:blue"&gt;=&amp;quot;validation-error&amp;quot; /&amp;gt;
&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;asp&lt;/span&gt;&lt;span style="color:blue"&gt;:&lt;/span&gt;&lt;span style="color:#a31515"&gt;CustomValidator &lt;/span&gt;&lt;span style="color:red"&gt;runat&lt;/span&gt;&lt;span style="color:blue"&gt;=&amp;quot;server&amp;quot; &lt;/span&gt;&lt;span style="color:red"&gt;ForeColor&lt;/span&gt;&lt;span style="color:blue"&gt;=&amp;quot;&amp;quot; &lt;/span&gt;&lt;span style="color:red"&gt;CssClass&lt;/span&gt;&lt;span style="color:blue"&gt;=&amp;quot;validation-error&amp;quot; /&amp;gt;

&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;asp&lt;/span&gt;&lt;span style="color:blue"&gt;:&lt;/span&gt;&lt;span style="color:#a31515"&gt;LinkButton &lt;/span&gt;&lt;span style="color:red"&gt;runat&lt;/span&gt;&lt;span style="color:blue"&gt;=&amp;quot;server&amp;quot; &lt;/span&gt;&lt;span style="color:red"&gt;CssClass&lt;/span&gt;&lt;span style="color:blue"&gt;=&amp;quot;button&amp;quot; /&amp;gt;
&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;asp&lt;/span&gt;&lt;span style="color:blue"&gt;:&lt;/span&gt;&lt;span style="color:#a31515"&gt;Button &lt;/span&gt;&lt;span style="color:red"&gt;runat&lt;/span&gt;&lt;span style="color:blue"&gt;=&amp;quot;server&amp;quot; &lt;/span&gt;&lt;span style="color:red"&gt;CssClass&lt;/span&gt;&lt;span style="color:blue"&gt;=&amp;quot;button&amp;quot; /&amp;gt;
&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;asp&lt;/span&gt;&lt;span style="color:blue"&gt;:&lt;/span&gt;&lt;span style="color:#a31515"&gt;TextBox &lt;/span&gt;&lt;span style="color:red"&gt;runat&lt;/span&gt;&lt;span style="color:blue"&gt;=&amp;quot;server&amp;quot; &lt;/span&gt;&lt;span style="color:red"&gt;CssClass&lt;/span&gt;&lt;span style="color:blue"&gt;=&amp;quot;text-box&amp;quot; /&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;
&lt;p&gt;And that's it! Now when ASP.NET renders these controls when they appear on a page (or in a site) with your theme configured, they'll automatically pick up properties defined in this .skin file.&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-6883226023675471693&amp;page=RSS%3a+ASP.NET+%26+CSS%3a+Using+skins+to+%22zero+out%22+default+style+and+set+default+CSS+class+names&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=damianpedwards.spaces.live.com&amp;amp;GT1=DamianPEdwards"&gt;</description><category>Readify</category><comments>http://DamianPEdwards.spaces.live.com/Blog/cns!A079DE667E1958B3!584.entry#comment</comments><guid isPermaLink="true">http://DamianPEdwards.spaces.live.com/Blog/cns!A079DE667E1958B3!584.entry</guid><pubDate>Fri, 15 Feb 2008 11:01:43 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://DamianPEdwards.spaces.live.com/blog/cns!A079DE667E1958B3!584/comments/feed.rss</wfw:commentRss><wfw:comment>http://DamianPEdwards.spaces.live.com/Blog/cns!A079DE667E1958B3!584.entry#comment</wfw:comment><dcterms:modified>2008-02-15T11:01:43Z</dcterms:modified></item><item><title>ASP.NET: Binding the ObjectDataSource to the hosting page or user control</title><link>http://DamianPEdwards.spaces.live.com/Blog/cns!A079DE667E1958B3!567.entry</link><description>&lt;p&gt;In my recent &lt;a href="http://www.readify.net/rdn.aspx"&gt;RDN&lt;/a&gt; presentation on CSS Layout with ASP.NET &amp;amp; Visual Studio 2008 I mentioned a technique I use to get some extra value from the &lt;a href="http://msdn2.microsoft.com/en-us/library/system.web.ui.webcontrols.objectdatasource.aspx"&gt;ObjectDataSource&lt;/a&gt; control. From speaking with other developers I've found that many people try to use the control only to be dissatisfied with the way it works, and in particular the need to provide it with a separate business logic or gateway class to look for its CRUD methods on. This is most apparent when you are trying to separate the data-access, business and presentation logic through way of a MVC or MVP pattern like &amp;quot;&lt;a href="http://www.martinfowler.com/eaaDev/PassiveScreen.html"&gt;Passive View&lt;/a&gt;&amp;quot;. In this scenario most people go back to the method of setting the &lt;a href="http://msdn2.microsoft.com/en-us/library/ay1s9at1.aspx"&gt;DataSource&lt;/a&gt; property of their data bound control directly and manually calling the &lt;a href="http://msdn2.microsoft.com/en-us/library/bb538538.aspx"&gt;DataBind()&lt;/a&gt; method. This is a shame as it prevents you from realising the productivity gains and ease of maintenance of the no-code support for paging and sorting when using a data source control (plus the ability to fully style the GridView as described in my &lt;a href="http://damianpedwards.spaces.live.com/blog/cns!A079DE667E1958B3!562.entry"&gt;previous article&lt;/a&gt;). &lt;p&gt;Rather than abandoning the ObjectDataSource altogether, we can make it work for us, by sub-classing it and changing it's behaviour slightly so that it looks for its methods on the hosting page or user control instead, i.e. its parent in the control hierarchy. &lt;p&gt;(If you have never looked at the data-source controls and two-way data-binding support in ASP.NET 2.0 before, it might be worth first checking out &lt;a href="http://www.asp.net/learn/data-access/"&gt;Scott Mitchell's excellent tutorials&lt;/a&gt; on the subject.) &lt;p&gt;Start out by adding a new class to your project called ParentDataSource.cs. I like to put all custom and user controls in a Controls sub-folder and thus namespace. &lt;p&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px" height=254 alt="add a new class to your project" src="http://tkfiles.storage.msn.com/y1pnnZ4cNJhIAbKGWhS1fyx_ofUiOQYCIwxh9K7AcxdcRHLj4rkcFet9AUWD4XK4cH3hVJhtGeVME4?PARTNER=WRITER" width=259 border=0&gt;  &lt;p&gt;Make this new class inherit from the ObjectDataSource class and a ToolboxData attribute to define its tag name (you'll need to add some using statements to import the appropriate namespaces too):&lt;pre&gt;&lt;span style="color:blue"&gt;namespace &lt;/span&gt;RDN.CSSReadiDepth.Controls
{
    [&lt;span style="color:#2b91af"&gt;ToolboxData&lt;/span&gt;(&lt;span style="color:#a31515"&gt;&amp;quot;&amp;lt;{0}:ParentDataSource runat=server&amp;gt;&amp;lt;/{0}:ParentDataSource&amp;gt;&amp;quot;&lt;/span&gt;)]
    &lt;span style="color:blue"&gt;public class &lt;/span&gt;&lt;span style="color:#2b91af"&gt;ParentDataSource &lt;/span&gt;: &lt;span style="color:#2b91af"&gt;ObjectDataSource
    &lt;/span&gt;{&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;
&lt;p&gt;Now add a couple of constructors. These do a few things. First they enable paging and sorting by default (you don't need to do this but I use paging and sorting more often than not). Secondly they wire-up some events of the control to local handler methods:&lt;pre&gt;&lt;span style="color:blue"&gt;public &lt;/span&gt;ParentDataSource()
    : &lt;span style="color:blue"&gt;this&lt;/span&gt;(&lt;span style="color:#2b91af"&gt;String&lt;/span&gt;.Empty, &lt;span style="color:#2b91af"&gt;String&lt;/span&gt;.Empty)
{ }

&lt;span style="color:blue"&gt;public &lt;/span&gt;ParentDataSource(&lt;span style="color:blue"&gt;string &lt;/span&gt;typeName, &lt;span style="color:blue"&gt;string &lt;/span&gt;selectMethod)
    : &lt;span style="color:blue"&gt;base&lt;/span&gt;(typeName, selectMethod)
{
    &lt;span style="color:blue"&gt;this&lt;/span&gt;.EnablePaging = &lt;span style="color:blue"&gt;true&lt;/span&gt;;
    &lt;span style="color:blue"&gt;this&lt;/span&gt;.SortParameterName = &lt;span style="color:#a31515"&gt;&amp;quot;sortExpression&amp;quot;&lt;/span&gt;;

    &lt;span style="color:blue"&gt;this&lt;/span&gt;.Init += &lt;span style="color:blue"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af"&gt;EventHandler&lt;/span&gt;(ParentDataSource_Init);
    &lt;span style="color:blue"&gt;this&lt;/span&gt;.ObjectCreating += &lt;span style="color:blue"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af"&gt;ObjectDataSourceObjectEventHandler&lt;/span&gt;(ParentDataSource_ObjectCreating);
    &lt;span style="color:blue"&gt;this&lt;/span&gt;.ObjectDisposing += &lt;span style="color:blue"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af"&gt;ObjectDataSourceDisposingEventHandler&lt;/span&gt;(ParentDataSource_ObjectDisposing);
}&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;
&lt;p&gt;Now we need to add our event handler methods. They're going to do the following:
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/ddx12zse.aspx"&gt;Init&lt;/a&gt; handler: walk the control tree to find the page or user control the data source is being hosted on and then set the TypeName property to the type of the hosting page or user control; 
&lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/33yf82ez.aspx"&gt;ObjectCreating&lt;/a&gt; handler: set the instance of the object we want our data source control to bind to, which will be the page or user control it is hosted on; and 
&lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/9ft3std3.aspx"&gt;ObjectDisposing&lt;/a&gt; handler: cancel the default behaviour of the ObjectDataSource which is to dispose of the object it is bound to.&lt;/ul&gt;&lt;pre&gt;&lt;span style="color:blue"&gt;void &lt;/span&gt;ParentDataSource_Init(&lt;span style="color:blue"&gt;object &lt;/span&gt;sender, &lt;span style="color:#2b91af"&gt;EventArgs &lt;/span&gt;e)
{
&lt;span style="color:blue"&gt;#if &lt;/span&gt;DEBUG
    System.Diagnostics.&lt;span style="color:#2b91af"&gt;Stopwatch &lt;/span&gt;sw = &lt;span style="color:blue"&gt;new &lt;/span&gt;System.Diagnostics.&lt;span style="color:#2b91af"&gt;Stopwatch&lt;/span&gt;();
    sw.Start();
&lt;span style="color:blue"&gt;#endif
    &lt;/span&gt;FindParentHost(&lt;span style="color:blue"&gt;this&lt;/span&gt;);
&lt;span style="color:blue"&gt;#if &lt;/span&gt;DEBUG
    sw.Stop();
    System.Diagnostics.&lt;span style="color:#2b91af"&gt;Debug&lt;/span&gt;.WriteLine(&lt;span style="color:#2b91af"&gt;String&lt;/span&gt;.Format(&lt;span style="color:#a31515"&gt;&amp;quot;Finding parent host for data source took {0}&amp;quot;&lt;/span&gt;, sw.Elapsed));
&lt;span style="color:blue"&gt;#endif
&lt;/span&gt;}

&lt;span style="color:blue"&gt;void &lt;/span&gt;ParentDataSource_ObjectCreating(&lt;span style="color:blue"&gt;object &lt;/span&gt;sender, &lt;span style="color:#2b91af"&gt;ObjectDataSourceEventArgs &lt;/span&gt;e)
{
    e.ObjectInstance = _parentHost;
}

&lt;span style="color:blue"&gt;void &lt;/span&gt;ParentDataSource_ObjectDisposing(&lt;span style="color:blue"&gt;object &lt;/span&gt;sender, &lt;span style="color:#2b91af"&gt;ObjectDataSourceDisposingEventArgs &lt;/span&gt;e)
{
    e.Cancel = &lt;span style="color:blue"&gt;true&lt;/span&gt;;
}&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;
&lt;p&gt;Note I've also included some timing code in the Init handler so you can measure the impact of this method (it's negligible).
&lt;p&gt;Finally we need to add some private members to support the handler methods:&lt;pre&gt;&lt;span style="color:#2b91af"&gt;Object &lt;/span&gt;_parentHost;

&lt;span style="color:gray"&gt;/// &amp;lt;summary&amp;gt;
/// &lt;/span&gt;&lt;span style="color:green"&gt;Walks the control tree to find the hosting parent page or user control
&lt;/span&gt;&lt;span style="color:gray"&gt;/// &amp;lt;/summary&amp;gt;
/// &amp;lt;param name=&amp;quot;ctl&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:green"&gt;The control to start the tree walk at&lt;/span&gt;&lt;span style="color:gray"&gt;&amp;lt;/param&amp;gt;
&lt;/span&gt;&lt;span style="color:blue"&gt;private void &lt;/span&gt;FindParentHost(&lt;span style="color:#2b91af"&gt;Control &lt;/span&gt;ctl)
{
    &lt;span style="color:blue"&gt;if &lt;/span&gt;(ctl.Parent == &lt;span style="color:blue"&gt;null&lt;/span&gt;)
    {
        &lt;span style="color:green"&gt;// User control was not found, use page base type instead
        &lt;/span&gt;&lt;span style="color:blue"&gt;this&lt;/span&gt;.TypeName = &lt;span style="color:blue"&gt;this&lt;/span&gt;.Page.GetType().BaseType.FullName;
        _parentHost = &lt;span style="color:blue"&gt;this&lt;/span&gt;.Page;
        &lt;span style="color:blue"&gt;return&lt;/span&gt;;
    }

    &lt;span style="color:green"&gt;// Find the user control base type
    &lt;/span&gt;&lt;span style="color:#2b91af"&gt;UserControl &lt;/span&gt;parentUC = ctl.Parent &lt;span style="color:blue"&gt;as &lt;/span&gt;&lt;span style="color:#2b91af"&gt;UserControl&lt;/span&gt;;
    &lt;span style="color:#2b91af"&gt;MasterPage &lt;/span&gt;parentMP = ctl.Parent &lt;span style="color:blue"&gt;as &lt;/span&gt;&lt;span style="color:#2b91af"&gt;MasterPage&lt;/span&gt;;
    &lt;span style="color:blue"&gt;if &lt;/span&gt;(parentUC != &lt;span style="color:blue"&gt;null &lt;/span&gt;&amp;amp;&amp;amp; parentMP == &lt;span style="color:blue"&gt;null&lt;/span&gt;)
    {
        &lt;span style="color:#2b91af"&gt;Type &lt;/span&gt;parentBaseType = ctl.Parent.GetType().BaseType;
        &lt;span style="color:blue"&gt;this&lt;/span&gt;.TypeName = parentBaseType.FullName;
        _parentHost = ctl.Parent;
        &lt;span style="color:blue"&gt;return&lt;/span&gt;;
    }
    &lt;span style="color:blue"&gt;else
    &lt;/span&gt;{
        FindParentHost(ctl.Parent);
    }
}&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;
&lt;p&gt;The method FindParentHost, walks the control tree from the data source control until it finds the user control it is hosted on. If it can't find a hosting user control it assumes the control is hosted on a page. Once it finds the host it sets the TypeName property accordingly (note that the &lt;a href="http://msdn2.microsoft.com/en-us/library/system.web.ui.masterpage.aspx"&gt;MasterPage&lt;/a&gt; class actually inherits from &lt;a href="http://msdn2.microsoft.com/en-us/library/system.web.ui.usercontrol.aspx"&gt;UserControl&lt;/a&gt; so we explicitly exclude that case).
&lt;p&gt;Now that we have our customised data source control it's time to use it in anger! Add a declaration to the web.config to import the controls from the DLL containing the ParentDataSource control:&lt;pre&gt;&lt;span style="color:blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;pages &lt;/span&gt;&lt;span style="color:red"&gt;styleSheetTheme&lt;/span&gt;&lt;span style="color:blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue"&gt;Theme1&lt;/span&gt;&amp;quot;&lt;span style="color:blue"&gt;&amp;gt;
  &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;controls&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;
&lt;/span&gt;&lt;span style="color:blue"&gt;    &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;add &lt;/span&gt;&lt;span style="color:red"&gt;tagPrefix&lt;/span&gt;&lt;span style="color:blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue"&gt;cc&lt;/span&gt;&amp;quot; &lt;span style="color:red"&gt;namespace&lt;/span&gt;&lt;span style="color:blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue"&gt;RDN.CSSReadiDepth.Controls&lt;/span&gt;&amp;quot; &lt;span style="color:red"&gt;assembly&lt;/span&gt;&lt;span style="color:blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue"&gt;RDN.CSSReadiDepth&lt;/span&gt;&amp;quot; &lt;span style="color:blue"&gt;/&amp;gt;
  &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;controls&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:blue"&gt;
&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;pages&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;
&lt;p&gt;Now you can place the control in your page or user control mark-up file (.aspx or .ascx) and set the &lt;a href="http://msdn2.microsoft.com/en-us/library/system.web.ui.webcontrols.basedataboundcontrol.datasourceid.aspx"&gt;DataSourceID&lt;/a&gt; of your data-binding target control:&lt;pre&gt;&lt;span style="color:blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;asp&lt;/span&gt;&lt;span style="color:blue"&gt;:&lt;/span&gt;&lt;span style="color:#a31515"&gt;GridView &lt;/span&gt;&lt;span style="color:red"&gt;ID&lt;/span&gt;&lt;span style="color:blue"&gt;=&amp;quot;gvExample&amp;quot; &lt;/span&gt;&lt;span style="color:red"&gt;runat&lt;/span&gt;&lt;span style="color:blue"&gt;=&amp;quot;server&amp;quot; &lt;/span&gt;&lt;span style="color:red"&gt;DataSourceID&lt;/span&gt;&lt;span style="color:blue"&gt;=&amp;quot;pdsExample&amp;quot; &lt;/span&gt;&lt;span style="color:red"&gt;DataKeyNames&lt;/span&gt;&lt;span style="color:blue"&gt;=&amp;quot;Id&amp;quot;
    &lt;/span&gt;&lt;span style="color:red"&gt;AllowPaging&lt;/span&gt;&lt;span style="color:blue"&gt;=&amp;quot;true&amp;quot; &lt;/span&gt;&lt;span style="color:red"&gt;AllowSorting&lt;/span&gt;&lt;span style="color:blue"&gt;=&amp;quot;true&amp;quot; &lt;/span&gt;&lt;span style="color:red"&gt;PageSize&lt;/span&gt;&lt;span style="color:blue"&gt;=&amp;quot;10&amp;quot; &lt;/span&gt;&lt;span style="color:red"&gt;AutoGenerateColumns&lt;/span&gt;&lt;span style="color:blue"&gt;=&amp;quot;false&amp;quot;
    &lt;/span&gt;&lt;span style="color:red"&gt;CssClass&lt;/span&gt;&lt;span style="color:blue"&gt;=&amp;quot;customers-grid&amp;quot;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;Columns&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;asp&lt;/span&gt;&lt;span style="color:blue"&gt;:&lt;/span&gt;&lt;span style="color:#a31515"&gt;BoundField &lt;/span&gt;&lt;span style="color:red"&gt;HeaderText&lt;/span&gt;&lt;span style="color:blue"&gt;=&amp;quot;First Name&amp;quot; &lt;/span&gt;&lt;span style="color:red"&gt;DataField&lt;/span&gt;&lt;span style="color:blue"&gt;=&amp;quot;FirstName&amp;quot; &lt;/span&gt;&lt;span style="color:red"&gt;SortExpression&lt;/span&gt;&lt;span style="color:blue"&gt;=&amp;quot;FirstName&amp;quot;
            &lt;/span&gt;&lt;span style="color:red"&gt;HeaderStyle-CssClass&lt;/span&gt;&lt;span style="color:blue"&gt;=&amp;quot;first-name&amp;quot; &lt;/span&gt;&lt;span style="color:red"&gt;ItemStyle-CssClass&lt;/span&gt;&lt;span style="color:blue"&gt;=&amp;quot;first-name&amp;quot;
            &lt;/span&gt;&lt;span style="color:red"&gt;AccessibleHeaderText&lt;/span&gt;&lt;span style="color:blue"&gt;=&amp;quot;The customer's first name&amp;quot; /&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;asp&lt;/span&gt;&lt;span style="color:blue"&gt;:&lt;/span&gt;&lt;span style="color:#a31515"&gt;BoundField &lt;/span&gt;&lt;span style="color:red"&gt;HeaderText&lt;/span&gt;&lt;span style="color:blue"&gt;=&amp;quot;Last Name&amp;quot; &lt;/span&gt;&lt;span style="color:red"&gt;DataField&lt;/span&gt;&lt;span style="color:blue"&gt;=&amp;quot;LastName&amp;quot; &lt;/span&gt;&lt;span style="color:red"&gt;SortExpression&lt;/span&gt;&lt;span style="color:blue"&gt;=&amp;quot;LastName&amp;quot;
            &lt;/span&gt;&lt;span style="color:red"&gt;HeaderStyle-CssClass&lt;/span&gt;&lt;span style="color:blue"&gt;=&amp;quot;last-name&amp;quot; &lt;/span&gt;&lt;span style="color:red"&gt;ItemStyle-CssClass&lt;/span&gt;&lt;span style="color:blue"&gt;=&amp;quot;last-name&amp;quot;
            &lt;/span&gt;&lt;span style="color:red"&gt;AccessibleHeaderText&lt;/span&gt;&lt;span style="color:blue"&gt;=&amp;quot;The customer's last name&amp;quot; /&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;asp&lt;/span&gt;&lt;span style="color:blue"&gt;:&lt;/span&gt;&lt;span style="color:#a31515"&gt;BoundField &lt;/span&gt;&lt;span style="color:red"&gt;HeaderText&lt;/span&gt;&lt;span style="color:blue"&gt;=&amp;quot;Age&amp;quot; &lt;/span&gt;&lt;span style="color:red"&gt;DataField&lt;/span&gt;&lt;span style="color:blue"&gt;=&amp;quot;Age&amp;quot; &lt;/span&gt;&lt;span style="color:red"&gt;SortExpression&lt;/span&gt;&lt;span style="color:blue"&gt;=&amp;quot;Age&amp;quot;
            &lt;/span&gt;&lt;span style="color:red"&gt;HeaderStyle-CssClass&lt;/span&gt;&lt;span style="color:blue"&gt;=&amp;quot;age&amp;quot; &lt;/span&gt;&lt;span style="color:red"&gt;ItemStyle-CssClass&lt;/span&gt;&lt;span style="color:blue"&gt;=&amp;quot;age&amp;quot;
            &lt;/span&gt;&lt;span style="color:red"&gt;AccessibleHeaderText&lt;/span&gt;&lt;span style="color:blue"&gt;=&amp;quot;The age of the customer&amp;quot; /&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;asp&lt;/span&gt;&lt;span style="color:blue"&gt;:&lt;/span&gt;&lt;span style="color:#a31515"&gt;BoundField &lt;/span&gt;&lt;span style="color:red"&gt;HeaderText&lt;/span&gt;&lt;span style="color:blue"&gt;=&amp;quot;Member for&amp;quot; &lt;/span&gt;&lt;span style="color:red"&gt;DataField&lt;/span&gt;&lt;span style="color:blue"&gt;=&amp;quot;YearsAsMember&amp;quot; &lt;/span&gt;&lt;span style="color:red"&gt;SortExpression&lt;/span&gt;&lt;span style="color:blue"&gt;=&amp;quot;YearsAsMember&amp;quot;
            &lt;/span&gt;&lt;span style="color:red"&gt;HeaderStyle-CssClass&lt;/span&gt;&lt;span style="color:blue"&gt;=&amp;quot;years-as-member&amp;quot; &lt;/span&gt;&lt;span style="color:red"&gt;ItemStyle-CssClass&lt;/span&gt;&lt;span style="color:blue"&gt;=&amp;quot;years-as-member&amp;quot;
            &lt;/span&gt;&lt;span style="color:red"&gt;AccessibleHeaderText&lt;/span&gt;&lt;span style="color:blue"&gt;=&amp;quot;How many years the customer has been a member for&amp;quot; /&amp;gt;
    &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;Columns&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;asp&lt;/span&gt;&lt;span style="color:blue"&gt;:&lt;/span&gt;&lt;span style="color:#a31515"&gt;GridView&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;&lt;br&gt;&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;cc&lt;/span&gt;&lt;span style="color:blue"&gt;:&lt;/span&gt;&lt;span style="color:#a31515"&gt;ParentDataSource &lt;/span&gt;&lt;span style="color:red"&gt;ID&lt;/span&gt;&lt;span style="color:blue"&gt;=&amp;quot;pdsExample&amp;quot; &lt;/span&gt;&lt;span style="color:red"&gt;runat&lt;/span&gt;&lt;span style="color:blue"&gt;=&amp;quot;server&amp;quot;
    &lt;/span&gt;&lt;span style="color:red"&gt;SelectMethod&lt;/span&gt;&lt;span style="color:blue"&gt;=&amp;quot;GetData&amp;quot; &lt;/span&gt;&lt;span style="color:red"&gt;SelectCountMethod&lt;/span&gt;&lt;span style="color:blue"&gt;=&amp;quot;GetDataRowCount&amp;quot; /&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;
&lt;p&gt;In this example I need to implement two methods on my page's code-behind file: GetData and GetDataRowCount. The first gets the current page of data to display, the second gets the total number of records (this is needed so the data source controls can calculate paging information):&lt;pre&gt;&lt;span style="color:blue"&gt;#region &lt;/span&gt;&amp;lt;&amp;lt; Data Binding Methods &amp;gt;&amp;gt;&lt;/pre&gt;&lt;pre&gt;&lt;span style="color:blue"&gt;public &lt;/span&gt;&lt;span style="color:#2b91af"&gt;IEnumerable&lt;/span&gt;&amp;lt;&lt;span style="color:#2b91af"&gt;Customer&lt;/span&gt;&amp;gt; GetData(&lt;span style="color:blue"&gt;string &lt;/span&gt;sortExpression, &lt;span style="color:blue"&gt;int &lt;/span&gt;maximumRows, &lt;span style="color:blue"&gt;int &lt;/span&gt;startRowIndex)
{
    &lt;span style="color:blue"&gt;if &lt;/span&gt;(&lt;span style="color:blue"&gt;this&lt;/span&gt;.Customers == &lt;span style="color:blue"&gt;null &lt;/span&gt;|| &lt;span style="color:blue"&gt;this&lt;/span&gt;.Customers.Count == &lt;span style="color:magenta"&gt;0&lt;/span&gt;)
        &lt;span style="color:blue"&gt;return this&lt;/span&gt;.Customers;

    &lt;span style="color:blue"&gt;var &lt;/span&gt;sortFunc = &lt;span style="color:blue"&gt;this&lt;/span&gt;.Customers[&lt;span style="color:magenta"&gt;0&lt;/span&gt;].GetPropertySelector&amp;lt;&lt;span style="color:#2b91af"&gt;Customer&lt;/span&gt;, &lt;span style="color:blue"&gt;object&lt;/span&gt;&amp;gt;(sortExpression.Replace(&lt;span style="color:#a31515"&gt;&amp;quot; DESC&amp;quot;&lt;/span&gt;, &lt;span style="color:#a31515"&gt;&amp;quot;&amp;quot;&lt;/span&gt;));

    &lt;span style="color:blue"&gt;if &lt;/span&gt;(sortExpression.ToUpper().IndexOf(&lt;span style="color:#a31515"&gt;&amp;quot; DESC&amp;quot;&lt;/span&gt;) &amp;gt;= &lt;span style="color:magenta"&gt;0&lt;/span&gt;)
    {
        &lt;span style="color:blue"&gt;return this&lt;/span&gt;.Customers
                &lt;span style="color:green"&gt;// Sort descending
                &lt;/span&gt;.OrderByDescending(sortFunc)
                &lt;span style="color:green"&gt;// Grab a single page of data
                &lt;/span&gt;.Skip((startRowIndex / maximumRows) * maximumRows)
                .Take(maximumRows);
    }
    &lt;span style="color:blue"&gt;else
    &lt;/span&gt;{
        &lt;span style="color:blue"&gt;return this&lt;/span&gt;.Customers
                &lt;span style="color:green"&gt;// Sort ascending
                &lt;/span&gt;.OrderBy(sortFunc)
                &lt;span style="color:green"&gt;// Grab a single page of data
                &lt;/span&gt;.Skip((startRowIndex / maximumRows) * maximumRows)
                .Take(maximumRows);
    }
}&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;pre&gt;&lt;span style="color:blue"&gt;public int &lt;/span&gt;GetDataRowCount()
{
    &lt;span style="color:blue"&gt;return &lt;/span&gt;(&lt;span style="color:blue"&gt;this&lt;/span&gt;.Customers != &lt;span style="color:blue"&gt;null &lt;/span&gt;? &lt;span style="color:blue"&gt;this&lt;/span&gt;.Customers.Count : &lt;span style="color:magenta"&gt;0&lt;/span&gt;);
}

&lt;span style="color:blue"&gt;#endregion&lt;/span&gt;&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;
&lt;p&gt;In this example the data is stored in a property on the page class itself and I'm using LINQ to simulate sorting and paging. The property is just wrapping calls into the application's session state. The data itself was loaded into session state when the application started up. In a real world example these calls might look up the data from a web-service or database, return data from cache, or in the MVP scenario first raise an event that the presenter class will handle and then return the value of a property on the page (who's contents was set by the event handler in the presenter class). Also, because these methods are instance methods on the actual page object you are free to manipulate other controls or properties of the page class.
&lt;p&gt;You can use this method equally well with any of the ASP.NET controls that support the data source controls, such as &lt;a href="http://msdn2.microsoft.com/en-us/library/system.web.ui.webcontrols.gridview.aspx"&gt;GridView&lt;/a&gt;, &lt;a href="http://msdn2.microsoft.com/en-us/library/system.web.ui.webcontrols.detailsview.aspx"&gt;DetailsView&lt;/a&gt;, &lt;a href="http://msdn2.microsoft.com/en-us/library/system.web.ui.webcontrols.formview.aspx"&gt;FormView&lt;/a&gt; and &lt;a href="http://msdn2.microsoft.com/en-us/library/system.web.ui.webcontrols.repeater.aspx"&gt;Repeater&lt;/a&gt;. It also works with two-way data-binding.
&lt;p&gt;&lt;a href="http://files.damianedwards.com/CSSASPNETDepth/RDN - CSS ReadiDepth.zip"&gt;Download the sample solution used in this article here&lt;/a&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-6883226023675471693&amp;page=RSS%3a+ASP.NET%3a+Binding+the+ObjectDataSource+to+the+hosting+page+or+user+control&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=damianpedwards.spaces.live.com&amp;amp;GT1=DamianPEdwards"&gt;</description><category>Readify</category><comments>http://DamianPEdwards.spaces.live.com/Blog/cns!A079DE667E1958B3!567.entry#comment</comments><guid isPermaLink="true">http://DamianPEdwards.spaces.live.com/Blog/cns!A079DE667E1958B3!567.entry</guid><pubDate>Wed, 06 Feb 2008 09:01:34 GMT</pubDate><slash:comments>1</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://DamianPEdwards.spaces.live.com/blog/cns!A079DE667E1958B3!567/comments/feed.rss</wfw:commentRss><wfw:comment>http://DamianPEdwards.spaces.live.com/Blog/cns!A079DE667E1958B3!567.entry#comment</wfw:comment><dcterms:modified>2008-02-07T02:57:31Z</dcterms:modified></item><item><title>ASP.NET &amp; CSS: Styling sortable columns in the GridView using CSS</title><link>http://DamianPEdwards.spaces.live.com/Blog/cns!A079DE667E1958B3!562.entry</link><description>&lt;p&gt;The following is an article describing one of the techniques I spoke about during my recent &lt;a href="http://www.readify.net/rdncalendar.aspx"&gt;RDN&lt;/a&gt; topic, &lt;a href="http://damianpedwards.spaces.live.com/blog/cns!A079DE667E1958B3!558.entry"&gt;CSS Layout with ASP.NET &amp;amp; Visual Studio 2008&lt;/a&gt;. 
&lt;p&gt;A common user interface requirement for applications is to visually indicate when: 
&lt;ol&gt;
&lt;li&gt;a column in a grid is sortable; 
&lt;li&gt;which column in a grid is currently the sort column; and 
&lt;li&gt;which direction the sort is being applied in (ascending or descending).&lt;/ol&gt;
&lt;p&gt;In ASP.NET, we generally use the &lt;a href="http://msdn2.microsoft.com/en-us/library/system.web.ui.webcontrols.gridview(VS.80).aspx"&gt;GridView&lt;/a&gt; control to display tabular data and provide the user with the ability to &lt;a href="http://msdn2.microsoft.com/en-us/library/01y1beh5(VS.80).aspx"&gt;sort&lt;/a&gt; and &lt;a href="http://msdn2.microsoft.com/en-us/library/7c4a91wd(VS.80).aspx"&gt;page&lt;/a&gt; through that data. There are &lt;a href="http://msdn.microsoft.com/msdnmag/issues/04/08/GridView/#S5"&gt;many&lt;/a&gt; &lt;a href="http://dotnetjunkies.com/WebLog/thomasswilliams/archive/2005/11/09/133667.aspx"&gt;examples&lt;/a&gt; &lt;a href="http://geekswithblogs.net/ram/archive/2006/07/13/GridViewGenericSortImagesFunction.aspx"&gt;on&lt;/a&gt; &lt;a href="http://msdn2.microsoft.com/en-us/library/system.web.ui.webcontrols.gridview.sortexpression.aspx"&gt;the&lt;/a&gt; &lt;a href="http://blog.devexperience.net/en/2/Display_an_arrow_in_the_header_of_GridView.aspx"&gt;web&lt;/a&gt; of techniques you can use to programmatically insert an image to indicate the currently sorted column and its sort direction (including the &lt;a href="http://msdn2.microsoft.com/en-us/library/system.web.ui.webcontrols.gridview.sortexpression.aspx"&gt;MSDN documentation&lt;/a&gt;). There are a number of problems with this approach: 
&lt;ol&gt;
&lt;li&gt;It mixes functional code with presentation logic. The code behind for our pages and user controls is complicated enough without having to trawl through formatting and layout logic; 
&lt;li&gt;It requires you to add this code on every GridView (or sub-class the GridView and use the new version instead); and 
&lt;li&gt;It dilutes the semantic meaning of the resultant HTML mark-up, thus affecting the page's usability (IMG tags have no place in the header of a TABLE).&lt;/ol&gt;
&lt;p&gt;So what's a better solution I hear you say? The following solution uses ASP.NET, the &lt;a href="http://www.codeplex.com/cssfriendly/"&gt;CSS Friendly Control Adapters&lt;/a&gt; and CSS styling to: 
&lt;ol&gt;
&lt;li&gt;add sorting information to a GridView in a semantic and accessible fashion; and 
&lt;li&gt;apply visual effects relating to sorting behaviour.&lt;/ol&gt;
&lt;p&gt;The &lt;a href="http://www.codeplex.com/cssfriendly"&gt;CSS Friendly Control Adapters&lt;/a&gt; alter the HTML mark-up produced by ASP.NET for many of the included server controls so that it is more accessible, standards compliant and, importantly, easier to style using CSS. You can grab the latest &lt;a href="http://www.codeplex.com/cssfriendly/SourceControl/ListDownloadableCommits.aspx"&gt;source code&lt;/a&gt; for the adapters from &lt;a href="http://www.codeplex.com/"&gt;CodePlex&lt;/a&gt; (be sure to download from the &lt;a href="http://www.codeplex.com/cssfriendly/SourceControl/ListDownloadableCommits.aspx"&gt;source code section&lt;/a&gt;, not the release section), however the technique shown here requires a small change to the included GridView adapter (further details about incorporating the CSS Friendly Control Adapters into your web project are included in the download). So, once you've downloaded the source, open up the solution and find the GridViewAdapter.cs file: 
&lt;p&gt;&lt;img style="border-width:0px" alt=image src="http://tkfiles.storage.msn.com/y1pnnZ4cNJhIAaxa9K-frFVG869xw15M1nse6rR3gpks9k_6MObG_iRLpSVJIeLCBYW2A70B2EYc8Q?PARTNER=WRITER" border=0 width=277 height=432&gt; 
&lt;p&gt;Replace its contents with &lt;a href="http://files.damianedwards.com/CSSASPNETDepth/GridViewAdapter.zip"&gt;this modified version&lt;/a&gt;. This adds a new function that sets the CSS class of the GridView's header cells based on which column the GridView is currently sorted by. So for example if I have a GridView defined as such:&lt;pre&gt;&lt;span style="color:blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:rgb(163, 21, 21)"&gt;asp&lt;/span&gt;&lt;span style="color:blue"&gt;:&lt;/span&gt;&lt;span style="color:rgb(163, 21, 21)"&gt;GridView &lt;/span&gt;&lt;span style="color:red"&gt;ID&lt;/span&gt;&lt;span style="color:blue"&gt;=&amp;quot;gvExample&amp;quot; &lt;/span&gt;&lt;span style="color:red"&gt;runat&lt;/span&gt;&lt;span style="color:blue"&gt;=&amp;quot;server&amp;quot; &lt;/span&gt;&lt;span style="color:red"&gt;DataSourceID&lt;/span&gt;&lt;span style="color:blue"&gt;=&amp;quot;pdsExample&amp;quot; &lt;/span&gt;&lt;span style="color:red"&gt;DataKeyNames&lt;/span&gt;&lt;span style="color:blue"&gt;=&amp;quot;Id&amp;quot;&lt;br&gt;    &lt;/span&gt;&lt;span style="color:red"&gt;AllowPaging&lt;/span&gt;&lt;span style="color:blue"&gt;=&amp;quot;true&amp;quot; &lt;/span&gt;&lt;span style="color:red"&gt;AllowSorting&lt;/span&gt;&lt;span style="color:blue"&gt;=&amp;quot;true&amp;quot; &lt;/span&gt;&lt;span style="color:red"&gt;PageSize&lt;/span&gt;&lt;span style="color:blue"&gt;=&amp;quot;10&amp;quot; &lt;/span&gt;&lt;span style="color:red"&gt;AutoGenerateColumns&lt;/span&gt;&lt;span style="color:blue"&gt;=&amp;quot;false&amp;quot; &lt;/span&gt;&lt;span style="color:red"&gt;CssClass&lt;/span&gt;&lt;span style="color:blue"&gt;=&amp;quot;customers-grid&amp;quot;&amp;gt;&lt;br&gt;    &amp;lt;&lt;/span&gt;&lt;span style="color:rgb(163, 21, 21)"&gt;Columns&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;&lt;br&gt;        &amp;lt;&lt;/span&gt;&lt;span style="color:rgb(163, 21, 21)"&gt;asp&lt;/span&gt;&lt;span style="color:blue"&gt;:&lt;/span&gt;&lt;span style="color:rgb(163, 21, 21)"&gt;BoundField &lt;/span&gt;&lt;span style="color:red"&gt;HeaderText&lt;/span&gt;&lt;span style="color:blue"&gt;=&amp;quot;First Name&amp;quot; &lt;/span&gt;&lt;span style="color:red"&gt;DataField&lt;/span&gt;&lt;span style="color:blue"&gt;=&amp;quot;FirstName&amp;quot; &lt;/span&gt;&lt;span style="color:red"&gt;SortExpression&lt;/span&gt;&lt;span style="color:blue"&gt;=&amp;quot;FirstName&amp;quot;&lt;br&gt;            &lt;/span&gt;&lt;span style="color:red"&gt;HeaderStyle-CssClass&lt;/span&gt;&lt;span style="color:blue"&gt;=&amp;quot;first-name&amp;quot; &lt;/span&gt;&lt;span style="color:red"&gt;ItemStyle-CssClass&lt;/span&gt;&lt;span style="color:blue"&gt;=&amp;quot;first-name&amp;quot; /&amp;gt;&lt;br&gt;        &amp;lt;&lt;/span&gt;&lt;span style="color:rgb(163, 21, 21)"&gt;asp&lt;/span&gt;&lt;span style="color:blue"&gt;:&lt;/span&gt;&lt;span style="color:rgb(163, 21, 21)"&gt;BoundField &lt;/span&gt;&lt;span style="color:red"&gt;HeaderText&lt;/span&gt;&lt;span style="color:blue"&gt;=&amp;quot;Last Name&amp;quot; &lt;/span&gt;&lt;span style="color:red"&gt;DataField&lt;/span&gt;&lt;span style="color:blue"&gt;=&amp;quot;LastName&amp;quot; &lt;/span&gt;&lt;span style="color:red"&gt;SortExpression&lt;/span&gt;&lt;span style="color:blue"&gt;=&amp;quot;LastName&amp;quot;&lt;br&gt;            &lt;/span&gt;&lt;span style="color:red"&gt;HeaderStyle-CssClass&lt;/span&gt;&lt;span style="color:blue"&gt;=&amp;quot;last-name&amp;quot; &lt;/span&gt;&lt;span style="color:red"&gt;ItemStyle-CssClass&lt;/span&gt;&lt;span style="color:blue"&gt;=&amp;quot;last-name&amp;quot; /&amp;gt;&lt;br&gt;        &amp;lt;&lt;/span&gt;&lt;span style="color:rgb(163, 21, 21)"&gt;asp&lt;/span&gt;&lt;span style="color:blue"&gt;:&lt;/span&gt;&lt;span style="color:rgb(163, 21, 21)"&gt;BoundField &lt;/span&gt;&lt;span style="color:red"&gt;HeaderText&lt;/span&gt;&lt;span style="color:blue"&gt;=&amp;quot;Age&amp;quot; &lt;/span&gt;&lt;span style="color:red"&gt;DataField&lt;/span&gt;&lt;span style="color:blue"&gt;=&amp;quot;Age&amp;quot; &lt;/span&gt;&lt;span style="color:red"&gt;SortExpression&lt;/span&gt;&lt;span style="color:blue"&gt;=&amp;quot;Age&amp;quot;&lt;br&gt;            &lt;/span&gt;&lt;span style="color:red"&gt;HeaderStyle-CssClass&lt;/span&gt;&lt;span style="color:blue"&gt;=&amp;quot;age&amp;quot; &lt;/span&gt;&lt;span style="color:red"&gt;ItemStyle-CssClass&lt;/span&gt;&lt;span style="color:blue"&gt;=&amp;quot;age&amp;quot; /&amp;gt;&lt;br&gt;        &amp;lt;&lt;/span&gt;&lt;span style="color:rgb(163, 21, 21)"&gt;asp&lt;/span&gt;&lt;span style="color:blue"&gt;:&lt;/span&gt;&lt;span style="color:rgb(163, 21, 21)"&gt;BoundField &lt;/span&gt;&lt;span style="color:red"&gt;HeaderText&lt;/span&gt;&lt;span style="color:blue"&gt;=&amp;quot;Member for&amp;quot; &lt;/span&gt;&lt;span style="color:red"&gt;DataField&lt;/span&gt;&lt;span style="color:blue"&gt;=&amp;quot;YearsAsMember&amp;quot; &lt;/span&gt;&lt;span style="color:red"&gt;SortExpression&lt;/span&gt;&lt;span style="color:blue"&gt;=&amp;quot;YearsAsMember&amp;quot;&lt;br&gt;            &lt;/span&gt;&lt;span style="color:red"&gt;HeaderStyle-CssClass&lt;/span&gt;&lt;span style="color:blue"&gt;=&amp;quot;years-as-member&amp;quot; &lt;/span&gt;&lt;span style="color:red"&gt;ItemStyle-CssClass&lt;/span&gt;&lt;span style="color:blue"&gt;=&amp;quot;years-as-member&amp;quot; /&amp;gt;&lt;br&gt;    &amp;lt;/&lt;/span&gt;&lt;span style="color:rgb(163, 21, 21)"&gt;Columns&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;&lt;br&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:rgb(163, 21, 21)"&gt;asp&lt;/span&gt;&lt;span style="color:blue"&gt;:&lt;/span&gt;&lt;span style="color:rgb(163, 21, 21)"&gt;GridView&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;
&lt;p&gt;Then when the GridView is rendered sorted by the First name column, the HTML mark-up emitted will look like this: 
&lt;p&gt;&lt;pre&gt;&lt;span style="color:blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:rgb(163, 21, 21)"&gt;div &lt;/span&gt;&lt;span style="color:red"&gt;class&lt;/span&gt;&lt;span style="color:blue"&gt;=&amp;quot;AspNet-GridView&amp;quot; &lt;/span&gt;&lt;span style="color:red"&gt;id&lt;/span&gt;&lt;span style="color:blue"&gt;=&amp;quot;ctl00_main_gvExample&amp;quot;&amp;gt;&lt;br&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:rgb(163, 21, 21)"&gt;table &lt;/span&gt;&lt;span style="color:red"&gt;cellpadding&lt;/span&gt;&lt;span style="color:blue"&gt;=&amp;quot;0&amp;quot; &lt;/span&gt;&lt;span style="color:red"&gt;cellspacing&lt;/span&gt;&lt;span style="color:blue"&gt;=&amp;quot;0&amp;quot; &lt;/span&gt;&lt;span style="color:red"&gt;summary&lt;/span&gt;&lt;span style="color:blue"&gt;=&amp;quot;&amp;quot; &lt;/span&gt;&lt;span style="color:red"&gt;class&lt;/span&gt;&lt;span style="color:blue"&gt;=&amp;quot;customers-grid&amp;quot;&amp;gt;&lt;br&gt;    &amp;lt;&lt;/span&gt;&lt;span style="color:rgb(163, 21, 21)"&gt;thead&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;&lt;br&gt;    &amp;lt;&lt;/span&gt;&lt;span style="color:rgb(163, 21, 21)"&gt;tr &lt;/span&gt;&lt;span style="color:red"&gt;class&lt;/span&gt;&lt;span style="color:blue"&gt;=&amp;quot;AspNet-GridView-Header&amp;quot;&amp;gt;&lt;br&gt;        &amp;lt;&lt;/span&gt;&lt;span style="color:rgb(163, 21, 21)"&gt;th &lt;/span&gt;&lt;span style="color:red"&gt;class&lt;/span&gt;&lt;span style="color:blue"&gt;=&amp;quot;sortable sorted asc first-name&amp;quot; &lt;/span&gt;&lt;span style="color:red"&gt;scope&lt;/span&gt;&lt;span style="color:blue"&gt;=&amp;quot;col&amp;quot;&amp;gt;&lt;br&gt;            &amp;lt;&lt;/span&gt;&lt;span style="color:rgb(163, 21, 21)"&gt;a &lt;/span&gt;&lt;span style="color:red"&gt;href&lt;/span&gt;&lt;span style="color:blue"&gt;=&amp;quot;javascript:__doPostBack('ctl00$main$gvExample','Sort$FirstName')&amp;quot;&amp;gt;&lt;/span&gt;First Name&lt;span style="color:blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:rgb(163, 21, 21)"&gt;a&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:rgb(163, 21, 21)"&gt;th&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;&lt;br&gt;        &amp;lt;&lt;/span&gt;&lt;span style="color:rgb(163, 21, 21)"&gt;th &lt;/span&gt;&lt;span style="color:red"&gt;class&lt;/span&gt;&lt;span style="color:blue"&gt;=&amp;quot;sortable last-name&amp;quot; &lt;/span&gt;&lt;span style="color:red"&gt;scope&lt;/span&gt;&lt;span style="color:blue"&gt;=&amp;quot;col&amp;quot;&amp;gt;&lt;br&gt;            &amp;lt;&lt;/span&gt;&lt;span style="color:rgb(163, 21, 21)"&gt;a &lt;/span&gt;&lt;span style="color:red"&gt;href&lt;/span&gt;&lt;span style="color:blue"&gt;=&amp;quot;javascript:__doPostBack('ctl00$main$gvExample','Sort$LastName')&amp;quot;&amp;gt;&lt;/span&gt;Last Name&lt;span style="color:blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:rgb(163, 21, 21)"&gt;a&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:rgb(163, 21, 21)"&gt;th&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;&lt;br&gt;        &amp;lt;&lt;/span&gt;&lt;span style="color:rgb(163, 21, 21)"&gt;th &lt;/span&gt;&lt;span style="color:red"&gt;class&lt;/span&gt;&lt;span style="color:blue"&gt;=&amp;quot;sortable age&amp;quot; &lt;/span&gt;&lt;span style="color:red"&gt;scope&lt;/span&gt;&lt;span style="color:blue"&gt;=&amp;quot;col&amp;quot;&amp;gt;&lt;br&gt;            &amp;lt;&lt;/span&gt;&lt;span style="color:rgb(163, 21, 21)"&gt;a &lt;/span&gt;&lt;span style="color:red"&gt;href&lt;/span&gt;&lt;span style="color:blue"&gt;=&amp;quot;javascript:__doPostBack('ctl00$main$gvExample','Sort$Age')&amp;quot;&amp;gt;&lt;/span&gt;Age&lt;span style="color:blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:rgb(163, 21, 21)"&gt;a&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:rgb(163, 21, 21)"&gt;th&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;&lt;br&gt;        &amp;lt;&lt;/span&gt;&lt;span style="color:rgb(163, 21, 21)"&gt;th &lt;/span&gt;&lt;span style="color:red"&gt;class&lt;/span&gt;&lt;span style="color:blue"&gt;=&amp;quot;sortable years-as-member&amp;quot; &lt;/span&gt;&lt;span style="color:red"&gt;scope&lt;/span&gt;&lt;span style="color:blue"&gt;=&amp;quot;col&amp;quot;&amp;gt;&lt;br&gt;            &amp;lt;&lt;/span&gt;&lt;span style="color:rgb(163, 21, 21)"&gt;a &lt;/span&gt;&lt;span style="color:red"&gt;href&lt;/span&gt;&lt;span style="color:blue"&gt;=&amp;quot;javascript:__doPostBack('ctl00$main$gvExample','Sort$YearsAsMember')&amp;quot;&amp;gt;&lt;/span&gt;Member for&lt;span style="color:blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:rgb(163, 21, 21)"&gt;a&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:rgb(163, 21, 21)"&gt;th&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;&lt;br&gt;    &amp;lt;/&lt;/span&gt;&lt;span style="color:rgb(163, 21, 21)"&gt;tr&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;&lt;br&gt;    &amp;lt;/&lt;/span&gt;&lt;span style="color:rgb(163, 21, 21)"&gt;thead&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;&lt;br&gt;    &amp;lt;&lt;/span&gt;&lt;span style="color:rgb(163, 21, 21)"&gt;tbody&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:green"&gt;&amp;lt;!-- Data rows here --&amp;gt;&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:rgb(163, 21, 21)"&gt;tbody&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;&lt;br&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:rgb(163, 21, 21)"&gt;table&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;&lt;br&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:rgb(163, 21, 21)"&gt;div&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;
&lt;p&gt;
&lt;p&gt;Note how we now have CSS classes added to the &amp;lt;th&amp;gt; tags to describe their sorting behaviour (sortable, sorted and asc). We can see that all columns are sortable, and that the First Name column is currently being sorted by in the ascending direction. And because the logic to apply these classes is in the control adapter, it is automatically applied to all GridViews in the application. 
&lt;p&gt;There is a caveat to this approach however. The adapter relies on two properties of the GridView to determine the current sort column and direction: &lt;a href="http://msdn2.microsoft.com/en-us/library/1sb8t4y0(VS.80).aspx"&gt;SortExpression&lt;/a&gt; and &lt;a href="http://msdn2.microsoft.com/en-us/library/zfs728sa(VS.80).aspx"&gt;SortDirection&lt;/a&gt;. These are read only properties that are only populated when you provide data to the GridView by way of one of the &lt;a href="http://quickstarts.asp.net/QuickStartv20/aspnet/doc/data/default.aspx"&gt;data source controls&lt;/a&gt; introduced in ASP.NET 2.0, e.g. &lt;a href="http://quickstarts.asp.net/QuickStartv20/aspnet/doc/ctrlref/data/objectdatasource.aspx"&gt;ObjectDataSource&lt;/a&gt;, &lt;a href="http://quickstarts.asp.net/QuickStartv20/aspnet/doc/ctrlref/data/sqldatasource.aspx"&gt;SqlDataSource&lt;/a&gt;, etc., and the &lt;a href="http://msdn2.microsoft.com/en-us/library/hw694zdw(VS.80).aspx"&gt;DataSourceID&lt;/a&gt; property. If you provide data to your GridView by setting its &lt;a href="http://msdn2.microsoft.com/en-us/library/ay1s9at1(VS.80).aspx"&gt;DataSource&lt;/a&gt; property directly from code behind (and calling &lt;a href="http://msdn2.microsoft.com/en-us/library/kdzx4e13(VS.80).aspx"&gt;DataBind()&lt;/a&gt;) the sort properties are not set and thus the adapter cannot insert the required CSS class names. You must also initially call the &lt;a href="http://msdn2.microsoft.com/en-us/library/ms155982(VS.80).aspx"&gt;Sort()&lt;/a&gt; method on the GridView from the Page_Load() method in order to force the setting of these properties the first time the page is rendered:&lt;pre&gt;&lt;span style="color:blue"&gt;protected void &lt;/span&gt;Page_Load(&lt;span style="color:blue"&gt;object &lt;/span&gt;sender, &lt;span style="color:rgb(43, 145, 175)"&gt;EventArgs &lt;/span&gt;e)&lt;br&gt;{&lt;br&gt;    &lt;span style="color:blue"&gt;if &lt;/span&gt;(!IsPostBack)&lt;br&gt;    {&lt;br&gt;        &lt;span style="color:green"&gt;// Set default sort expression&lt;br&gt;        &lt;/span&gt;gvExample.Sort(&lt;span style="color:rgb(163, 21, 21)"&gt;&amp;quot;FirstName&amp;quot;&lt;/span&gt;, &lt;span style="color:rgb(43, 145, 175)"&gt;SortDirection&lt;/span&gt;.Ascending);&lt;br&gt;    }&lt;br&gt;}&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;
&lt;p&gt;If you are not using the data source controls (the ObjectDataSource in particular) I thoroughly recommended you take a look as they provide you with &amp;quot;free&amp;quot; sorting and paging functionality out of the box without the need to manually handle events on the GridView. If you don't like the way the ObjectDataSource requires a separate business logic class to provide its data access functionality, for instance if you are implementing a MVP pattern in the &amp;quot;&lt;a href="http://www.martinfowler.com/eaaDev/PassiveScreen.html"&gt;Passive View&lt;/a&gt;&amp;quot; flavour, then you can sub-class the OjectDataSource and force it to look on the instance of the class for the hosting page (or user control) for its methods instead (this is the method I used in the RDN sample solution and I will post an article on this technique shortly). 
&lt;p&gt;Now that we have our CSS classes set we can attach some CSS rules that provide some visual indicators on the sorting behaviour. The following CSS rules do just that (I've placed these in a common Grid.css file in the sample project):&lt;span style="color:rgb(163, 21, 21)"&gt;&lt;pre&gt;&lt;span style="color:rgb(163, 21, 21)"&gt;div.AspNet-GridView &lt;/span&gt;{&lt;br&gt;    &lt;span style="color:red"&gt;border&lt;/span&gt;: &lt;span style="color:blue"&gt;1px solid #828790&lt;/span&gt;;&lt;br&gt;    &lt;span style="color:red"&gt;font-size&lt;/span&gt;: &lt;span style="color:blue"&gt;0.8em&lt;/span&gt;;&lt;br&gt;    &lt;span style="color:red"&gt;min-height&lt;/span&gt;: &lt;span style="color:blue"&gt;1px&lt;/span&gt;;&lt;br&gt;    &lt;span style="color:red"&gt;font-family&lt;/span&gt;: &lt;span style="color:blue"&gt;&amp;quot;Lucida Sans&amp;quot;&lt;/span&gt;;&lt;br&gt;}&lt;br&gt;&lt;br&gt;    &lt;span style="color:rgb(163, 21, 21)"&gt;div.AspNet-GridView table &lt;/span&gt;{&lt;br&gt;        &lt;span style="color:red"&gt;width&lt;/span&gt;: &lt;span style="color:blue"&gt;100%&lt;/span&gt;;&lt;br&gt;        &lt;span style="color:red"&gt;border-collapse&lt;/span&gt;: &lt;span style="color:blue"&gt;collapse&lt;/span&gt;;&lt;br&gt;    }    &lt;br&gt;        &lt;br&gt;        &lt;span style="color:rgb(163, 21, 21)"&gt;div.AspNet-GridView table thead tr th &lt;/span&gt;{&lt;br&gt;            &lt;span style="color:red"&gt;padding&lt;/span&gt;: &lt;span style="color:blue"&gt;3px 3px 2px 2px&lt;/span&gt;;&lt;br&gt;            &lt;span style="color:red"&gt;background&lt;/span&gt;: &lt;span style="color:blue"&gt;url('grid-header-back.gif') top left repeat-x&lt;/span&gt;;&lt;br&gt;            &lt;span style="color:red"&gt;font-weight&lt;/span&gt;: &lt;span style="color:blue"&gt;normal&lt;/span&gt;;&lt;br&gt;            &lt;span style="color:red"&gt;border-bottom&lt;/span&gt;: &lt;span style="color:blue"&gt;1px solid #d5d5d5&lt;/span&gt;;&lt;br&gt;            &lt;span style="color:red"&gt;border-right&lt;/span&gt;: &lt;span style="color:blue"&gt;1px solid #e3e4e6&lt;/span&gt;;&lt;br&gt;            &lt;br&gt;        }&lt;br&gt;            &lt;span style="color:rgb(163, 21, 21)"&gt;div.AspNet-GridView table thead tr th.sortable &lt;/span&gt;{&lt;br&gt;                &lt;span style="color:red"&gt;padding&lt;/span&gt;: &lt;span style="color:blue"&gt;0px&lt;/span&gt;;&lt;br&gt;            }&lt;br&gt;                &lt;span style="color:rgb(163, 21, 21)"&gt;div.AspNet-GridView table thead tr th.sortable:hover &lt;/span&gt;{&lt;br&gt;                    &lt;span style="color:red"&gt;background&lt;/span&gt;: &lt;span style="color:blue"&gt;#b7e7fb url('grid-header-sortable-back-hover.gif') top left repeat-x&lt;/span&gt;;&lt;br&gt;                    &lt;span style="color:red"&gt;border&lt;/span&gt;: &lt;span style="color:blue"&gt;1px solid #96d9f9&lt;/span&gt;;&lt;br&gt;                    &lt;span style="color:red"&gt;border-top&lt;/span&gt;: &lt;span style="color:blue"&gt;none&lt;/span&gt;;&lt;br&gt;                    &lt;span style="color:red"&gt;border-left&lt;/span&gt;: &lt;span style="color:blue"&gt;none&lt;/span&gt;;&lt;br&gt;                }&lt;br&gt;                &lt;br&gt;                &lt;span style="color:rgb(163, 21, 21)"&gt;div.AspNet-GridView table thead tr th.sortable a &lt;/span&gt;{&lt;br&gt;                    &lt;span style="color:red"&gt;display&lt;/span&gt;: &lt;span style="color:blue"&gt;block&lt;/span&gt;;&lt;br&gt;                    &lt;span style="color:red"&gt;padding&lt;/span&gt;: &lt;span style="color:blue"&gt;3px 3px 2px 2px&lt;/span&gt;;&lt;br&gt;                    &lt;span style="color:red"&gt;color&lt;/span&gt;: &lt;span style="color:blue"&gt;Black&lt;/span&gt;;&lt;br&gt;                    &lt;span style="color:red"&gt;min-height&lt;/span&gt;: &lt;span style="color:blue"&gt;1px&lt;/span&gt;; &lt;span style="color:green"&gt;/* Force layout in IE7 to prevent rendering issues */&lt;br&gt;                &lt;/span&gt;}&lt;br&gt;                    &lt;span style="color:rgb(163, 21, 21)"&gt;div.AspNet-GridView table thead tr th.sortable a:hover &lt;/span&gt;{&lt;br&gt;                        &lt;span style="color:red"&gt;text-decoration&lt;/span&gt;: &lt;span style="color:blue"&gt;none&lt;/span&gt;;&lt;br&gt;                    }&lt;br&gt;            &lt;br&gt;            &lt;span style="color:rgb(163, 21, 21)"&gt;div.AspNet-GridView table thead tr th.sorted &lt;/span&gt;{&lt;br&gt;                &lt;span style="color:red"&gt;background&lt;/span&gt;: &lt;span style="color:blue"&gt;#d8ecf6 url('grid-header-sorted-back.gif') top left repeat-x&lt;/span&gt;;&lt;br&gt;                &lt;span style="color:red"&gt;border&lt;/span&gt;: &lt;span style="color:blue"&gt;1px solid #96d9f9&lt;/span&gt;;&lt;br&gt;                &lt;span style="color:red"&gt;border-top&lt;/span&gt;: &lt;span style="color:blue"&gt;none&lt;/span&gt;;&lt;br&gt;                &lt;span style="color:red"&gt;border-left&lt;/span&gt;: &lt;span style="color:blue"&gt;none&lt;/span&gt;;&lt;br&gt;            }&lt;br&gt;            &lt;br&gt;                &lt;span style="color:rgb(163, 21, 21)"&gt;div.AspNet-GridView table thead tr th.asc a &lt;/span&gt;{&lt;br&gt;                    &lt;span style="color:red"&gt;background&lt;/span&gt;: &lt;span style="color:blue"&gt;transparent url('grid-header-asc-glyph.gif') center 1px no-repeat&lt;/span&gt;;&lt;br&gt;                }&lt;br&gt;                &lt;br&gt;                &lt;span style="color:rgb(163, 21, 21)"&gt;div.AspNet-GridView table thead tr th.desc a &lt;/span&gt;{&lt;br&gt;                    &lt;span style="color:red"&gt;background&lt;/span&gt;: &lt;span style="color:blue"&gt;transparent url('grid-header-desc-glyph.gif') center 1px no-repeat&lt;/span&gt;;&lt;br&gt;                }&lt;br&gt;            &lt;br&gt;        &lt;span style="color:rgb(163, 21, 21)"&gt;div.AspNet-GridView table tbody tr td &lt;/span&gt;{&lt;br&gt;            &lt;span style="color:red"&gt;padding&lt;/span&gt;: &lt;span style="color:blue"&gt;2px 6px 2px 4px&lt;/span&gt;;&lt;br&gt;            &lt;span style="color:red"&gt;border&lt;/span&gt;: &lt;span style="color:blue"&gt;1px solid #efefef&lt;/span&gt;;&lt;br&gt;        }&lt;br&gt;        &lt;br&gt;        &lt;span style="color:rgb(163, 21, 21)"&gt;div.AspNet-GridView table thead tr th.action&lt;/span&gt;,&lt;br&gt;        &lt;span style="color:rgb(163, 21, 21)"&gt;div.AspNet-GridView table tbody tr td.action &lt;/span&gt;{&lt;br&gt;            &lt;br&gt;            &lt;span style="color:red"&gt;border-left&lt;/span&gt;: &lt;span style="color:blue"&gt;none&lt;/span&gt;;&lt;br&gt;            &lt;span style="color:red"&gt;border-right&lt;/span&gt;: &lt;span style="color:blue"&gt;none&lt;/span&gt;;&lt;br&gt;        }&lt;br&gt;        &lt;span style="color:rgb(163, 21, 21)"&gt;div.AspNet-GridView table tbody tr td.action &lt;/span&gt;{&lt;br&gt;            &lt;span style="color:red"&gt;padding&lt;/span&gt;: &lt;span style="color:blue"&gt;2px 2px 2px 2px&lt;/span&gt;;&lt;br&gt;            &lt;span style="color:red"&gt;width&lt;/span&gt;: &lt;span style="color:blue"&gt;40px&lt;/span&gt;;&lt;br&gt;            &lt;span style="color:red"&gt;text-align&lt;/span&gt;: &lt;span style="color:blue"&gt;center&lt;/span&gt;;&lt;br&gt;        }&lt;br&gt;    &lt;br&gt;    &lt;span style="color:rgb(163, 21, 21)"&gt;div.AspNet-GridView table tbody tr.AspNet-GridView-Alternate td &lt;/span&gt;{&lt;br&gt;        &lt;span style="color:red"&gt;background&lt;/span&gt;: &lt;span style="color:blue"&gt;#f2f9fc&lt;/span&gt;;&lt;br&gt;    }&lt;br&gt;    &lt;br&gt;    &lt;span style="color:rgb(163, 21, 21)"&gt;div.AspNet-GridView-Pagination &lt;/span&gt;{&lt;br&gt;        &lt;span style="color:red"&gt;background&lt;/span&gt;: &lt;span style="color:blue"&gt;#e6e9ee&lt;/span&gt;;&lt;br&gt;        &lt;span style="color:red"&gt;text-align&lt;/span&gt;: &lt;span style="color:blue"&gt;center&lt;/span&gt;;&lt;br&gt;        &lt;span style="color:red"&gt;padding&lt;/span&gt;: &lt;span style="color:blue"&gt;2px 3px 2px 3px&lt;/span&gt;;&lt;br&gt;        &lt;span style="color:red"&gt;font-size&lt;/span&gt;: &lt;span style="color:blue"&gt;0.9em&lt;/span&gt;;&lt;br&gt;        &lt;span style="color:red"&gt;min-height&lt;/span&gt;: &lt;span style="color:blue"&gt;1px&lt;/span&gt;; &lt;span style="color:green"&gt;/* Force layout in IE7 to prevent rendering issues */&lt;br&gt;    &lt;/span&gt;}&lt;br&gt;        &lt;span style="color:rgb(163, 21, 21)"&gt;div.AspNet-GridView-Pagination span &lt;/span&gt;{&lt;br&gt;            &lt;span style="color:red"&gt;padding&lt;/span&gt;: &lt;span style="color:blue"&gt;0px 3px&lt;/span&gt;;&lt;br&gt;            &lt;span style="color:red"&gt;background&lt;/span&gt;: &lt;span style="color:blue"&gt;#d8ecf6&lt;/span&gt;;&lt;br&gt;            &lt;span style="color:red"&gt;border&lt;/span&gt;: &lt;span style="color:blue"&gt;1px solid #96d9f9&lt;/span&gt;;&lt;br&gt;        }&lt;br&gt;&lt;br&gt;&lt;span style="color:rgb(163, 21, 21)"&gt;div.grid-row-count &lt;/span&gt;{&lt;br&gt;    &lt;span style="color:red"&gt;color&lt;/span&gt;: &lt;span style="color:blue"&gt;#666666&lt;/span&gt;;&lt;br&gt;    &lt;span style="color:red"&gt;padding&lt;/span&gt;: &lt;span style="color:blue"&gt;2px 0px 2px 6px&lt;/span&gt;;&lt;br&gt;    &lt;span style="color:red"&gt;font-size&lt;/span&gt;: &lt;span style="color:blue"&gt;0.8em&lt;/span&gt;;&lt;br&gt;}&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/span&gt;
&lt;p&gt;These style rules use a small number of background images to give our GridView a nice Vista-like look: 
&lt;p&gt;&lt;img alt=image src="http://s511va.tuk.livefilestore.com/y1p8p3J9ORFPvRcLs5xSWM3WavIOgLAdXHEKAkH1l1E5klQB4xT8RdkT6XfZhYP6SU4JEG1O14WptY?PARTNER=WRITER" border=0 width=618 height=249&gt; 
&lt;p&gt;You can immediately see that the First Name column is currently the sort column in the ascending direction. Hovering over other sortable columns provides feedback by way of a :hover background image, here I've hovered my mouse over the Last Name column: 
&lt;p&gt;&lt;img style="border-width:0px" alt=image src="http://s511va.tuk.livefilestore.com/y1pc2epRtTqjlE-WdAJ9P6LBYIbtPt-1f_0xg8G5fNWhlxhgGDnibbhlTztCa-eYRS6-olhQeFJ25H9iPII9bA-RDSuFPaXXaNf?PARTNER=WRITER" border=0 width=617 height=250&gt; 
&lt;p&gt;I've also added some formatting to the pager section of the GridView to highlight the current page. 
&lt;p&gt;To apply styles that are specific to this particular GridView, e.g. column widths, we can add some style rules like thus:&lt;pre&gt;&lt;span style="color:rgb(163, 21, 21)"&gt;table.customers-grid &lt;/span&gt;{&lt;br&gt;    &lt;br&gt;}&lt;br&gt;&lt;br&gt;    &lt;span style="color:rgb(163, 21, 21)"&gt;table.customers-grid th.first-name&lt;/span&gt;,&lt;br&gt;    &lt;span style="color:rgb(163, 21, 21)"&gt;table.customers-grid td.first-name &lt;/span&gt;{&lt;br&gt;        &lt;span style="color:red"&gt;width&lt;/span&gt;: &lt;span style="color:blue"&gt;35%&lt;/span&gt;;&lt;br&gt;    }&lt;br&gt;    &lt;br&gt;    &lt;span style="color:rgb(163, 21, 21)"&gt;table.customers-grid th.last-name&lt;/span&gt;,&lt;br&gt;    &lt;span style="color:rgb(163, 21, 21)"&gt;table.customers-grid td.last-name &lt;/span&gt;{&lt;br&gt;        &lt;br&gt;    }&lt;br&gt;    &lt;br&gt;    &lt;span style="color:rgb(163, 21, 21)"&gt;table.customers-grid th.age&lt;/span&gt;,&lt;br&gt;    &lt;span style="color:rgb(163, 21, 21)"&gt;table.customers-grid td.age &lt;/span&gt;{&lt;br&gt;        &lt;span style="color:red"&gt;text-align&lt;/span&gt;: &lt;span style="color:blue"&gt;center&lt;/span&gt;;&lt;br&gt;        &lt;span style="color:red"&gt;width&lt;/span&gt;: &lt;span style="color:blue"&gt;10%&lt;/span&gt;;&lt;br&gt;    }&lt;br&gt;    &lt;br&gt;    &lt;span style="color:rgb(163, 21, 21)"&gt;table.customers-grid th.years-as-member&lt;/span&gt;,&lt;br&gt;    &lt;span style="color:rgb(163, 21, 21)"&gt;table.customers-grid td.years-as-member &lt;/span&gt;{&lt;br&gt;        &lt;span style="color:red"&gt;width&lt;/span&gt;: &lt;span style="color:blue"&gt;15%&lt;/span&gt;;&lt;br&gt;        &lt;span style="color:red"&gt;text-align&lt;/span&gt;: &lt;span style="color:blue"&gt;center&lt;/span&gt;;&lt;br&gt;    }&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;
&lt;p&gt;&lt;em&gt;Note: I've tested the included CSS here with IE7 and Firefox. There is a small issue with the Firefox rendering which I haven't bothered to fix (the left-most border is not displayed due to the different ways IE7 and Firefox collapse borders) and you will definitely need to make some changes to properly support IE6 (e.g. adding support for the :hover pseudo class on elements other than &amp;lt;a&amp;gt; using an .htc file) but they are outside the scope of this article.&lt;/em&gt; 
&lt;p&gt;So there you have it. Using this method we have freed our code-behind of nasty image injection code and made our GridViews more accessible and stylable to boot. 
&lt;p&gt;&lt;a href="http://files.damianedwards.com/CSSASPNETDepth/RDN - CSS ReadiDepth.zip"&gt;Download the sample project for this article here&lt;/a&gt; &lt;br&gt; &lt;br&gt; &lt;br&gt; &lt;br&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-6883226023675471693&amp;page=RSS%3a+ASP.NET+%26+CSS%3a+Styling+sortable+columns+in+the+GridView+using+CSS&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=damianpedwards.spaces.live.com&amp;amp;GT1=DamianPEdwards"&gt;</description><category>Readify</category><comments>http://DamianPEdwards.spaces.live.com/Blog/cns!A079DE667E1958B3!562.entry#comment</comments><guid isPermaLink="true">http://DamianPEdwards.spaces.live.com/Blog/cns!A079DE667E1958B3!562.entry</guid><pubDate>Mon, 04 Feb 2008 10:10:19 GMT</pubDate><slash:comments>10</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://DamianPEdwards.spaces.live.com/blog/cns!A079DE667E1958B3!562/comments/feed.rss</wfw:commentRss><wfw:comment>http://DamianPEdwards.spaces.live.com/Blog/cns!A079DE667E1958B3!562.entry#comment</wfw:comment><dcterms:modified>2008-08-08T07:00:13Z</dcterms:modified></item><item><title>RDN ReadiDepth: CSS Layout with ASP.NET &amp; Visual Studio 2008</title><link>http://DamianPEdwards.spaces.live.com/Blog/cns!A079DE667E1958B3!558.entry</link><description>&lt;p&gt;Thanks to all of those who attended &lt;a href="http://damianpedwards.spaces.live.com/blog/cns!A079DE667E1958B3!549.entry"&gt;my sessions&lt;/a&gt; on CSS Layout with ASP.NET &amp;amp; Visual Studio 2008 during last week's &lt;a href="http://www.readify.net/rdncalendar.aspx"&gt;RDN&lt;/a&gt; tour of Australia. Most of you seemed to really enjoy it and I was glad to see many people stopping back to ask me specific questions. Great stuff. As I mentioned during my presentations I will be posting a series of articles on this blog relating to many of the topics I spoke about. Also the slides and demo solution I used are &lt;a href="http://files.damianedwards.com/CSSASPNETDepth/RDN - CSS ReadiDepth.zip"&gt;available for download here&lt;/a&gt;. &lt;p&gt;In the meantime, don't hesitate to drop me a line with any questions you might have.&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-6883226023675471693&amp;page=RSS%3a+RDN+ReadiDepth%3a+CSS+Layout+with+ASP.NET+%26+Visual+Studio+2008&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=damianpedwards.spaces.live.com&amp;amp;GT1=DamianPEdwards"&gt;</description><category>Readify</category><comments>http://DamianPEdwards.spaces.live.com/Blog/cns!A079DE667E1958B3!558.entry#comment</comments><guid isPermaLink="true">http://DamianPEdwards.spaces.live.com/Blog/cns!A079DE667E1958B3!558.entry</guid><pubDate>Mon, 04 Feb 2008 09:15:58 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://DamianPEdwards.spaces.live.com/blog/cns!A079DE667E1958B3!558/comments/feed.rss</wfw:commentRss><wfw:comment>http://DamianPEdwards.spaces.live.com/Blog/cns!A079DE667E1958B3!558.entry#comment</wfw:comment><dcterms:modified>2008-02-04T10:12:33Z</dcterms:modified></item><item><title>HTML Email Article</title><link>http://DamianPEdwards.spaces.live.com/Blog/cns!A079DE667E1958B3!556.entry</link><description>&lt;p&gt;Somebody at the Melbourne evening &lt;a href="http://www.readify.net/rdn.aspx"&gt;RDN&lt;/a&gt; session last night asked me about HTML e-mail. Well today I got &lt;a href="http://www.sitepoint.com/article/1606"&gt;this article&lt;/a&gt; in my inbox. I hope it helps you in some way.&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-6883226023675471693&amp;page=RSS%3a+HTML+Email+Article&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=damianpedwards.spaces.live.com&amp;amp;GT1=DamianPEdwards"&gt;</description><category>Readify</category><comments>http://DamianPEdwards.spaces.live.com/Blog/cns!A079DE667E1958B3!556.entry#comment</comments><guid isPermaLink="true">http://DamianPEdwards.spaces.live.com/Blog/cns!A079DE667E1958B3!556.entry</guid><pubDate>Fri, 01 Feb 2008 03:58:35 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://DamianPEdwards.spaces.live.com/blog/cns!A079DE667E1958B3!556/comments/feed.rss</wfw:commentRss><wfw:comment>http://DamianPEdwards.spaces.live.com/Blog/cns!A079DE667E1958B3!556.entry#comment</wfw:comment><dcterms:modified>2008-02-01T03:58:35Z</dcterms:modified></item><item><title>When can we expect MS tooling &amp; platform support for IE8?</title><link>http://DamianPEdwards.spaces.live.com/Blog/cns!A079DE667E1958B3!550.entry</link><description>&lt;p&gt;Thinking of the lag time between versions of Visual Studio and ASP.NET I'm starting to wonder how long it's going to be before we can expect updates or new versions that better support and even promote the adoption of IE8 and its support for web standards. Today, ASP.NET 2.0 doesn't render in XHTML compliant mode unless &lt;a href="http://msdn2.microsoft.com/en-us/library/ms178159.aspx"&gt;you force it too&lt;/a&gt;, and Visual Studio's support for the DOCTYPE declaration is limited at best while the VS2008 ASP.NET designer can still be broken by completely valid HTML and CSS. For IE8 to truly reach its potential and have the impact it should we need updated tools and platforms from MS. &lt;p&gt;Is anybody listening?&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-6883226023675471693&amp;page=RSS%3a+When+can+we+expect+MS+tooling+%26+platform+support+for+IE8%3f&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=damianpedwards.spaces.live.com&amp;amp;GT1=DamianPEdwards"&gt;</description><category>Readify</category><comments>http://DamianPEdwards.spaces.live.com/Blog/cns!A079DE667E1958B3!550.entry#comment</comments><guid isPermaLink="true">http://DamianPEdwards.spaces.live.com/Blog/cns!A079DE667E1958B3!550.entry</guid><pubDate>Tue, 22 Jan 2008 12:03:01 GMT</pubDate><slash:comments>1</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://DamianPEdwards.spaces.live.com/blog/cns!A079DE667E1958B3!550/comments/feed.rss</wfw:commentRss><wfw:comment>http://DamianPEdwards.spaces.live.com/Blog/cns!A079DE667E1958B3!550.entry#comment</wfw:comment><dcterms:modified>2008-01-22T12:03:01Z</dcterms:modified></item><item><title>Come see me at RDN next week to learn about CSS based layout with Visual Studio 2008</title><link>http://DamianPEdwards.spaces.live.com/Blog/cns!A079DE667E1958B3!549.entry</link><description>&lt;p&gt;Next week I'll be travelling to Sydney, Canberra and Melbourne to deliver a &lt;a href="http://www.readify.net/rdncalendar.aspx"&gt;ReadiDepth&lt;/a&gt; session on CSS based layout using Visual Studio 2008. If you've ever struggled making the leap to CSS based layout from table based layout come along to see just how easy it is to get started. I'll be covering the basics of CSS, how Visual Studio 2008 can assist you in developing CSS based layouts, wrestling ASP.NET into being more CSS friendly and my tips for web page and form layouts using clean, semantic mark-up and CSS. &lt;p&gt;&lt;a href="http://www.readify.net/rdnregister.aspx?session=20080129&amp;amp;venue=Sydney (AM)"&gt;Register now!&lt;/a&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-6883226023675471693&amp;page=RSS%3a+Come+see+me+at+RDN+next+week+to+learn+about+CSS+based+layout+with+Visual+Studio+2008&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=damianpedwards.spaces.live.com&amp;amp;GT1=DamianPEdwards"&gt;</description><category>Readify</category><comments>http://DamianPEdwards.spaces.live.com/Blog/cns!A079DE667E1958B3!549.entry#comment</comments><guid isPermaLink="true">http://DamianPEdwards.spaces.live.com/Blog/cns!A079DE667E1958B3!549.entry</guid><pubDate>Tue, 22 Jan 2008 11:08:38 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://DamianPEdwards.spaces.live.com/blog/cns!A079DE667E1958B3!549/comments/feed.rss</wfw:commentRss><wfw:comment>http://DamianPEdwards.spaces.live.com/Blog/cns!A079DE667E1958B3!549.entry#comment</wfw:comment><dcterms:modified>2008-01-22T11:08:49Z</dcterms:modified></item><item><title>The cat's out of the bag, how will IE8 support both old and new sites?</title><link>http://DamianPEdwards.spaces.live.com/Blog/cns!A079DE667E1958B3!548.entry</link><description>&lt;p&gt;After the &lt;a href="http://blogs.msdn.com/ie/archive/2007/12/19/internet-explorer-8-and-acid2-a-milestone.aspx"&gt;recent announcement&lt;/a&gt; regarding a pre-release version of IE8 passing the Acid2 test, I've been wondering how they were going to keep good on their promise of &amp;quot;don't break the web&amp;quot; with so many sites out there specifically designed to compensate for IE's many shortcomings. Well, Chris Wilson has &lt;a href="http://blogs.msdn.com/ie/archive/2008/01/21/compatibility-and-ie8.aspx"&gt;just let the cat out of the bag&lt;/a&gt; over on the IE Blog. In short, if you want your page to render in IE8 in full hi-fidelity standards compliant wonder, you'll need to include a special &amp;lt;meta&amp;gt; tag in the page's &amp;lt;head&amp;gt;. Simple enough, and I agree with Chris' take on it regarding allowing web developers to introduce IE8 site changes on their schedule, not their users'. &lt;p&gt;I'm sure there will be those who think this method is another abomination by Microsoft but personally I think it's a step in the right direction. Writing pages to target a specific versions of browsers is what we do already, Microsoft are simply providing us with a far more elegant way to achieve this. &lt;p&gt;I personally think IE8 will herald a bigger change to the immediate future of the web than other much lauded technologies like Silverlight and RIAs. If it delivers on its promises, it will finally free up web designers and developers to more completely exploit the richness inherit in web standards today, and hopefully banish the use of table tags for layout forever! &lt;p&gt;Also checkout the &lt;a href="http://alistapart.com/articles/beyonddoctype"&gt;great article&lt;/a&gt; on &lt;a href="http://alistapart.com/"&gt;A List Apart&lt;/a&gt; regarding this latest development.&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-6883226023675471693&amp;page=RSS%3a+The+cat's+out+of+the+bag%2c+how+will+IE8+support+both+old+and+new+sites%3f&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=damianpedwards.spaces.live.com&amp;amp;GT1=DamianPEdwards"&gt;</description><category>Readify</category><comments>http://DamianPEdwards.spaces.live.com/Blog/cns!A079DE667E1958B3!548.entry#comment</comments><guid isPermaLink="true">http://DamianPEdwards.spaces.live.com/Blog/cns!A079DE667E1958B3!548.entry</guid><pubDate>Tue, 22 Jan 2008 11:02:21 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://DamianPEdwards.spaces.live.com/blog/cns!A079DE667E1958B3!548/comments/feed.rss</wfw:commentRss><wfw:comment>http://DamianPEdwards.spaces.live.com/Blog/cns!A079DE667E1958B3!548.entry#comment</wfw:comment><dcterms:modified>2008-01-22T11:09:00Z</dcterms:modified></item><item><title>2007: A year in review</title><link>http://DamianPEdwards.spaces.live.com/Blog/cns!A079DE667E1958B3!541.entry</link><description>&lt;p&gt;Wow, another year gone and a whole new one to think about. 2007 saw some pretty big milestones/achievements for me, including the birth of my son Fitzwilliam and the completion of my first year at Readify. &lt;p&gt;In the developer community we saw the re-birth of the Victoria.NET SIG as well as the commencement of the Readify Developer Network. My own Ballarat.NET SIG managed to hold a couple of meetings too. &lt;p&gt;I managed to do a bit of speaking this year at various events on various topics too: &lt;ul&gt; &lt;li&gt;Code Camp Oz: AJAX in the real world (with Paul Glavich) &lt;li&gt;ReMix WebJam: WPF Invaders &lt;li&gt;Victoria.NET SIG: Microsoft Expression Suite &lt;li&gt;Tech.Ed: Silverlight in a Flash &lt;li&gt;RDN: WPF Primer &lt;li&gt;RDN: ASP.NET AJAX Primer &lt;li&gt;Ballarat.NET SIG: ASP.NET AJAX Primer &lt;li&gt;Victoria.NET SIG: What's new for web developers in Visual Studio 2008&lt;/ul&gt; &lt;p&gt;My blogging effort was a little poor. I started the year with good intentions but struggled to find the time or motivation to complete many of the articles I had penned titles for on my whiteboard. That's definitely something I want to improve on this year, especially with so many great new things happening in the web development space (ASP.NET 3.5 Extensions, Silverlight 2.0, Internet Explorer 8.0, etc.) &lt;p&gt;2008 is shaping up to be another big year and I hope to be involved with the developer community even more. Here are some things on the radar for the first part of the year: &lt;ol&gt; &lt;li&gt;Get the Ballarat.NET SIG organised and meeting more frequently so Ballarat developers can see more of the great speakers that Melbourne developers have access to; &lt;li&gt;Present at the Readify Developer Network in Sydney, Canberra and Melbourne on CSS Layout with Visual Studio 2008 (something I'm passionate  about); &lt;li&gt;Present at the Readify Developer Network in Melbourne on ASP.NET AJAX Tips and Tricks; &lt;li&gt;Attend Mix 08 in Las Vegas in March, looking forward to hearing the latest about ASP.NET, Silverlight &amp;amp; Internet Explorer; &lt;li&gt;Present at Code Camp Oz in April, topic yet to be decided.&lt;/ol&gt; &lt;p&gt;So make an effort this year to get down to your local user group and maybe even Code Camp Oz in Wagga Wagga. I look forward to seeing you.&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-6883226023675471693&amp;page=RSS%3a+2007%3a+A+year+in+review&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=damianpedwards.spaces.live.com&amp;amp;GT1=DamianPEdwards"&gt;</description><category>Readify</category><comments>http://DamianPEdwards.spaces.live.com/Blog/cns!A079DE667E1958B3!541.entry#comment</comments><guid isPermaLink="true">http://DamianPEdwards.spaces.live.com/Blog/cns!A079DE667E1958B3!541.entry</guid><pubDate>Thu, 10 Jan 2008 21:14:37 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://DamianPEdwards.spaces.live.com/blog/cns!A079DE667E1958B3!541/comments/feed.rss</wfw:commentRss><wfw:comment>http://DamianPEdwards.spaces.live.com/Blog/cns!A079DE667E1958B3!541.entry#comment</wfw:comment><dcterms:modified>2008-01-10T21:14:37Z</dcterms:modified></item><item><title>I'm going to Mix 2008</title><link>http://DamianPEdwards.spaces.live.com/Blog/cns!A079DE667E1958B3!536.entry</link><description>&lt;p&gt;I've &lt;a href="http://www.visitmix.com/2008/registration.html"&gt;booked&lt;/a&gt; my ticket and I'm &lt;a href="http://www.visitmix.com/2008"&gt;going&lt;/a&gt;. Who else is going I wonder? &lt;p&gt;&lt;img src="http://www.visitmix.com/2008/images/bling/blings_9_25_d.jpg"&gt; &lt;img src="http://www.visitmix.com/2008/images/bling/blings_9_25_k.jpg"&gt;&lt;img src="http://www.visitmix.com/2008/images/bling/blings_9_25_i.jpg"&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-6883226023675471693&amp;page=RSS%3a+I'm+going+to+Mix+2008&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=damianpedwards.spaces.live.com&amp;amp;GT1=DamianPEdwards"&gt;</description><category>Readify</category><comments>http://DamianPEdwards.spaces.live.com/Blog/cns!A079DE667E1958B3!536.entry#comment</comments><guid isPermaLink="true">http://DamianPEdwards.spaces.live.com/Blog/cns!A079DE667E1958B3!536.entry</guid><pubDate>Sun, 18 Nov 2007 07:20:49 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://DamianPEdwards.spaces.live.com/blog/cns!A079DE667E1958B3!536/comments/feed.rss</wfw:commentRss><wfw:comment>http://DamianPEdwards.spaces.live.com/Blog/cns!A079DE667E1958B3!536.entry#comment</wfw:comment><dcterms:modified>2007-11-18T07:20:49Z</dcterms:modified></item><item><title>Blog links updated</title><link>http://DamianPEdwards.spaces.live.com/Blog/cns!A079DE667E1958B3!528.entry</link><description>&lt;p&gt;I've gone back through my blog articles and updated the links to code samples and the like as many of them were no longer working after I recently changed hosting providers. If you happen to come across any I missed, just drop me a comment to let me know and I'll fix it up quick smart.&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-6883226023675471693&amp;page=RSS%3a+Blog+links+updated&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=damianpedwards.spaces.live.com&amp;amp;GT1=DamianPEdwards"&gt;</description><category>Development</category><comments>http://DamianPEdwards.spaces.live.com/Blog/cns!A079DE667E1958B3!528.entry#comment</comments><guid isPermaLink="true">http://DamianPEdwards.spaces.live.com/Blog/cns!A079DE667E1958B3!528.entry</guid><pubDate>Mon, 22 Oct 2007 00:27:36 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://DamianPEdwards.spaces.live.com/blog/cns!A079DE667E1958B3!528/comments/feed.rss</wfw:commentRss><wfw:comment>http://DamianPEdwards.spaces.live.com/Blog/cns!A079DE667E1958B3!528.entry#comment</wfw:comment><dcterms:modified>2007-10-22T00:27:36Z</dcterms:modified></item><item><title>Updated: ASP.NET AJAX RDN ReadiPrimer slides &amp; demo application available</title><link>http://DamianPEdwards.spaces.live.com/Blog/cns!A079DE667E1958B3!527.entry</link><description>&lt;p&gt;UPDATED: These files (as well as other downloads from the &lt;a href="http://www.readify.net/rdn.aspx"&gt;RDN&lt;/a&gt; series) are now available from the &lt;a href="http://www.readify.net/rdndownloads.aspx"&gt;Readify website&lt;/a&gt;.
&lt;p&gt;You can get the slide deck and demo application I used during the recent &lt;a href="http://www.readify.net/rdn.aspx"&gt;Readify Developer Network&lt;/a&gt; event from &lt;a href="http://www.readify.net/rdndownloads.aspx"&gt;here&lt;/a&gt;.&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-6883226023675471693&amp;page=RSS%3a+Updated%3a+ASP.NET+AJAX+RDN+ReadiPrimer+slides+%26+demo+application+available&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=damianpedwards.spaces.live.com&amp;amp;GT1=DamianPEdwards"&gt;</description><category>Readify</category><comments>http://DamianPEdwards.spaces.live.com/Blog/cns!A079DE667E1958B3!527.entry#comment</comments><guid isPermaLink="true">http://DamianPEdwards.spaces.live.com/Blog/cns!A079DE667E1958B3!527.entry</guid><pubDate>Sun, 21 Oct 2007 08:38:11 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://DamianPEdwards.spaces.live.com/blog/cns!A079DE667E1958B3!527/comments/feed.rss</wfw:commentRss><wfw:comment>http://DamianPEdwards.spaces.live.com/Blog/cns!A079DE667E1958B3!527.entry#comment</wfw:comment><dcterms:modified>2007-10-29T10:33:20Z</dcterms:modified></item><item><title>Readify Developer Network, Melbourne: Thursday, 18th October</title><link>http://DamianPEdwards.spaces.live.com/Blog/cns!A079DE667E1958B3!523.entry</link><description>&lt;p&gt;So the &lt;a href="http://www.readify.net/Default.aspx?tabid=286"&gt;Readify Developer Network&lt;/a&gt; (RDN) kicked off last week around Australia with sessions in Sydney, Canberra and Melbourne. &lt;a href="http://www.philipbeadle.net/"&gt;Phil Beadle&lt;/a&gt;, one of our &lt;a href="http://www.readify.net/technical+role+descriptions.aspx#Senior Consultant"&gt;Senior Consultants&lt;/a&gt;, traveled to all three cities to deliver his ReadiDepth session on &lt;a href="http://silverlight.net/Default.aspx"&gt;Silverlight&lt;/a&gt; for Developers, while I gave the ReadiPrimer session on &lt;a href="http://wpf.netfx3.com/"&gt;WPF&lt;/a&gt; in Melbourne. &lt;p&gt;Next week, &lt;a href="http://msmvps.com/blogs/GregLow/Default.aspx"&gt;Dr Greg Low&lt;/a&gt; will be presenting the ReadiDepth session on an early look at &lt;a href="http://www.microsoft.com/sql/2008/default.mspx"&gt;SQL Server 2008&lt;/a&gt;, while I'll once again be delivering the ReadiPrimer in Melbourne, this time on &lt;a href="http://asp.net/ajax/"&gt;ASP.NET AJAX&lt;/a&gt;. &lt;p&gt;If you want to come along, there are both early morning &amp;amp; evening sessions. Full details can be found on our &lt;a href="http://www.readify.net/Default.aspx?tabid=286"&gt;website&lt;/a&gt;. &lt;p&gt;I hope to see you there!&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-6883226023675471693&amp;page=RSS%3a+Readify+Developer+Network%2c+Melbourne%3a+Thursday%2c+18th+October&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=damianpedwards.spaces.live.com&amp;amp;GT1=DamianPEdwards"&gt;</description><category>Readify</category><comments>http://DamianPEdwards.spaces.live.com/Blog/cns!A079DE667E1958B3!523.entry#comment</comments><guid isPermaLink="true">http://DamianPEdwards.spaces.live.com/Blog/cns!A079DE667E1958B3!523.entry</guid><pubDate>Fri, 12 Oct 2007 11:26:27 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://DamianPEdwards.spaces.live.com/blog/cns!A079DE667E1958B3!523/comments/feed.rss</wfw:commentRss><wfw:comment>http://DamianPEdwards.spaces.live.com/Blog/cns!A079DE667E1958B3!523.entry#comment</wfw:comment><dcterms:modified>2007-10-12T11:26:27Z</dcterms:modified></item><item><title>Typing speed</title><link>http://DamianPEdwards.spaces.live.com/Blog/cns!A079DE667E1958B3!518.entry</link><description>&lt;p&gt;&lt;a href="http://notgartner.wordpress.com/"&gt;Mitch&lt;/a&gt; did it, then &lt;a href="http://markitup.com/"&gt;Darren&lt;/a&gt;. Now I've taken the &lt;a href="http://www.typequick.com/ttest/testyourskills.html"&gt;typing test&lt;/a&gt;. &lt;p&gt;&lt;a href="http://www.typequick.com/ttest/testyourskills.html"&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px" height=160 alt="Typing test" src="http://tkfiles.storage.msn.com/y1pnnZ4cNJhIAYLZpLyzRyay5o9BGicx_UFLCsTqlk-eJDXHytgWyAu8_sqh6SksA9l4Q7qvgiI8B0?PARTNER=WRITER" width=341 border=0&gt;&lt;/a&gt;  &lt;p&gt;I'm pretty happy with that, given that I'm not used to copying out great reams of repeating (or non-repeating) text. &lt;p&gt;What do you get?&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-6883226023675471693&amp;page=RSS%3a+Typing+speed&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=damianpedwards.spaces.live.com&amp;amp;GT1=DamianPEdwards"&gt;</description><category>Development</category><comments>http://DamianPEdwards.spaces.live.com/Blog/cns!A079DE667E1958B3!518.entry#comment</comments><guid isPermaLink="true">http://DamianPEdwards.spaces.live.com/Blog/cns!A079DE667E1958B3!518.entry</guid><pubDate>Sun, 16 Sep 2007 11:59:17 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://DamianPEdwards.spaces.live.com/blog/cns!A079DE667E1958B3!518/comments/feed.rss</wfw:commentRss><wfw:comment>http://DamianPEdwards.spaces.live.com/Blog/cns!A079DE667E1958B3!518.entry#comment</wfw:comment><dcterms:modified>2007-09-16T11:59:17Z</dcterms:modified></item><item><title>Learning ASP.NET</title><link>http://DamianPEdwards.spaces.live.com/Blog/cns!A079DE667E1958B3!514.entry</link><description>&lt;p&gt;I often get asked by people what they should do to start learning ASP.NET, that is, what bits should they look at first and what bits after that. The following is a list I put together for somebody recently that outlines a path to a good solid foundation of knowledge on ASP.NET. It doesn't include everything (mobile controls, web parts, performance tuning, deployment, web services, etc.) but it's a good start for any web developer wanting to get to grips with ASP.NET. &lt;ol&gt; &lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/ms227435.aspx"&gt;ASP.NET Application &amp;amp; Page Life Cycle&lt;/a&gt; &lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/ms178683.aspx"&gt;Configuration management&lt;/a&gt; &lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/ms178468.aspx"&gt;HTTP Modules&lt;/a&gt; &lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/5c67a8bd.aspx"&gt;HTTP Handlers&lt;/a&gt; &lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/eeyk640h.aspx"&gt;Authentication&lt;/a&gt; &amp;amp; &lt;a href="http://msdn2.microsoft.com/en-us/library/tw292whz.aspx"&gt;Membership&lt;/a&gt; providers (included and custom) &lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/wce3kxhd.aspx"&gt;Authorisation&lt;/a&gt; &amp;amp; &lt;a href="http://msdn2.microsoft.com/en-us/library/9ab2fxh0.aspx"&gt;Roles&lt;/a&gt; providers (included and custom) &lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/fddycb06.aspx"&gt;Pages&lt;/a&gt; &lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/7698y1f0.aspx"&gt;Server Controls&lt;/a&gt; (the included controls in ASP.NET) &lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/yy2ykkab.aspx"&gt;Site Maps&lt;/a&gt; (included providers and custom) &lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/18sc7456.aspx"&gt;Master Pages&lt;/a&gt; &amp;amp; &lt;a href="http://msdn2.microsoft.com/en-us/library/wcyt4fxb.aspx"&gt;Themes&lt;/a&gt; (and Cascading Style Sheets) &lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/fb3w5b53.aspx"&gt;User Controls&lt;/a&gt; &lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/6759sth4.aspx"&gt;Data Binding&lt;/a&gt; &lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/y5y3c2c5.aspx"&gt;State Management&lt;/a&gt; (&lt;a href="http://msdn2.microsoft.com/en-us/library/87069683.aspx"&gt;Session&lt;/a&gt;, &lt;a href="http://msdn2.microsoft.com/en-us/library/bf9xhdz4.aspx"&gt;Application&lt;/a&gt;, &lt;a href="http://msdn2.microsoft.com/en-us/library/ms178197.aspx"&gt;ViewState&lt;/a&gt;, &lt;a href="http://msdn2.microsoft.com/en-us/library/ms178193.aspx"&gt;Cookies&lt;/a&gt; and &lt;a href="http://msdn2.microsoft.com/en-us/library/at64shx3.aspx"&gt;Profiles&lt;/a&gt;) &lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/06bh14hk.aspx"&gt;Output Caching&lt;/a&gt; &lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/6hbbsfk6.aspx"&gt;Object Caching&lt;/a&gt; &lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/zt27tfhy.aspx"&gt;Custom controls&lt;/a&gt; (Composite Controls &amp;amp; custom controls) &lt;li&gt;&lt;a href="http://www.asp.net/ajax/documentation/"&gt;ASP.NET AJAX 1.0&lt;/a&gt; (including client script libraries and &lt;a href="http://www.asp.net/AJAX/Documentation/Live/overview/ScriptManagerOverview.aspx"&gt;management&lt;/a&gt;) &lt;li&gt;&lt;a href="http://www.asp.net/ajax/control-toolkit/live/"&gt;ASP.NET AJAX Control Toolkit&lt;/a&gt; &lt;li&gt;&lt;a href="http://www.asp.net/cssadapters/"&gt;CSS Friendly Adapters&lt;/a&gt; (get the latest release on &lt;a href="http://www.codeplex.com/cssfriendly"&gt;CodePlex&lt;/a&gt;, uses the &lt;a href="http://msdn2.microsoft.com/en-us/library/xfh02sh4.aspx"&gt;control adapter capabilities&lt;/a&gt; of ASP.NET to change the HTML emitted from the built-in server controls) &lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/c6zyy3s9.aspx"&gt;Globalization support&lt;/a&gt;&lt;/ol&gt; &lt;p&gt;Be sure to check out the &lt;a href="http://quickstarts.asp.net/QuickStartv20/default.aspx"&gt;QuickStarts&lt;/a&gt; site for some great tutorial material too.&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-6883226023675471693&amp;page=RSS%3a+Learning+ASP.NET&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=damianpedwards.spaces.live.com&amp;amp;GT1=DamianPEdwards"&gt;</description><category>Readify</category><comments>http://DamianPEdwards.spaces.live.com/Blog/cns!A079DE667E1958B3!514.entry#comment</comments><guid isPermaLink="true">http://DamianPEdwards.spaces.live.com/Blog/cns!A079DE667E1958B3!514.entry</guid><pubDate>Mon, 03 Sep 2007 12:56:22 GMT</pubDate><slash:comments>1</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://DamianPEdwards.spaces.live.com/blog/cns!A079DE667E1958B3!514/comments/feed.rss</wfw:commentRss><wfw:comment>http://DamianPEdwards.spaces.live.com/Blog/cns!A079DE667E1958B3!514.entry#comment</wfw:comment><dcterms:modified>2007-09-03T12:56:22Z</dcterms:modified></item><item><title>Tech.Ed Oz: More photos uploaded</title><link>http://DamianPEdwards.spaces.live.com/Blog/cns!A079DE667E1958B3!509.entry</link><description>&lt;p&gt;I've uploaded a bunch more photos from Tech.Ed and the party to &lt;a href="http://www.flickr.com/photos/tags/teched07"&gt;flickr&lt;/a&gt; &lt;p&gt;&lt;a title="Frank on stage" href="http://www.flickr.com/photos/84411628@N00/1090925989/"&gt;&lt;img alt="Frank on stage" src="http://static.flickr.com/1385/1090925989_58090d70da_m.jpg" border=0&gt;&lt;/a&gt;&lt;a title="Some of the Readify crew at the party" href="http://www.flickr.com/photos/84411628@N00/1090923249/"&gt;&lt;img alt="Some of the Readify crew at the party" src="http://static.flickr.com/1145/1090923249_56fd878ad3_m.jpg" border