﻿<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>AR Development Center</title>
    <description>Technology Postings</description>
    <item>
      <title>Daily Recap: 5/3/2012</title>
      <description>&lt;p&gt;All sorts of SharePoint development has been happening for the last couple of days. SharePoint is an amazing product, and it is turning out to be a fantastic development platform. However, the support for versioning applications is sorely lacking. The current iteration of SharePoint (2012) doesn’t account well for what will happen to your existing templates and features when changes need to be made. As I wade through yet another&amp;nbsp; difficult task that should be oh-so-simple, I present today’s topics:&lt;/p&gt;  
&lt;h2&gt;Transition away from “Windows Live” has been mapped&lt;/h2&gt;  
&lt;p&gt;In a Building Windows 8 blog post yesterday, a roadmap was posted (in the form of a chart) showing how the current Windows Live services will be branded. &lt;/p&gt;  
&lt;p&gt;&lt;a href="http://devcenter.auburnrandall.com/AttachmentServer.ashx?a=294"&gt;&lt;img width="397" height="326" title="image" alt="image" src="http://devcenter.auburnrandall.com/AttachmentServer.ashx?a=295" border="0" style="border: 0px currentcolor; padding-top: 0px; padding-right: 0px; padding-left: 0px; display: inline; background-image: none;" /&gt;&lt;/a&gt;&lt;/p&gt;  
&lt;p&gt;&lt;a title="http://blogs.msdn.com/b/b8/archive/2012/05/02/cloud-services-for-windows-8-and-windows-phone-windows-live-reimagined.aspx" href="http://blogs.msdn.com/b/b8/archive/2012/05/02/cloud-services-for-windows-8-and-windows-phone-windows-live-reimagined.aspx"&gt;http://blogs.msdn.com/b/b8/archive/2012/05/02/cloud-services-for-windows-8-and-windows-phone-windows-live-reimagined.aspx&lt;/a&gt;&lt;/p&gt;  
&lt;h2&gt;Changes coming for Inside Xbox&lt;/h2&gt;  
&lt;p&gt;Xbox media extraordinaire&amp;nbsp; Larry Hyrb (Major Nelson) announced on his blog that there are changes a-coming for the Microsoft branded Inside Xbox. Those changes? Inside Xbox is canceled.&lt;/p&gt;  
&lt;p&gt;&lt;a title="http://majornelson.com/2012/05/02/changes-for-inside-xbox-u-s/" href="http://majornelson.com/2012/05/02/changes-for-inside-xbox-u-s/"&gt;http://majornelson.com/2012/05/02/changes-for-inside-xbox-u-s/&lt;/a&gt;&lt;/p&gt;  
&lt;h2&gt;Microsoft Research opens a NYC Lab&lt;/h2&gt;  
&lt;p&gt;Microsoft Research New York City is now open for business. Integral in the opening are three founding members of the team. One interesting tidbit is that 14 scientists have been pulled from Yahoo to become involved with this project.&lt;/p&gt;  
&lt;p&gt;The NYC campus will be tasked with studying how people interact and share information online.&lt;/p&gt;  
&lt;p&gt;&lt;a title="http://research.microsoft.com/en-us/news/features/msrnyc-050212.aspx" href="http://research.microsoft.com/en-us/news/features/msrnyc-050212.aspx"&gt;http://research.microsoft.com/en-us/news/features/msrnyc-050212.aspx&lt;/a&gt;&lt;/p&gt;  
&lt;p&gt;&lt;a title="http://news.cnet.com/8301-1023_3-57426719-93/microsoft-snags-yahoo-scientists-for-new-research-lab/" href="http://news.cnet.com/8301-1023_3-57426719-93/microsoft-snags-yahoo-scientists-for-new-research-lab/"&gt;http://news.cnet.com/8301-1023_3-57426719-93/microsoft-snags-yahoo-scientists-for-new-research-lab/&lt;/a&gt;&lt;/p&gt;  
&lt;h2&gt;Ubisoft Toronto is growing&lt;/h2&gt;  
&lt;p&gt;The Ubisoft studio, based in Toronto, that has been working on the Splinter Cell titles will be infused with roughly $500 million.&amp;nbsp; The headcount is expected to grow from the current 200 to 1000 staffers by 2022. &lt;/p&gt;  
&lt;p&gt;&lt;a title="http://www.gamespot.com/news/ubisoft-investing-507m-in-splinter-cell-shop-6374908" href="http://www.gamespot.com/news/ubisoft-investing-507m-in-splinter-cell-shop-6374908"&gt;http://www.gamespot.com/news/ubisoft-investing-507m-in-splinter-cell-shop-6374908&lt;/a&gt;&lt;/p&gt;</description>
      <link>http://devcenter.auburnrandall.com/daily-recap-5-3-2012.aspx</link>
      <pubDate>Thu, 03 May 2012 19:27:59 GMT</pubDate>
      <dc:creator>jrandall</dc:creator>
    </item>
    <item>
      <title>Daily Recap: 5/2/2012</title>
      <description>&lt;p&gt;It’s been fairly quite around here lately. I’ve been playing Gears of War 2 (yeah – I know, a &lt;em&gt;little &lt;/em&gt;late to the party) and it is awesome so far. I’ve also been catching up on a couple of my favorite shows: &lt;a href="http://www.nbc.com/awake/" target="_blank"&gt;Awake&lt;/a&gt; and &lt;a href="http://www.fox.com/the-finder/" target="_blank"&gt;The Finder&lt;/a&gt;. Both of which are likely to be canceled. So, I either have an awful sense of what makes for good T.V. or the rest of the country does (I’ll go with the latter).&lt;/p&gt;  
&lt;p&gt;On to what I’ve deemed as newsworthy for today:&lt;/p&gt;  
&lt;h2&gt;Microsoft planning a subscription based Xbox 360&lt;/h2&gt;  
&lt;p&gt;It looks like Microsoft may be toying with providing an Xbox console that will be subsidized by subscription fees. This plan follows the typical cell phone model. Sign up for a multi-year contract and you’ll get the hardware at a deeply discounted cost. In this case, the console will be $99 with a two year Xbox Live commitment of $15/month.&lt;/p&gt;  
&lt;p&gt;Microsoft definitely likes the subscription model (examples: &lt;a href="http://www.zune.net/en-us/products/zunepass/default.htm" target="_blank"&gt;Music Pass&lt;/a&gt;, &lt;a href="https://skydrive.live.com/" target="_blank"&gt;SkyDrive&lt;/a&gt;, &lt;a href="http://www.xbox.com/en-US/live/" target="_blank"&gt;Xbox Live&lt;/a&gt;) so this is not really too much of a surprise. Companies love that recurring revenue and if this succeeds, it will bring in a boatload of it.&lt;/p&gt;  
&lt;p&gt;&lt;a title="http://www.gamespot.com/news/microsoft-planning-99-xbox-360-with-subscription-report-6374682" href="http://www.gamespot.com/news/microsoft-planning-99-xbox-360-with-subscription-report-6374682"&gt;http://www.gamespot.com/news/microsoft-planning-99-xbox-360-with-subscription-report-6374682&lt;/a&gt;&lt;/p&gt;  
&lt;h2&gt;Papa’s got a brand new Bing&lt;/h2&gt;  
&lt;p&gt;My favorite &lt;a href="www.bing.com" target="_blank"&gt;search engine&lt;/a&gt; (I guess I &lt;em&gt;am&lt;/em&gt; a Microsoft fanboy) received some attention today for its new look. Whether you’re on the “they made it look more like Google” or “they made it more Metro” side of the argument, it’s difficult to dismiss the results. They are fantastic. There are a few instantly noticeable changes, such as the typography, spacing etc. I find the subtle changes to be the best. For instance, I &lt;em&gt;love&lt;/em&gt; the icons that appear in search results that let you know if one of your friends “likes” the page.&lt;/p&gt;  
&lt;p&gt;Bing is a formidable challenger in this marketplace. The competition has made it a lot of fun watching internet search evolve over the last couple of years.&lt;/p&gt;  
&lt;p&gt;&lt;a title="http://www.bing.com/community/site_blogs/b/search/archive/2012/05/02/bing-gets-a-new-look.aspx" href="http://www.bing.com/community/site_blogs/b/search/archive/2012/05/02/bing-gets-a-new-look.aspx"&gt;http://www.bing.com/community/site_blogs/b/search/archive/2012/05/02/bing-gets-a-new-look.aspx&lt;/a&gt;&lt;/p&gt;  
&lt;h2&gt;Windows 8 Tiles, Toasts and Badges tutorial&lt;/h2&gt;  
&lt;p&gt;&lt;a href="http://www.silverlightshow.net/Profile/gillcleeren.aspx" target="_blank"&gt;Gil Cleeren&lt;/a&gt; over at the &lt;a href="http://www.silverlightshow.net/" target="_blank"&gt;Silverlight Show&lt;/a&gt; published a great tutorial on how to work with Tiles, Toasts and Badges within Windows 8. Check it out:&lt;/p&gt;  
&lt;p&gt;&lt;a title="http://www.silverlightshow.net/items/Windows-8-and-the-future-of-XAML-Part-6-Tiles-toasts-and-badges.aspx" href="http://www.silverlightshow.net/items/Windows-8-and-the-future-of-XAML-Part-6-Tiles-toasts-and-badges.aspx"&gt;http://www.silverlightshow.net/items/Windows-8-and-the-future-of-XAML-Part-6-Tiles-toasts-and-badges.aspx&lt;/a&gt;&lt;/p&gt;</description>
      <link>http://devcenter.auburnrandall.com/daily-recap-5-2-2012.aspx</link>
      <pubDate>Wed, 02 May 2012 17:54:47 GMT</pubDate>
      <dc:creator>jrandall</dc:creator>
    </item>
    <item>
      <title>Daily Recap: 5/1/2012</title>
      <description>&lt;p&gt;Happy &lt;a href="http://www.bing.com/search?q=may+day&amp;qs=n&amp;form=QBLH&amp;pq=may+day&amp;sc=0-0&amp;sp=-1&amp;sk=" target="_blank"&gt;May Day&lt;/a&gt;.&amp;nbsp; According to Bing, the parties for this springtime event became so risqué that the Catholic Church banned celebrations. Well, if you have time after you’ve been dancing around the maypole, it may be worth checking out the following articles that have been popping up online.&lt;/p&gt;  
&lt;h2&gt;Hulu may start requiring cable subscription&lt;/h2&gt;  
&lt;p&gt;The rumor spreading through the Twitterverse is that Hulu is considering the requirement that its users have a cable subscription. I sincerely hope that this rumor turns out to be false. If it is true, this decision will likely rank right up there with the &lt;a href="http://www.thestreet.com/story/11366623/1/netflix-2011-review-price-for-bad-decisions.html" target="_blank"&gt;Netflix debacle&lt;/a&gt; awhile ago. The whole point of Hulu is to let folks (like myself) to become free of the outrageous fees that are associated with cable. If I’m going to have to have cable to have Hulu, then why in the hell would I also keep Hulu?&lt;/p&gt;  
&lt;p&gt;&lt;a title="http://www.pcmag.com/article2/0,2817,2403773,00.asp" href="http://www.pcmag.com/article2/0,2817,2403773,00.asp"&gt;http://www.pcmag.com/article2/0,2817,2403773,00.asp&lt;/a&gt;&lt;/p&gt;  
&lt;h2&gt;Great overview of RAW v JPEG&lt;/h2&gt;  
&lt;p&gt;Most (all?) DLSRs come equipped with the ability to “shoot” in RAW. Many newbies (myself included) that bought a DLSR because we wanted more than a point-and-shoot have had the following conversation:&lt;/p&gt;  
&lt;p&gt;&lt;strong&gt;Photographer Friend: &lt;/strong&gt;Nice camera, what made you decide on the Nikon/Canon?&lt;/p&gt;  
&lt;p&gt;&lt;strong&gt;Newbie trying to be cool:&lt;/strong&gt; Uhhhh&lt;/p&gt;  
&lt;p&gt;&lt;strong&gt;Photographer Friend: &lt;/strong&gt;Yeah, I get it. It’s tough to take sides. So, what do you shoot in?&lt;/p&gt;  
&lt;p&gt;&lt;strong&gt;Newbie: &lt;/strong&gt;Uhhhhh&lt;/p&gt;  
&lt;p&gt;&lt;strong&gt;Photographer: &lt;/strong&gt;I have a huge memory card, so I usually go the RAW+JPEG route.&lt;/p&gt;  
&lt;p&gt;&lt;strong&gt;Clueless Newbie: &lt;/strong&gt;I’m going to go stand over here (pointing to anyplace other than where the conversation is taking place)&lt;/p&gt;  
&lt;p&gt;I remember where I was when this happened. RAW? That sounded like something that the person made up to make me feel ignorant. Well, the joke is on them. I’m ignorant all on my own! Save yourself the embarrassment and read the following article which does a fantastic job of explaining the difference between shooting in the two formats.&lt;/p&gt;  
&lt;p&gt;&lt;a title="http://www.slrlounge.com/raw-vs-jpeg-jpg-the-ultimate-visual-guide" href="http://www.slrlounge.com/raw-vs-jpeg-jpg-the-ultimate-visual-guide"&gt;http://www.slrlounge.com/raw-vs-jpeg-jpg-the-ultimate-visual-guide&lt;/a&gt;&lt;/p&gt;  
&lt;h2&gt;Supermoon of 2012 is coming&lt;/h2&gt;  
&lt;p&gt;The biggest full moon of the year is due to arrive this weekend. Oh and its going to be Cinco De Mayo. Extra full moon lunacy is sure to be in store. Fantastic!&lt;/p&gt;  
&lt;p&gt;&lt;a title="http://www.space.com/15474-supermoon-full-moon-2012.html" href="http://www.space.com/15474-supermoon-full-moon-2012.html"&gt;http://www.space.com/15474-supermoon-full-moon-2012.html&lt;/a&gt;&lt;/p&gt;  
&lt;h2&gt;If you release an app in the woods will anybody hear it?&lt;/h2&gt;  
&lt;p&gt;Microsoft is going to crack down on app submissions for Windows Phone. I applaud the decision, but maybe they should crack down on their marketing department and get the phones into more people’s hands.&lt;/p&gt;  
&lt;p&gt;&lt;a title="http://www.webpronews.com/windows-phone-marketplace-gets-strict-with-submissions-2012-05" href="http://www.webpronews.com/windows-phone-marketplace-gets-strict-with-submissions-2012-05"&gt;http://www.webpronews.com/windows-phone-marketplace-gets-strict-with-submissions-2012-05&lt;/a&gt;&lt;/p&gt;</description>
      <link>http://devcenter.auburnrandall.com/daily-recap-5-1-2012.aspx</link>
      <pubDate>Tue, 01 May 2012 18:43:26 GMT</pubDate>
      <dc:creator>jrandall</dc:creator>
    </item>
    <item>
      <title>Daily Recap: 4/30/2012</title>
      <description>&lt;p&gt;Here’s a little Public Service Announcement for all you Xbox 360 owners out there: &lt;strong&gt;Back up your save files&lt;/strong&gt;. The hard drive on my 360 Slim acted up on my Friday evening. The only alternative I had to get the system up and running was to format the drive. All of my game saves are gone.&lt;/p&gt;  
&lt;p&gt;The symptoms of this failure were very strange. The system would power up as if it were working normally, but it would hang on the the initial animation sequence (where the Xbox orb is displayed). After a minute or two I was presented with the option to sign-in. When I tried my usual gamertag, I received an error that there was no storage found.&lt;/p&gt;  
&lt;p&gt;I took a look at the system menu and the drive was showing as “Unformatted”. I shut the thing off, pulled the drive, and it booted perfectly. Damn.&lt;/p&gt;  
&lt;p&gt;I put the drive in and went back to the system menu. The only option I had was to format the drive, which seemed to work. I know that I have a wonky drive, but I’m going to ride it out until it dies completely. In the meantime, I’ll take advantage of saving my game files to the cloud.&lt;/p&gt;  
&lt;p&gt;Onto the news:&lt;/p&gt;  
&lt;h2&gt;LG is backing out of Windows Phone Development&lt;/h2&gt;  
&lt;p&gt;Unsettling news from the Windows Phone device department: LG is going to cease production of phones aimed at Windows. It looks like LG will keep an eye on the Windows devices, but for the time being, they just don’t see it as a profitable environment.&lt;/p&gt;  
&lt;p&gt;&lt;a title="http://www.theverge.com/2012/4/30/2988392/lg-no-immediate-plans-windows-phone-hardware?utm_source=twitterfeed&amp;utm_medium=twitter&amp;utm_campaign=Feed%3A+WinRumors+%28WinRumors%29" href="http://www.theverge.com/2012/4/30/2988392/lg-no-immediate-plans-windows-phone-hardware?utm_source=twitterfeed&amp;utm_medium=twitter&amp;utm_campaign=Feed%3A+WinRumors+%28WinRumors%29"&gt;http://www.theverge.com/2012/4/30/2988392/lg-no-immediate-plans-windows-phone-hardware?utm_source=twitterfeed&amp;amp;utm_medium=twitter&amp;amp;utm_campaign=Feed%3A+WinRumors+%28WinRumors%29&lt;/a&gt;&lt;/p&gt;  
&lt;h2&gt;Microsoft + Nook = Newco&lt;/h2&gt;  
&lt;p&gt;In an interesting development, Microsoft is getting into the e-book reader business by investing (to the tune of $300 million) with Barnes and Noble. With the release of Windows 8 around the corner, and the target device being some sort of tablet, this seems like a good match.&lt;/p&gt;  
&lt;p&gt;&lt;a title="http://www.msnbc.msn.com/id/47228807/ns/business-us_business/" href="http://www.msnbc.msn.com/id/47228807/ns/business-us_business/"&gt;http://www.msnbc.msn.com/id/47228807/ns/business-us_business/&lt;/a&gt;&lt;/p&gt;  
&lt;h2&gt;Halo 4 Live Action Miniseries&lt;/h2&gt;  
&lt;p&gt;In one of the more awesome trends of recent times, Microsoft will be releasing a live action mini-series based on the Halo universe prior to the much anticipated release of Halo 4. Not only will this series market the game, but it will serve as a refresher to help to bring players up to speed on what’s going on with the Master Chief.&lt;/p&gt;  
&lt;p&gt;&lt;a title="http://www.variety.com/article/VR1118053273" href="http://www.variety.com/article/VR1118053273"&gt;http://www.variety.com/article/VR1118053273&lt;/a&gt;&lt;/p&gt;</description>
      <link>http://devcenter.auburnrandall.com/daily-recap-4-30-2012.aspx</link>
      <pubDate>Mon, 30 Apr 2012 20:39:11 GMT</pubDate>
      <dc:creator>jrandall</dc:creator>
    </item>
    <item>
      <title>Daily Recap: 4/25/2012</title>
      <description>&lt;h3&gt;Windows Security Essentials 4.0 is available for Download&lt;/h3&gt;  
&lt;p&gt;A new version of this &lt;strong&gt;free&lt;/strong&gt; anti-virus software, available directly from Microsoft is now ready for download. Windows Security Essentials is easy to install and seamlessly runs on your Windows system.&lt;/p&gt;  
&lt;p&gt;&lt;a title="http://windows.microsoft.com/en-US/windows/products/security-essentials" href="http://windows.microsoft.com/en-US/windows/products/security-essentials"&gt;http://windows.microsoft.com/en-US/windows/products/security-essentials&lt;/a&gt;&lt;/p&gt;  
&lt;h3&gt;Microsoft SkyDrive now has published data plans&lt;/h3&gt;  
&lt;p&gt;The time we all knew would be coming has finally arrived. Riding the 25GB free storage gravy train on SkyDrive has come to an end. New accounts will receive 7GB free storage with the option to purchase additional storage. The good news is that the rates for purchasing online storage are quite affordable. The better news is that if you log onto your SkyDrive account soon, you will be grandfathered into the 25GB free plan.&lt;/p&gt;  
&lt;p&gt;&lt;a title="https://skydrive.live.com/" href="https://skydrive.live.com/"&gt;https://skydrive.live.com/&lt;/a&gt;&lt;/p&gt;  
&lt;p&gt;&lt;a href="http://devcenter.auburnrandall.com/AttachmentServer.ashx?a=291"&gt;&lt;img width="454" height="172" title="image" alt="image" src="http://devcenter.auburnrandall.com/AttachmentServer.ashx?a=292" border="0" style="border-width: 0px; width: 454px; height: 172px; padding-top: 0px; padding-right: 0px; padding-left: 0px; display: inline; background-image: none;" /&gt;&lt;/a&gt;&lt;/p&gt;  
&lt;h3&gt;NASA Time Lapse from ISS Video is a MUST SEE&lt;/h3&gt;  
&lt;p&gt;If you haven’t had a chance to watch the time-lapse video of the Earth taken from the International Space Station, then you must stop what you are doing and go watch it now.&lt;/p&gt;  &lt;div class="wlWriterEditableSmartContent" id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:aab6ba7d-ee8c-4546-b78e-fd08572a94cb" style="margin: 0px; padding: 0px; float: none; display: inline;"&gt;&lt;div id="7b37ca3a-d54e-4b2b-9a4d-acd1c2efb03b" style="margin: 0px; padding: 0px; display: inline;"&gt;
&lt;div&gt;&lt;embed width="448" height="252" src="http://www.youtube.com/v/hWz5ltE_I4c?hl=en&amp;hd=1" type="application/x-shockwave-flash" /&gt;&lt;/div&gt;&lt;/div&gt;
&lt;div style="width: 448px; clear: both; font-size: 0.8em;"&gt;Time Lapse Video from ISS&lt;/div&gt;&lt;/div&gt;  
&lt;h3&gt;Microsoft to preview new music service at E3&lt;/h3&gt;  
&lt;p&gt;The Zune replacement (codenamed “Woodstock”) will ship with Windows 8 later this fall. Highlights of the service from the article on The Verge are:&lt;/p&gt;  
&lt;ul&gt;   
&lt;li&gt;Cross platform support (Windows, iOS, Xbox and Andriod)&lt;/li&gt;    
&lt;li&gt;Tight integration into Facebook allowing friends to share tracks and playlists&lt;/li&gt;    
&lt;li&gt;No plug-in when used from a browser&lt;/li&gt; &lt;/ul&gt;  
&lt;p&gt;&lt;a title="http://www.theverge.com/2012/4/25/2973682/microsoft-xbox-live-music-service-codename-woodstock-e3-2012?utm_source=dlvr.it&amp;utm_medium=twitter" href="http://www.theverge.com/2012/4/25/2973682/microsoft-xbox-live-music-service-codename-woodstock-e3-2012?utm_source=dlvr.it&amp;utm_medium=twitter"&gt;http://www.theverge.com/2012/4/25/2973682/microsoft-xbox-live-music-service-codename-woodstock-e3-2012?utm_source=dlvr.it&amp;amp;utm_medium=twitter&lt;/a&gt;&lt;/p&gt;</description>
      <link>http://devcenter.auburnrandall.com/daily-recap-4-25-2012.aspx</link>
      <pubDate>Wed, 25 Apr 2012 13:59:05 GMT</pubDate>
      <dc:creator>jrandall</dc:creator>
    </item>
    <item>
      <title>Programmatically Create Discussion Thread</title>
      <description>&lt;p&gt;This article will walk-through how to write an event receiver that will create a new Discussion Thread when a Calendar item in another list is added. In SharePoint 2010 it is possible, and quite easy, to programmatically create entries in Lists and and Libraries and this example should demonstrate this.&lt;/p&gt;  
&lt;h3&gt;Setup the Project&lt;/h3&gt;  
&lt;p&gt;The first thing I will do is to create a new &lt;em&gt;2010 Empty SharePoint Project.&lt;/em&gt;&lt;/p&gt;  
&lt;p&gt;&lt;a href="http://devcenter.auburnrandall.com/AttachmentServer.ashx?a=257"&gt;&lt;img width="522" height="255" title="image" alt="image" src="http://devcenter.auburnrandall.com/AttachmentServer.ashx?a=258" border="0" style="border: 0px currentcolor; width: 522px; height: 255px; padding-top: 0px; padding-right: 0px; padding-left: 0px; display: inline; background-image: none;" /&gt;&lt;/a&gt;&lt;/p&gt;  
&lt;p&gt;When prompted, connect to an existing SharePoint site (one that has a Calendar and a Discussion Group). For this example, it shouldn’t matter if you choose a Sandbox solution or a Farm solution. I chose Sandbox. Once the solution is setup, you should see something similar to the following:&lt;/p&gt;  
&lt;p&gt;&lt;a href="http://devcenter.auburnrandall.com/AttachmentServer.ashx?a=259"&gt;&lt;img width="219" height="152" title="image" alt="image" src="http://devcenter.auburnrandall.com/AttachmentServer.ashx?a=260" border="0" style="border: 0px currentcolor; width: 219px; height: 152px; padding-top: 0px; padding-right: 0px; padding-left: 0px; display: inline; background-image: none;" /&gt;&lt;/a&gt;&lt;/p&gt;  
&lt;p&gt;Next, add an event receiver by right-clicking on the SharePoint project and selecting &lt;em&gt;Add &amp;gt; New Item.&lt;/em&gt;&lt;/p&gt;  
&lt;p&gt;&lt;a href="http://devcenter.auburnrandall.com/AttachmentServer.ashx?a=261"&gt;&lt;img width="244" height="145" title="image" alt="image" src="http://devcenter.auburnrandall.com/AttachmentServer.ashx?a=262" border="0" style="margin: 0px; border: 0px currentcolor; padding-top: 0px; padding-right: 0px; padding-left: 0px; display: inline; background-image: none;" /&gt;&lt;/a&gt;&lt;/p&gt;  
&lt;p&gt;You should get a dialog box indicating that Visual Studio is connecting to your SharePoint site. Once the connection has been established, you will see a list of event receiver types, sources and events. As shown below, I selected &lt;strong&gt;List Item Events &lt;/strong&gt;for the &lt;em&gt;event receiver type&lt;/em&gt;, &lt;strong&gt;Calendar &lt;/strong&gt;for the &lt;em&gt;event source&lt;/em&gt; and &lt;em&gt;An item was added&lt;/em&gt; for the &lt;strong&gt;event&lt;/strong&gt;.&lt;/p&gt;  
&lt;p&gt;&lt;a href="http://devcenter.auburnrandall.com/AttachmentServer.ashx?a=263"&gt;&lt;img width="466" height="358" title="image" alt="image" src="http://devcenter.auburnrandall.com/AttachmentServer.ashx?a=264" border="0" style="border: 0px currentcolor; width: 466px; height: 358px; padding-top: 0px; padding-right: 0px; padding-left: 0px; display: inline; background-image: none;" /&gt;&lt;/a&gt;&amp;nbsp; &lt;/p&gt;  
&lt;p&gt;Your solution should now look similar to the following. Note that the Feature and Packaging elements have automatically been created. This solution is technically ready to deploy to SharePoint (although we haven’t added the code for it do anything).&lt;/p&gt;  
&lt;p&gt;&lt;a href="http://devcenter.auburnrandall.com/AttachmentServer.ashx?a=265"&gt;&lt;img width="299" height="286" title="image" alt="image" src="http://devcenter.auburnrandall.com/AttachmentServer.ashx?a=266" border="0" style="border: 0px currentcolor; padding-top: 0px; padding-right: 0px; padding-left: 0px; display: inline; background-image: none;" /&gt;&lt;/a&gt;&lt;/p&gt;  
&lt;h3&gt;Writing the Code&lt;/h3&gt;  
&lt;p&gt;Visual Studio will also have stubbed out the Event Receiver code and will have it open in the editor. The event that we selected will be ready for us to edit. This is where we are going to put our logic to add a Discussion Thread when a Calendar list item is created.&lt;/p&gt;  
&lt;p&gt;&lt;a href="http://devcenter.auburnrandall.com/AttachmentServer.ashx?a=267"&gt;&lt;img width="458" height="130" title="image" alt="image" src="http://devcenter.auburnrandall.com/AttachmentServer.ashx?a=268" border="0" style="border: 0px currentcolor; padding-top: 0px; padding-right: 0px; padding-left: 0px; display: inline; background-image: none;" /&gt;&lt;/a&gt;&lt;/p&gt;  
&lt;p&gt;To create a discussion thread based on the new calendar item we will add the following logic to the ItemAdded event:&lt;/p&gt;  
&lt;ul&gt;   
&lt;li&gt;Get references to the added calendar item and the current discussion list&lt;/li&gt;    
&lt;li&gt;Add a new list item to the discussion list&lt;/li&gt;    
&lt;ul&gt;     
&lt;li&gt;The title of the discussion thread will be the same as the calendar item&lt;/li&gt;      
&lt;li&gt;Use the built-in command SPUtility.CreateNewDiscussion to create the discussion thread&lt;/li&gt;   &lt;/ul&gt;    
&lt;li&gt;Update the body of the discussion thread to be the same as the Description of the calendar item&lt;/li&gt; &lt;/ul&gt;  
&lt;p&gt;&lt;a href="http://devcenter.auburnrandall.com/AttachmentServer.ashx?a=269"&gt;&lt;img width="689" height="263" title="image" alt="image" src="http://devcenter.auburnrandall.com/AttachmentServer.ashx?a=270" border="0" style="border: 0px currentcolor; padding-top: 0px; padding-right: 0px; padding-left: 0px; display: inline; background-image: none;" /&gt;&lt;/a&gt;&lt;/p&gt;  
&lt;h3&gt;Testing it out&lt;/h3&gt;  
&lt;p&gt;Once this code is in place we can run the solution and add a new calendar entry&lt;/p&gt;  
&lt;p&gt;&lt;a href="http://devcenter.auburnrandall.com/AttachmentServer.ashx?a=271"&gt;&lt;img width="625" height="705" title="image" alt="image" src="http://devcenter.auburnrandall.com/AttachmentServer.ashx?a=272" border="0" style="border: 0px currentcolor; padding-top: 0px; padding-right: 0px; padding-left: 0px; display: inline; background-image: none;" /&gt;&lt;/a&gt;&lt;/p&gt;  
&lt;p&gt;When &lt;em&gt;Save&lt;/em&gt; is pressed, the ItemAdded code will be run and the new Discussion list item will be created. Note that this may take SharePoint a moment or two to create the list item.&lt;/p&gt;  
&lt;p&gt;&lt;a href="http://devcenter.auburnrandall.com/AttachmentServer.ashx?a=273"&gt;&lt;img width="555" height="438" title="image" alt="image" src="http://devcenter.auburnrandall.com/AttachmentServer.ashx?a=274" border="0" style="border: 0px currentcolor; padding-top: 0px; padding-right: 0px; padding-left: 0px; display: inline; background-image: none;" /&gt;&lt;/a&gt;&lt;/p&gt;  
&lt;p&gt;When we look at the details of this new Discussion Thread we will see the attributes that were set in the ItemAdded event.&lt;/p&gt;  
&lt;p&gt;&lt;a href="http://devcenter.auburnrandall.com/AttachmentServer.ashx?a=275"&gt;&lt;img width="577" height="195" title="image" alt="image" src="http://devcenter.auburnrandall.com/AttachmentServer.ashx?a=276" border="0" style="border: 0px currentcolor; padding-top: 0px; padding-right: 0px; padding-left: 0px; display: inline; background-image: none;" /&gt;&lt;/a&gt;&lt;/p&gt;  
&lt;h3&gt;Review&lt;/h3&gt;  
&lt;p&gt;This example demonstrated just how easy it is to connect to List events within the SharePoint development environment.&lt;/p&gt;</description>
      <link>http://devcenter.auburnrandall.com/programmatically-create-discussion-list.aspx</link>
      <pubDate>Fri, 20 Apr 2012 20:48:07 GMT</pubDate>
      <dc:creator>jrandall</dc:creator>
    </item>
    <item>
      <title>Assigning a different drive letter</title>
      <description>&lt;p&gt;Sometimes you may need to assign a different drive letter to a drive that is on your Windows system.&lt;/p&gt;  &lt;p&gt;In the following example, I need to re-assign the &lt;em&gt;PDC2008&lt;/em&gt; drive (an external USB) from drive letter &lt;em&gt;F&lt;/em&gt; to &lt;em&gt;E&lt;/em&gt;.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://devcenter.auburnrandall.com/AttachmentServer.ashx?a=245"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://devcenter.auburnrandall.com/AttachmentServer.ashx?a=246" width="162" height="103" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;This task can be achieved by using the &lt;strong&gt;Disk Management&lt;/strong&gt; feature in the &lt;strong&gt;Computer Management&lt;/strong&gt; program. This program is accessed by right-clicking on the &lt;em&gt;Computer&lt;/em&gt; tab in the &lt;em&gt;Start&lt;/em&gt; &lt;em&gt;Menu&lt;/em&gt; and selecting &lt;em&gt;Manage&lt;/em&gt;.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://devcenter.auburnrandall.com/AttachmentServer.ashx?a=247"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://devcenter.auburnrandall.com/AttachmentServer.ashx?a=248" width="365" height="215" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Once in the &lt;strong&gt;Computer Management&lt;em&gt; &lt;/em&gt;&lt;/strong&gt;application, select &lt;strong&gt;Disk Management&lt;/strong&gt; located in the &lt;strong&gt;Storage&lt;/strong&gt; option. You will then see a list of the storage drives available on your computer.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://devcenter.auburnrandall.com/AttachmentServer.ashx?a=249"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://devcenter.auburnrandall.com/AttachmentServer.ashx?a=250" width="807" height="564" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;From here, right-click on the name drive that you want to change. On the pop-up menu, select &lt;strong&gt;Change Drive Letter and Paths…&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://devcenter.auburnrandall.com/AttachmentServer.ashx?a=251"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://devcenter.auburnrandall.com/AttachmentServer.ashx?a=252" width="440" height="324" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;A Window similar to the following will appear. Select the &lt;strong&gt;Change&lt;/strong&gt; button.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://devcenter.auburnrandall.com/AttachmentServer.ashx?a=253"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://devcenter.auburnrandall.com/AttachmentServer.ashx?a=254" width="398" height="266" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;You will now be presented with the &lt;strong&gt;Change Drive Letter or Path&lt;/strong&gt; dialog. Use the drive letter dropdown to select the new drive letter. Press OK and the drive will be remapped with the new letter.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://devcenter.auburnrandall.com/AttachmentServer.ashx?a=255"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://devcenter.auburnrandall.com/AttachmentServer.ashx?a=256" width="400" height="201" /&gt;&lt;/a&gt;&lt;/p&gt;</description>
      <link>http://devcenter.auburnrandall.com/Default.aspx?type=post&amp;id=268</link>
      <pubDate>Tue, 24 Jan 2012 16:40:43 GMT</pubDate>
      <dc:creator>jrandall</dc:creator>
    </item>
    <item>
      <title>New Stock Photos</title>
      <description>&lt;p&gt;The following Stock Photos are now available through &lt;a href="http://www.dreamstime.com/res3885861-dreamtime" target="_blank"&gt;Dreamstime&lt;/a&gt; for your print and website needs.&lt;/p&gt;  
&lt;p&gt;&lt;a href="http://www.dreamstime.com/microsoft-build-conference-rimage21351178-resi3885861"&gt;&lt;img alt="Microsoft Build Conference" src="http://thumbs.dreamstime.com/thumb_636/1317230764LZKSM1.jpg" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  
&lt;p&gt;&lt;a href="http://www.dreamstime.com/cave-at-maui-rimage21247431-resi3885861"&gt;&lt;img alt="Cave at Maui" src="http://thumbs.dreamstime.com/thumb_634/13166112775T6lsh.jpg" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  
&lt;p&gt;&lt;a href="http://www.dreamstime.com/country-yard-sale-sign-rimage21363644-resi3885861"&gt;&lt;img alt="Country Yard Sale Sign" src="http://thumbs.dreamstime.com/thumb_636/1317303439l0C2S3.jpg" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  
&lt;p&gt;Please &lt;a href="http://devcenter.auburnrandall.com/contact.aspx" target="_blank"&gt;contact me&lt;/a&gt; if you have specific image needs or suggestions.&lt;/p&gt;</description>
      <link>http://devcenter.auburnrandall.com/stock-photos104.aspx</link>
      <pubDate>Fri, 30 Sep 2011 17:41:08 GMT</pubDate>
      <dc:creator>jrandall</dc:creator>
    </item>
    <item>
      <title>Installing Skype on Windows 8</title>
      <description>&lt;p&gt;Skype will work on Windows 8. However, if you install it directly from the Skype website, the software may throw an error when it tries to log you in. Here are the steps that I completed (these will need to be done on the Desktop):&lt;/p&gt;  
&lt;ol&gt;   
&lt;li&gt;Uninstall any previous versions of Skype&lt;/li&gt;    
&lt;li&gt;Remove all references to Skype from the following folders: &lt;em&gt;ProgramData, ProgramFiles, Users/[username]/AppData/Roaming.&lt;/em&gt; These folders are hidden by default. To view them, enable the “Hidden items” checkbox in Windows Explorer. This option is found in the “View” tab (on the right hand side of the ribbon).&lt;/li&gt;    
&lt;li&gt;Download and install the latest (as of 9/20/2011) from &lt;a href="http://download.skype.com/msi/SkypeSetup_5.5.0.117.msi"&gt;http://download.skype.com/msi/SkypeSetup_5.5.0.117.msi&lt;/a&gt;. When downloading, I saved the file to my local folder and installed from there.&lt;/li&gt;    
&lt;li&gt;It seems like you need to launch Skype from the Start menu (the new Metro style interface). If may crash if you launch from the Desktop.&lt;/li&gt; &lt;/ol&gt;  
&lt;p&gt;&lt;span style="font-weight: bold;"&gt;Notes&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Windows Developer Preview Build 8102&lt;/p&gt;
&lt;p&gt;&lt;span style="font-weight: bold;"&gt;Sources&lt;/span&gt;&lt;/p&gt;  
&lt;p&gt;&lt;a title="http://community.skype.com/t5/Windows/Windows-8-Developer-Preview/td-p/156212" href="http://community.skype.com/t5/Windows/Windows-8-Developer-Preview/td-p/156212"&gt;http://community.skype.com/t5/Windows/Windows-8-Developer-Preview/td-p/156212&lt;/a&gt;&lt;/p&gt;</description>
      <link>http://devcenter.auburnrandall.com/installskypewin8.aspx</link>
      <pubDate>Tue, 20 Sep 2011 14:19:26 GMT</pubDate>
      <dc:creator>jrandall</dc:creator>
    </item>
    <item>
      <title>BUILD News</title>
      <description>&lt;p&gt;Here are some of the latest contests/rumors/news surrounding BUILD&lt;/p&gt;  
&lt;h3&gt;Contests&lt;/h3&gt;  
&lt;p&gt;&lt;a href="http://www.componentone.com/" target="_blank"&gt;ComponentOne&lt;/a&gt; is holding a contest where 10 attendees can fly in a fighter jet. &lt;a title="http://our.componentone.com/2011/09/01/ready-to-live-top-gun-in-real-life" href="http://our.componentone.com/2011/09/01/ready-to-live-top-gun-in-real-life"&gt;http://our.componentone.com/2011/09/01/ready-to-live-top-gun-in-real-life&lt;/a&gt;&lt;/p&gt;  
&lt;p&gt;&lt;a href="http://www.preemptive.com/" target="_blank"&gt;PreEmptive Solutions&lt;/a&gt; is giving away 3 Xbox bundles &lt;a title="http://www.preemptive.com/component/content/article/391" href="http://www.preemptive.com/component/content/article/391"&gt;http://www.preemptive.com/component/content/article/391&lt;/a&gt;&lt;/p&gt;  
&lt;h3&gt;  &lt;/h3&gt;
&lt;h3&gt;Rumors&lt;/h3&gt;  
&lt;p&gt;It the give-away going to be a new slate? &lt;a title="http://www.zdnet.com/blog/microsoft/report-microsoft-shows-off-quad-core-windows-slate-could-this-be-its-build-give-away/10435?tag=content;siu-container" href="http://www.zdnet.com/blog/microsoft/report-microsoft-shows-off-quad-core-windows-slate-could-this-be-its-build-give-away/10435?tag=content;siu-container"&gt;http://www.zdnet.com/blog/microsoft/report-microsoft-shows-off-quad-core-windows-slate-could-this-be-its-build-give-away/10435?tag=content;siu-container&lt;/a&gt;&lt;/p&gt;  
&lt;h3&gt;Twitter&lt;/h3&gt;  
&lt;p&gt;Follow &lt;a href="https://twitter.com/#!/search/%23buildwin" target="_blank"&gt;#buildwin&lt;/a&gt; &lt;a href="https://twitter.com/#!/search/%23bldwin" target="_blank"&gt;#bldwin&lt;/a&gt; &lt;a href="https://twitter.com/#!/search/%23build" target="_blank"&gt;#build&lt;/a&gt; on twitter&lt;/p&gt;  
&lt;p&gt;&lt;a href="http://twitter.com/#!/coridrew" target="_blank"&gt;@coridrew&lt;/a&gt; is compiling an attendee list and it can be found at &lt;a title="http://twitter.com/#!/coridrew/bldwin2011" href="http://twitter.com/#!/coridrew/bldwin2011"&gt;http://twitter.com/#!/coridrew/bldwin2011&lt;/a&gt;&lt;/p&gt;</description>
      <link>http://devcenter.auburnrandall.com/buildnews.aspx</link>
      <pubDate>Mon, 05 Sep 2011 15:36:06 GMT</pubDate>
      <dc:creator>jrandall</dc:creator>
    </item>
    <item>
      <title>How BUILD may change the world</title>
      <description>&lt;p&gt;The heavily anticipated Microsoft BUILD conference is one week away and we still do not have many details. Microsoft has surrounded this event with secrecy and I really think that the strategy is working. All we basically have is a shell of an agenda. No details of the classes, no word on the swag, we don’t even know what the attendee party is.&lt;/p&gt;  &lt;p&gt;So, the question is, by hyping this event up with the secrecy, will Microsoft be able to deliver? I believe so. Call me a MS fanboy but I have faith that their next OS, Windows 8, is going to be a game-changer. We are already seeing the move away from desktops to portable based computing and it will be extremely convenient to have all of our devices seamlessly work with each other and behave similarly.&lt;/p&gt;  &lt;p&gt;This has been Microsoft’s plan all along. They got into the console business with the Xbox for a reason. They got into the music player with the Zune for a reason. Both of these devices were huge risks, however they are needed since Microsoft wants to be everywhere you are. Everything is coming together for them. They have devices that can be present wherever you need them and they have a storage system with Azure to feed the data. Want to show your pictures from the last family gathering on you phone, no problem. Want to play your home movies through your Xbox at the next party, no problem. With the devices sharing the same OS (and more importantly the same UX), MS products could become an integral part of the way you live. &lt;/p&gt;</description>
      <link>http://devcenter.auburnrandall.com/Default.aspx?type=post&amp;id=101</link>
      <pubDate>Mon, 05 Sep 2011 15:09:49 GMT</pubDate>
      <dc:creator>jrandall</dc:creator>
    </item>
    <item>
      <title>Free Hand Drawn Icons</title>
      <description>&lt;p&gt;&lt;a href="http://177icons.com/hand-drawn-web-icon-set" target="_blank"&gt;177 Designs&lt;/a&gt; has a new and unique icon set available for &lt;a href="http://177icons.com/hand-drawn-web-icon-set" target="_blank"&gt;download&lt;/a&gt;. These icons form a hand drawn representation of “classic” icons available on many platforms/websites. Best of all, the set of 247 icons is &lt;em&gt;free&lt;/em&gt;.&lt;/p&gt;  
&lt;p&gt;&lt;a href="http://177icons.com/hand-drawn-web-icon-set" target="_blank"&gt;&lt;img width="480" height="298" title="hand-drawn-icons" alt="hand-drawn-icons" src="http://maxcdn.webappers.com/img/2011/04/hand-drawn-icons.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;</description>
      <link>http://devcenter.auburnrandall.com/free-hand-drawn-icons.aspx</link>
      <pubDate>Mon, 04 Apr 2011 14:26:14 GMT</pubDate>
      <dc:creator>jrandall</dc:creator>
    </item>
    <item>
      <title>Announcement: GamerCentral partner site</title>
      <description>&lt;p&gt;I am pleased to announce that the &lt;a href="http://gaming.auburnrandall.com/" target="_blank"&gt;GamerCentral&lt;/a&gt; partner site is now live. This website will contain postings about video gaming, movies, music and just about anything else that falls into the realm of geekdom.&lt;/p&gt;  &lt;p&gt;I promise that the site will be heavy on opinions and light on walk-through reviews. This is also &lt;em&gt;your &lt;/em&gt;site. Let us know how to improve it. What do &lt;em&gt;you &lt;/em&gt;want for content. Is it geeky enough or is it too geeky (is that even possible?)&lt;/p&gt;</description>
      <link>http://devcenter.auburnrandall.com/Default.aspx?type=post&amp;id=92</link>
      <pubDate>Thu, 24 Mar 2011 20:16:02 GMT</pubDate>
      <dc:creator>jrandall</dc:creator>
    </item>
    <item>
      <title>Resolving SCRIPT references in the HEAD</title>
      <description>&lt;p&gt;I ran into an issue where I needed to resolve a javascript &lt;strong&gt;src&lt;/strong&gt; attribute in the page’s &lt;strong&gt;head&lt;/strong&gt; section. I figured the easiest way to do this would be with a line similar to the following:&lt;/p&gt;  
&lt;p&gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src='&amp;lt;%= ResolveUrl(&amp;quot;~/myjavascript.js&amp;quot;) %&amp;gt;'&amp;gt;&amp;lt;/script&amp;gt;&lt;/p&gt;  
&lt;p&gt;Unfortunately, this line of code throws the following error:&lt;/p&gt;  
&lt;p&gt;&lt;strong&gt;&lt;font color="#c0504d"&gt;The Controls collection cannot be modified because the control contains code blocks (i.e. &amp;lt;% ... %&amp;gt;).&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;  
&lt;p&gt;The solution involves swapping out the “&amp;lt;%=” with “&amp;lt;%#” and adding a Page.Header.DataBind() call to the PageLoad event.&lt;/p&gt;  
&lt;p&gt;An excellent and more thorough &lt;a href="http://leedumond.com/blog/the-controls-collection-cannot-be-modified-because-the-control-contains-code-blocks/" target="_blank"&gt;explanation&lt;/a&gt; for why this occurs can be found on the &lt;a href="http://leedumond.com/" target="_blank"&gt;leedumond.com&lt;/a&gt; website.&lt;/p&gt;  
&lt;p&gt;&lt;a title="http://leedumond.com/blog/the-controls-collection-cannot-be-modified-because-the-control-contains-code-blocks/" href="http://leedumond.com/blog/the-controls-collection-cannot-be-modified-because-the-control-contains-code-blocks/"&gt;http://leedumond.com/blog/the-controls-collection-cannot-be-modified-because-the-control-contains-code-blocks/&lt;/a&gt;&lt;/p&gt;</description>
      <link>http://devcenter.auburnrandall.com/resolving-script-references-in-the-head.aspx</link>
      <pubDate>Tue, 22 Mar 2011 15:57:17 GMT</pubDate>
      <dc:creator>jrandall</dc:creator>
    </item>
    <item>
      <title>SharePoint 2010 Developer Resources</title>
      <description>&lt;p&gt;Here is a collection of developer resources that I have come across for SharePoint 2010. (Last updated 3/22/2011)&lt;/p&gt;  
&lt;table width="388" border="1" cellspacing="0" cellpadding="4"&gt;
&lt;tbody&gt;     
&lt;tr&gt;       
&lt;td width="143" valign="top"&gt;&lt;a href="http://channel9.msdn.com/learn/courses/SharePoint2010Developer" target="_blank"&gt;Channel 9: SharePoint 2010 Developer Training Course&lt;/a&gt;&lt;/td&gt;        
&lt;td width="243" valign="top"&gt;Microsoft’s version of public access TV has a collection of videos geared to SharePoint 2010 developers. Pretty much all topics are covered in this collection of videos.&lt;/td&gt;     &lt;/tr&gt;      
&lt;tr&gt;       
&lt;td width="146" valign="top"&gt;&lt;a href="http://sharepoint.microsoft.com/en-us/Pages/default.aspx" target="_blank"&gt;SharePoint Product Site&lt;/a&gt;&lt;/td&gt;        
&lt;td width="241" valign="top"&gt;Microsoft’s product site for SharePoint. Not as focused on developers as the other sites, but still contains valuable information.&lt;/td&gt;     &lt;/tr&gt;      
&lt;tr&gt;       
&lt;td width="148" valign="top"&gt;&lt;a href="http://msdn.microsoft.com/en-us/sharepoint/" target="_blank"&gt;Microsoft: SharePoint Developer Center&lt;/a&gt;&lt;/td&gt;        
&lt;td width="240" valign="top"&gt;Microsoft’s homepage for SharePoint as a development platform. &lt;/td&gt;     &lt;/tr&gt;      
&lt;tr&gt;       
&lt;td width="149" valign="top"&gt;&lt;a href="http://blogs.msdn.com/b/pstubbs/" target="_blank"&gt;Paul Stubbs blog&lt;/a&gt;&lt;/td&gt;        
&lt;td width="239" valign="top"&gt;Paul Stubbs is a Microsoft SharePoint developer “evangelist”. Tons of useful information found here.&lt;/td&gt;     &lt;/tr&gt;      
&lt;tr&gt;       
&lt;td width="150" valign="top"&gt;&lt;a href="http://www.microsoft.com/visualstudio/buildabetterapp/Default.aspx" target="_blank"&gt;Microsoft: Build a Better App&lt;/a&gt;&lt;/td&gt;        
&lt;td width="239" valign="top"&gt;Developer-centric website focused on building SharePoint applications with Visual Studio.&lt;/td&gt;     &lt;/tr&gt;      
&lt;tr&gt;       
&lt;td width="150" valign="top"&gt;&lt;br/&gt;&lt;/td&gt;        
&lt;td width="239" valign="top"&gt;&lt;br/&gt;&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;</description>
      <link>http://devcenter.auburnrandall.com/sharepoint-2010-developer-links.aspx</link>
      <pubDate>Tue, 22 Mar 2011 14:41:56 GMT</pubDate>
      <dc:creator>jrandall</dc:creator>
    </item>
    <item>
      <title>Single Click DataGrid Checkbox in Silverlight</title>
      <description>&lt;p&gt;When using a DataGrid in Silverlight available from the Toolkit, the DataGridCheckBoxColumn requires at least two clicks to change the state of the check box. One click to select the row and another click to change the value of the row.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://devcenter.auburnrandall.com/AttachmentServer.ashx?a=70"&gt;&lt;img width="380" height="103" title="image_thumb12_thumb" alt="image_thumb12_thumb" src="http://devcenter.auburnrandall.com/AttachmentServer.ashx?a=71" border="0" complete="complete" style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The definition of your column may look similar to the following:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://devcenter.auburnrandall.com/AttachmentServer.ashx?a=72"&gt;&lt;img width="524" height="80" title="image_thumb11_thumb" alt="image_thumb11_thumb" src="http://devcenter.auburnrandall.com/AttachmentServer.ashx?a=73" border="0" complete="complete" style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;To change the behavior, you will need to define a check box within a DataGridTemplateColumn. This can be done by using code similar to the following:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://devcenter.auburnrandall.com/AttachmentServer.ashx?a=74"&gt;&lt;img width="556" height="190" title="image_thumb15_thumb" alt="image_thumb15_thumb" src="http://devcenter.auburnrandall.com/AttachmentServer.ashx?a=75" border="0" complete="complete" style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Now the state of the check box can be changed with a single click.&lt;/p&gt;</description>
      <link>http://devcenter.auburnrandall.com/Default.aspx?type=post&amp;id=81</link>
      <pubDate>Wed, 16 Feb 2011 19:02:00 GMT</pubDate>
      <dc:creator>jrandall</dc:creator>
    </item>
    <item>
      <title>Are you using Extension Methods</title>
      <description>&lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/bb383977.aspx" target="_blank"&gt;Extension methods&lt;/a&gt; are a valuable resource in your developer toolbox. With them you can construct methods that will appear to be a part of a given type (which you may not have direct control over). According to the &lt;a href="http://msdn.microsoft.com/en-us/library/bb383977.aspx" target="_blank"&gt;MSDN documentation&lt;/a&gt; they:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Enable you to &amp;quot;add&amp;quot; methods to existing types without creating a new derived type, recompiling, or otherwise modifying the original type.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;At first glance this may not seem to be anything that is overly useful, and reading through the documentation does little to counter this opinion. However, extension methods do have a place in building robust frameworks. A practical example may better illustrate just how useful they can be.&lt;/p&gt;  &lt;p&gt;Sample code for this article is available for download at: &lt;a title="http://uploadmanager.auburnrandall.com/uploadmanager/DownloadForm.aspx?file=q-2whW6XjkGApIsz5bjHKg&amp;amp;key=Ow%2boRgN5c7TAGhZEb%2fvV%2fw" href="http://uploadmanager.auburnrandall.com/uploadmanager/DownloadForm.aspx?file=q-2whW6XjkGApIsz5bjHKg&amp;amp;key=Ow%2boRgN5c7TAGhZEb%2fvV%2fw"&gt;http://uploadmanager.auburnrandall.com/uploadmanager/DownloadForm.aspx?file=q-2whW6XjkGApIsz5bjHKg&amp;amp;key=Ow%2boRgN5c7TAGhZEb%2fvV%2fw&lt;/a&gt;&lt;/p&gt;  &lt;h2&gt;Short, URL Friendly GUID&lt;/h2&gt;  &lt;p&gt;When building applications I will often use a &lt;a href="http://en.wikipedia.org/wiki/GUID" target="_blank"&gt;GUID&lt;/a&gt; to uniquely identify an object instance. Furthermore, I will base64 encode the generated GUID which will both shorten the results and format it so that it can be passed within a query-string. The logic to do this is quite simple and a sample of it can be found in an &lt;a href="http://madskristensen.net/post/A-shorter-and-URL-friendly-GUID.aspx" target="_blank"&gt;article&lt;/a&gt; written by &lt;a href="http://madskristensen.net/" target="_blank"&gt;Mads Kristensen&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Before the introduction of extension methods, I would inevitably wind up with a &lt;a href="http://en.wikipedia.org/wiki/Helper_Class_(computer_science)" target="_blank"&gt;helper class&lt;/a&gt; that would contain this logic. Classes of this nature usually require little thought (and effort) to implement but almost always have adverse downstream effects. &lt;/p&gt;  &lt;p&gt;For a detailed no holds barred explanation of why this is, take a quick look at the &lt;a href="http://blogs.msdn.com/b/nickmalik/archive/2005/09/06/461404.aspx" target="_blank"&gt;Are Helper Classes Evil&lt;/a&gt; article found over on the &lt;a href="http://blogs.msdn.com/b/nickmalik/" target="_blank"&gt;Inside Architecture&lt;/a&gt; blog.&lt;/p&gt;  &lt;p&gt;The method would appear similar to the following:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://devcenter.auburnrandall.com/AttachmentServer.ashx?a=46"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="1" border="0" alt="1" src="http://devcenter.auburnrandall.com/AttachmentServer.ashx?a=47" width="457" height="130" complete="complete" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;The implementation of the method would be along the lines of:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://devcenter.auburnrandall.com/AttachmentServer.ashx?a=48"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="2" border="0" alt="2" src="http://devcenter.auburnrandall.com/AttachmentServer.ashx?a=49" width="308" height="77" complete="complete" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Code such as this, although technically accurate, always leaves a bad taste in my mouth. Whenever I revisit an implementation such as this, I have to pause to remember or research what exactly Utility is, and why ShortenGuid belonged there.&amp;#160; This type of interruption disrupts my train of thought and makes a code-review process more difficult than it needs to be.&lt;/p&gt;  &lt;h3&gt;Refactored with Extension Methods&lt;/h3&gt;  &lt;p&gt;This same code can be refactored to use extension methods. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://devcenter.auburnrandall.com/AttachmentServer.ashx?a=50"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="3" border="0" alt="3" src="http://devcenter.auburnrandall.com/AttachmentServer.ashx?a=51" width="457" height="131" complete="complete" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;With the following implementation:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://devcenter.auburnrandall.com/AttachmentServer.ashx?a=52"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="4" border="0" alt="4" src="http://devcenter.auburnrandall.com/AttachmentServer.ashx?a=53" width="225" height="60" complete="complete" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;The immediate observation is that the &lt;em&gt;Shorten&lt;/em&gt; method appears to the developer as a member of the Guid class. With extension methods, we’ve extended the Guid class with our own method without having to directly manipulate the original object. Very cool.&lt;/p&gt;  &lt;p&gt;As a developer reviews this code, it is much easier to infer what the &lt;em&gt;Shorten&lt;/em&gt; method does. Since it appears as a method of the Guid class, we also can safely assume that the Shorten method manipulates the Guid instance.&lt;/p&gt;  &lt;h2&gt;Conclusion&lt;/h2&gt;  &lt;p&gt;Getting to know extension methods may assist you with developing robust quality applications. It is worthwhile to spend some time familiarizing yourself with how they work and keeping your eyes open to areas where they will fit into your code stream.&lt;/p&gt;</description>
      <link>http://devcenter.auburnrandall.com/extensionmethods.aspx</link>
      <pubDate>Thu, 11 Nov 2010 18:47:53 GMT</pubDate>
      <dc:creator>jrandall</dc:creator>
    </item>
    <item>
      <title>Silverlight 4 Themes</title>
      <description>&lt;p&gt;The Silverlight team has published a set of themes that can be used for your LOB applications. Microsoft’s Tsitsi Gora has a &lt;a href="http://blogs.msdn.com/b/esthetique/archive/2010/08/19/introducing-the-new-silverlight-4-themes.aspx"&gt;blog posting&lt;/a&gt; that contains an overview of these themes.&lt;/p&gt;  &lt;p&gt;Briefly, the available themes are:&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;COSMOPOLITAN&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;img title="Cosmopolitan1" src="http://tsitsigora.files.wordpress.com/2010/06/cosmopolitan1.png?w=300&amp;amp;h=164" width="300" height="164" /&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;ACCENT COLOR&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;img title="AccentColor" src="http://tsitsigora.files.wordpress.com/2010/06/accentcolor.png?w=300&amp;amp;h=165" width="300" height="165" /&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;WINDOWS 7 INSPIRED&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;img title="Windows" src="http://tsitsigora.files.wordpress.com/2010/06/windows.png?w=300&amp;amp;h=164" width="300" height="164" /&gt;&lt;/p&gt;</description>
      <link>http://devcenter.auburnrandall.com/Default.aspx?type=post&amp;id=71</link>
      <pubDate>Wed, 25 Aug 2010 13:28:53 GMT</pubDate>
      <dc:creator>jrandall</dc:creator>
    </item>
    <item>
      <title>ASP.NET Web Site Administration Tool</title>
      <description>&lt;p&gt;Users and Roles for a website can be defined using the ASP.NET Web Site Administration Tool that is provided with Visual Studio. This guide is intended as a step-by-step introduction to the pages that are required to define users, roles and role membership.&lt;/p&gt;  &lt;p&gt;To launch the tool, select the &lt;em&gt;ASP.NET Configuration&lt;/em&gt; option within the Website menu option.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://devcenter.auburnrandall.com/AttachmentServer.ashx?a=14"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://devcenter.auburnrandall.com/AttachmentServer.ashx?a=15" width="271" height="430" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;The Web Site Administration Tool will be launched for the selected website. Users and Roles are defined by selecting the &lt;em&gt;Security&lt;/em&gt; tab.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://devcenter.auburnrandall.com/AttachmentServer.ashx?a=16"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://devcenter.auburnrandall.com/AttachmentServer.ashx?a=17" width="648" height="489" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;h3&gt;Create User&lt;/h3&gt;  &lt;p&gt;To create a user, select the &lt;em&gt;Create User&lt;/em&gt; link in the Users group. The following page will display.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://devcenter.auburnrandall.com/AttachmentServer.ashx?a=18"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://devcenter.auburnrandall.com/AttachmentServer.ashx?a=19" width="648" height="460" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;h3&gt;Create Role&lt;/h3&gt;  &lt;p&gt;Roles are created by selecting the &lt;em&gt;Create or Manage Roles&lt;/em&gt; in the Roles group on the main Security tab.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://devcenter.auburnrandall.com/AttachmentServer.ashx?a=20"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://devcenter.auburnrandall.com/AttachmentServer.ashx?a=21" width="638" height="353" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Once the &lt;em&gt;Add Role&lt;/em&gt; button has been pressed, the newly defined role will be available to manage.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://devcenter.auburnrandall.com/AttachmentServer.ashx?a=22"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://devcenter.auburnrandall.com/AttachmentServer.ashx?a=23" width="638" height="405" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;To add users to the role, select the &lt;em&gt;Manage&lt;/em&gt; link. You will be prompted to select the users that are members of the Role.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://devcenter.auburnrandall.com/AttachmentServer.ashx?a=24"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://devcenter.auburnrandall.com/AttachmentServer.ashx?a=25" width="648" height="348" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Further information on this subject can be found at: &lt;a title="http://msdn.microsoft.com/en-us/library/yy40ytx0.aspx" href="http://msdn.microsoft.com/en-us/library/yy40ytx0.aspx"&gt;http://msdn.microsoft.com/en-us/library/yy40ytx0.aspx&lt;/a&gt;&lt;/p&gt;</description>
      <link>http://devcenter.auburnrandall.com/Default.aspx?type=post&amp;id=69</link>
      <pubDate>Tue, 06 Apr 2010 18:39:59 GMT</pubDate>
      <dc:creator>jrandall</dc:creator>
    </item>
    <item>
      <title>Catching Unhandled Exception in WPF Application</title>
      <description>&lt;p&gt;Oftentimes for troubleshooting purposes it is necessary to trap and report unhandled exceptions. This article will demonstrate how to accomplish this within a WPF application.&lt;/p&gt;
&lt;p&gt;The default behavior of a WPF application is to catch all unhandled exceptions, alert the user that the software has encountered a fatal error (shown below), and then shut the application down.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.auburnrandall.com/AttachmentServer.ashx?a=4"&gt;&lt;img title="image" height="178" alt="image" src="http://www.auburnrandall.com/AttachmentServer.ashx?a=5" width="324" border="0" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Note that in a fully featured production system, rather than display a custom error screen (or log exceptions to a data file) it is possible/desirable to use &lt;a href="http://www.microsoft.com/whdc/winlogo/maintain/StartWER.mspx" target="_blank"&gt;Windows Error Reporting&lt;/a&gt; to analyze errors within your application. When the user presses the “Send Error Report” button Microsoft captures the error report, which you can then view (using a secure account) to identify problem areas.&lt;/p&gt;
&lt;p&gt;To display an error report directly within your WPF application, you can trap all unhandled exceptions using the &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.application.dispatcherunhandledexception.aspx" target="_blank"&gt;Application.DispatcherUnhandledException&lt;/a&gt; event. This is done by modifying the App.xaml and App.xaml.cs files. &lt;/p&gt;
&lt;p&gt;In App.xaml, the registration of the event handler is initialized (highlighted below).&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.auburnrandall.com/AttachmentServer.ashx?a=6"&gt;&lt;img title="image" height="151" alt="image" src="http://www.auburnrandall.com/AttachmentServer.ashx?a=7" width="608" border="0" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;A method is added to App.xaml.cs which will handle this event. This is where the exception handling logic will be added.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.auburnrandall.com/AttachmentServer.ashx?a=8"&gt;&lt;img title="image" height="186" alt="image" src="http://www.auburnrandall.com/AttachmentServer.ashx?a=9" width="479" border="0" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;DispatcherUnhandledException will only handle exceptions thrown on the UI thread. In multithreading applications, you must ensure that exceptions thrown on secondary threads are caught and re-thrown (or handled) on the UI thread. Unfortunately, there is no built-in mechanism for this behavior.&lt;/p&gt;
&lt;p&gt;The sample application (source &lt;a href="http://www.auburnrandall.com/samples/wpfcatchunhandledexceptions.zip" target="_blank"&gt;here&lt;/a&gt;) displays a window containing a button which fires an exception. The DispatcherUnhandledException event handler is used to display an “Exception Viewer” window, which displays the details of the exception.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.auburnrandall.com/AttachmentServer.ashx?a=10"&gt;&lt;img title="image" height="161" alt="image" src="http://www.auburnrandall.com/AttachmentServer.ashx?a=11" width="302" border="0" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.auburnrandall.com/AttachmentServer.ashx?a=12"&gt;&lt;img title="image" height="239" alt="image" src="http://www.auburnrandall.com/AttachmentServer.ashx?a=13" width="441" border="0" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;As a best practice, you typically do not want to show the end-user the technical details of an exception. A more robust system of error reporting could be implemented that would securely report exception details, while the end-user would only see a dialog that an error has been encountered. &lt;/p&gt;
&lt;p&gt;Another alternative is that you could use Windows Error Reporting for deployed solutions, which could be disabled in favor of custom error reporting for internal or development (beta) systems.&lt;/p&gt;</description>
      <link>http://devcenter.auburnrandall.com/wpfunhandledexceptions.aspx</link>
      <pubDate>Thu, 23 Jul 2009 13:29:49 GMT</pubDate>
      <dc:creator>jrandall</dc:creator>
    </item>
    <item>
      <title>Form Engine Announced</title>
      <description>&lt;p&gt;I am pleased to announce that a new product, &lt;a href="http://formengine.auburnrandall.com/"&gt;Form Engine&lt;/a&gt;, is now available. This application will automatically create HTML forms based on PDF documents containing form fields. The data posted to the HTML page will merge with the PDF document creating a new document populated with the data.&lt;/p&gt;</description>
      <link>http://devcenter.auburnrandall.com/Default.aspx?type=post&amp;id=66</link>
      <pubDate>Fri, 26 Jun 2009 20:06:10 GMT</pubDate>
      <dc:creator>jrandall</dc:creator>
    </item>
    <item>
      <title>Creating a Flyout Panel in Silverlight</title>
      <description>&lt;p&gt;This tutorial shows how to create a panel in Silverlight that provides a default thumbnail view which will fully appear on selection. The examples that follow were written using Siverlight 2 Beta 2 with Expression Blend 2.5 June 2008 Preview.&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.auburnrandall.com/ImageServer.ashx?img=Tech/CreatingaFlyoutPanelinSilverlight_928D/image_20.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="195" alt="Thumbnail View" src="http://www.auburnrandall.com/ImageServer.ashx?img=Tech/CreatingaFlyoutPanelinSilverlight_928D/image_thumb_9.png" width="244" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;&lt;a href="http://www.auburnrandall.com/ImageServer.ashx?img=Tech/CreatingaFlyoutPanelinSilverlight_928D/image_24.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="223" alt="Flyout View" src="http://www.auburnrandall.com/ImageServer.ashx?img=Tech/CreatingaFlyoutPanelinSilverlight_928D/image_thumb_11.png" width="244" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;To start off, create a new project and open the default page in Expression Blend 2.5. On the Page, the first thing we'll do is create a row on the grid that will hold our thumbnail of the flyout panel. This is highlighted in the following image.&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.auburnrandall.com/ImageServer.ashx?img=Tech/CreatingaFlyoutPanelinSilverlight_928D/image_4.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="244" alt="image" src="http://www.auburnrandall.com/ImageServer.ashx?img=Tech/CreatingaFlyoutPanelinSilverlight_928D/image_thumb_1.png" width="171" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Add a Border to the Grid. Position the control so that a portion of it appears on the grid. This portion is the thumbnail that will be used to open the full panel. The rest of the control will appear off of the page.&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.auburnrandall.com/ImageServer.ashx?img=Tech/CreatingaFlyoutPanelinSilverlight_928D/image_6.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="220" alt="image" src="http://www.auburnrandall.com/ImageServer.ashx?img=Tech/CreatingaFlyoutPanelinSilverlight_928D/image_thumb_2.png" width="244" border="0"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Create new Interaction States to indicate the various visibility states for the panel. This is done by creating a new State Group and two new states (shown below as &lt;em&gt;FlyoutStates, FlyoutVisible&lt;/em&gt; and &lt;em&gt;FlyoutHidden&lt;/em&gt;).&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.auburnrandall.com/ImageServer.ashx?img=Tech/CreatingaFlyoutPanelinSilverlight_928D/image_14.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="153" alt="image" src="http://www.auburnrandall.com/ImageServer.ashx?img=Tech/CreatingaFlyoutPanelinSilverlight_928D/image_thumb_6.png" width="244" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;With the FlyoutVisible state selected, make sure &lt;em&gt;State Recording&lt;/em&gt; is on and move the panel to the desired location. At this point the panel is entirely visible.&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.auburnrandall.com/ImageServer.ashx?img=Tech/CreatingaFlyoutPanelinSilverlight_928D/image_12.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="222" alt="image" src="http://www.auburnrandall.com/ImageServer.ashx?img=Tech/CreatingaFlyoutPanelinSilverlight_928D/image_thumb_5.png" width="234" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Since the FlyoutHidden state will be the same as the Base state, there is nothing that needs to be done.&lt;/p&gt; &lt;p&gt;The last part of the task is to add a little code that will trigger the state animations. In this example, the flyout panel will become visible when the mouse pointer enters the thumbnail. It will become hidden when the mouse pointer leaves. To respond to these events, select the Event Properties of the Border and add event definitions for &lt;em&gt;MouseEnter&lt;/em&gt; and &lt;em&gt;MouseLeave&lt;/em&gt;.&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.auburnrandall.com/ImageServer.ashx?img=Tech/CreatingaFlyoutPanelinSilverlight_928D/image_16.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="244" alt="image" src="http://www.auburnrandall.com/ImageServer.ashx?img=Tech/CreatingaFlyoutPanelinSilverlight_928D/image_thumb_7.png" width="223" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;In the code for these events, we simply need to switch to the desired event. This is done by using the &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.visualstatemanager(VS.95).aspx" target="_blank"&gt;VisualStateManager&lt;/a&gt; &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.visualstatemanager.gotostate(VS.95).aspx" target="_blank"&gt;GoToState&lt;/a&gt; method.&lt;/p&gt; &lt;div&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; border_MouseEnter(&lt;span style="color: #0000ff"&gt;object&lt;/span&gt; sender, MouseEventArgs e)
{
    VisualStateManager.GoToState(&lt;span style="color: #0000ff"&gt;this&lt;/span&gt;, &lt;span style="color: #006080"&gt;"FlyoutVisible"&lt;/span&gt;, &lt;span style="color: #0000ff"&gt;true&lt;/span&gt;);
}

&lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; border_MouseLeave(&lt;span style="color: #0000ff"&gt;object&lt;/span&gt; sender, MouseEventArgs e)
{
    VisualStateManager.GoToState(&lt;span style="color: #0000ff"&gt;this&lt;/span&gt;, &lt;span style="color: #006080"&gt;"FlyoutHidden"&lt;/span&gt;, &lt;span style="color: #0000ff"&gt;true&lt;/span&gt;);
}&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;When you run the program, the panel will animate in and out. However, the animation is very quick and not very smooth. To make the transition a little smoother we need to specify how long it will take to animate each of our States. This is done by giving the Default Transition Duration for the State Group a value (0.5 seconds in the following example).&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.auburnrandall.com/ImageServer.ashx?img=Tech/CreatingaFlyoutPanelinSilverlight_928D/image_18.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="152" alt="image" src="http://www.auburnrandall.com/ImageServer.ashx?img=Tech/CreatingaFlyoutPanelinSilverlight_928D/image_thumb_8.png" width="244" border="0"&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Now when you run page, the animation used to display and hide the panel is much smoother.&lt;/p&gt;
&lt;p&gt;Although this example is very simple without much pizzazz, I hope it sufficiently illustrates how it is relatively simple to add animation to a webpage.&lt;/p&gt;</description>
      <link>http://devcenter.auburnrandall.com/Default.aspx?type=post&amp;id=54</link>
      <pubDate>Wed, 23 Jul 2008 14:26:50 GMT</pubDate>
      <dc:creator>jrandall</dc:creator>
    </item>
    <item>
      <title>Silverlight Web Services fail when VS Crashes</title>
      <description>&lt;p&gt;When developing a Silverlight 2 Beta 2 in Visual Studio 2008 using the ASP.NET Development Server a random port is opened that is used to host the web application. When a web service reference is added, this port is part of the URL that points to the hosted web service. Usually, this specific port will be available for the lifetime of the application. &lt;/p&gt; &lt;p&gt;However, sometimes when Visual Studio crashes, the reference to this port seems to get corrupted and a new port is assigned. The issue is that when the port number changes the web reference is still pointing to the original port. The web service will attempt to open the original URL (with the original port). Since this URL is no longer valid, a ProtocolException will be thrown and you will receive the following dialog:&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.auburnrandall.com/ImageServer.ashx?img=Tech/SilverlightWebServicesfailwhenVisualStud_9A62/image_2.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="252" alt="ProtocolException" src="http://www.auburnrandall.com/ImageServer.ashx?img=Tech/SilverlightWebServicesfailwhenVisualStud_9A62/image_thumb.png" width="452" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;To remedy this, you need to change the web service reference to point to the new port. The first thing to do is to find what the new port has been assigned to. This will be available by examining the URL in the browser.&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.auburnrandall.com/ImageServer.ashx?img=Tech/SilverlightWebServicesfailwhenVisualStud_9A62/image_4.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="37" alt="image" src="http://www.auburnrandall.com/ImageServer.ashx?img=Tech/SilverlightWebServicesfailwhenVisualStud_9A62/image_thumb_1.png" width="138" border="0"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Once you have the new port, right-click on the web service reference and select &lt;em&gt;Configure Service Reference&lt;/em&gt;.&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.auburnrandall.com/ImageServer.ashx?img=Tech/SilverlightWebServicesfailwhenVisualStud_9A62/image_6.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="95" alt="image" src="http://www.auburnrandall.com/ImageServer.ashx?img=Tech/SilverlightWebServicesfailwhenVisualStud_9A62/image_thumb_2.png" width="265" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;In the &lt;strong&gt;Service Reference Settings&lt;/strong&gt; dialog, change the port in the Address to the new port.&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.auburnrandall.com/ImageServer.ashx?img=Tech/SilverlightWebServicesfailwhenVisualStud_9A62/image_8.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="74" alt="image" src="http://www.auburnrandall.com/ImageServer.ashx?img=Tech/SilverlightWebServicesfailwhenVisualStud_9A62/image_thumb_3.png" width="385" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;I'm sure that this is a temporary issue (this is a Beta version after all) that will be addressed fully in the released versions.&lt;/p&gt;</description>
      <link>http://devcenter.auburnrandall.com/Default.aspx?type=post&amp;id=53</link>
      <pubDate>Tue, 15 Jul 2008 15:00:45 GMT</pubDate>
      <dc:creator>jrandall</dc:creator>
    </item>
    <item>
      <title>How to remove the border in Silverlight DataGrid</title>
      <description>&lt;p&gt;In Silverlight 2 Beta 2 the generated DataGrid is surrounded by a border. Unfortunately, the removal of this border cannot be accomplished by simply setting a property on the DataGrid. To remove this, the definition of the DataGrid style or "skin" will need to be overridden.&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.auburnrandall.com/ImageServer.ashx?img=Tech/HowtoremovetheborderinSilverlightDataGri_9808/image_2.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="108" alt="image" src="http://www.auburnrandall.com/ImageServer.ashx?img=Tech/HowtoremovetheborderinSilverlightDataGri_9808/image_thumb.png" width="240" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;The appearance for each Silverlight control (FrameworkElement) is defined within a ControlTemplate. Using Styles, this template can be overridden within your application with a set of customized XAML code. Default XAML definitions are found within the Silverlight Control Styles and Templates &lt;a href="http://msdn.microsoft.com/en-us/library/cc278075(VS.95).aspx" target="_blank"&gt;documentation&lt;/a&gt;. Specific to this topic, XAML definitions for the DataGrid are found in the DataGrid Styles and Templates &lt;a href="http://msdn.microsoft.com/en-us/library/cc278066(VS.95).aspx" target="_blank"&gt;documentation&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;In the DataGrid XAML, look for the Template definition. Once this has been located, note that the RootElement of the the DataGrid is surrounded by three distinct Border elements.&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.auburnrandall.com/ImageServer.ashx?img=Tech/HowtoremovetheborderinSilverlightDataGri_9808/image_8.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="147" alt="image" src="http://www.auburnrandall.com/ImageServer.ashx?img=Tech/HowtoremovetheborderinSilverlightDataGri_9808/image_thumb_3.png" width="464" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;These elements are likely the items that need to be removed. To start the customization, the style XAML for the DataGrid will need to be added as a new resource into our application. I'm going to add this directly to my UserControl, but it could also be added to the Application resources (in App.xaml).&lt;/p&gt; &lt;p&gt;To add the XAML to the UserControl create a new node named &lt;em&gt;UserControl.Resources&lt;/em&gt; and copy the DataGrid XAML into it (use the handy "Copy Code" link on the documentation web page).&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.auburnrandall.com/ImageServer.ashx?img=Tech/HowtoremovetheborderinSilverlightDataGri_9808/image_10.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="146" alt="image" src="http://www.auburnrandall.com/ImageServer.ashx?img=Tech/HowtoremovetheborderinSilverlightDataGri_9808/image_thumb_4.png" width="380" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;The namespace definitions for the DataGrid and the Resource must match. In the copied XAML the namespace is &lt;em&gt;local:DataGrid.&lt;/em&gt; The default namespace generated by the Visual Studio tool is &lt;em&gt;my:DataGrid&lt;/em&gt;. In the above example, I changed all references of &lt;em&gt;local &lt;/em&gt;to &lt;em&gt;my&lt;/em&gt;.&lt;/p&gt; &lt;p&gt;The next item to take care of is that the Style must have a &lt;em&gt;Key&lt;/em&gt;. This is used to map a Framework element (our DataGrid) to a specific style definition. I've given the style a key of &lt;em&gt;TestGrid&lt;/em&gt; which is used in the following DataGrid definition.&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.auburnrandall.com/ImageServer.ashx?img=Tech/HowtoremovetheborderinSilverlightDataGri_9808/image_12.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="70" alt="image" src="http://www.auburnrandall.com/ImageServer.ashx?img=Tech/HowtoremovetheborderinSilverlightDataGri_9808/image_thumb_5.png" width="497" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;At this point, when you run the application the DataGrid should appear exactly as it did before (we haven't changed anything yet).&lt;/p&gt; &lt;p&gt;Before I start removing the definitions for the Border elements, I want to make sure that these are the culprits. To do this, I'm going to change their colors to something a little more obvious.&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.auburnrandall.com/ImageServer.ashx?img=Tech/HowtoremovetheborderinSilverlightDataGri_9808/image_14.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="103" alt="image" src="http://www.auburnrandall.com/ImageServer.ashx?img=Tech/HowtoremovetheborderinSilverlightDataGri_9808/image_thumb_6.png" width="493" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Running the application, I get the following:&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.auburnrandall.com/ImageServer.ashx?img=Tech/HowtoremovetheborderinSilverlightDataGri_9808/image_16.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="272" alt="image" src="http://www.auburnrandall.com/ImageServer.ashx?img=Tech/HowtoremovetheborderinSilverlightDataGri_9808/image_thumb_7.png" width="366" border="0"&gt;&lt;/a&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Zooming in, it's obvious how these elements take part in the display of the DataGrid.&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.auburnrandall.com/ImageServer.ashx?img=Tech/HowtoremovetheborderinSilverlightDataGri_9808/image_20.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="114" alt="image" src="http://www.auburnrandall.com/ImageServer.ashx?img=Tech/HowtoremovetheborderinSilverlightDataGri_9808/image_thumb_9.png" width="210" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Removing the Border elements from the XAML generates the desired results.&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.auburnrandall.com/ImageServer.ashx?img=Tech/HowtoremovetheborderinSilverlightDataGri_9808/image_22.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="98" alt="image" src="http://www.auburnrandall.com/ImageServer.ashx?img=Tech/HowtoremovetheborderinSilverlightDataGri_9808/image_thumb_10.png" width="369" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Hopefully, this not only provides a reference for how to remove the border from a DataGrid, but also provides a quick introduction to the possibilities available for customizing Silverlight controls.&lt;/p&gt;</description>
      <link>http://devcenter.auburnrandall.com/Default.aspx?type=post&amp;id=52</link>
      <pubDate>Thu, 10 Jul 2008 14:49:43 GMT</pubDate>
      <dc:creator>jrandall</dc:creator>
    </item>
    <item>
      <title>Rock Band customer service Rocks</title>
      <description>&lt;p&gt;The other day I went to play Rock Band on my XBox 360. It booted to the main menu and then gave me an error message that the disk was unreadable. I took the disk out and looked at it closely and noticed that there were a couple of circular scratches on it. It looked like the console had somehow scratched the disk.&lt;/p&gt; &lt;p&gt;When I called EA support, I was completely prepared to have to send in my disk and then wait for a new disk to be sent back. I figured that not only would I not be able to play my game for about a month, I'd also have to deal with the hassle of shipping the disk.&lt;/p&gt; &lt;p&gt;To my surprise, I didn't have to do any of that. After answering some basic questions from the support technician, he told me that a new copy should be arriving within the next couple of weeks.&lt;/p&gt; &lt;p&gt;How awesome is that? EA far exceeded my expectations by resolving the issue in as quickly and as simply as possible. For the pittance that it will cost them to send a new disk, they went a long way to establishing brand loyalty.&lt;/p&gt; &lt;p&gt;Now, all I have to do is watch the mail for that new disk!&lt;/p&gt;</description>
      <link>http://devcenter.auburnrandall.com/Default.aspx?type=post&amp;id=51</link>
      <pubDate>Mon, 07 Jul 2008 18:13:23 GMT</pubDate>
      <dc:creator>jrandall</dc:creator>
    </item>
    <item>
      <title>Adding validation to a custom Control</title>
      <description>&lt;p&gt;ASP.NET Pages contain an infrastructure to help simplify &lt;a href="http://msdn.microsoft.com/en-us/library/ms972961.aspx" target="_blank"&gt;User Input Validation&lt;/a&gt;. Typically, validation is accomplished by using one of the several built-in Validator controls. The interaction between the Page and the Validator control is performed through the implementation of the &lt;a href="http://msdn.microsoft.com/en-us/library/system.web.ui.ivalidator.aspx" target="_blank"&gt;IValidator&lt;/a&gt; interface. Using the derived methods of this interface, the Page can query each of the Validator controls to determine if the User Input meets the predetermined criteria.&lt;/p&gt; &lt;h3&gt;Implement IValidator in your Control&lt;/h3&gt; &lt;p&gt;Sometimes a custom Control author may not need (or want) to use a Validator to determine user input validity but will still want their control to participate in page validation. This is accomplished by having the control implement the IValidator interface. The member implementation of this interface can be summarized as below:&lt;/p&gt; &lt;table cellspacing="0" cellpadding="2" width="503" border="0"&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td valign="top" width="159"&gt;ErrorMessage&lt;/td&gt; &lt;td valign="top" width="342"&gt;When the validation fails this is the text that will be used by the ValidationSummary control.&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="159"&gt;IsValid&lt;/td&gt; &lt;td valign="top" width="342"&gt;Used by the validation infrastructure to determine if the User Input is valid. &lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="159"&gt;Validate&lt;/td&gt; &lt;td valign="top" width="342"&gt;This method will be called during page validation(When Page.Validate()) is called). Implementation of this method needs to check the user input validity and set the IsValid property. &lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt; &lt;h3&gt;Register the Control as a Validator&lt;/h3&gt; &lt;p&gt;Once the above members have been implemented within your control, it will need to be registered as a Validation control for the Page. This is done by adding the control to the Page.Validators collection as shown in the following example.&lt;/p&gt; &lt;div&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;protected&lt;/span&gt; &lt;span style="color: #0000ff"&gt;override&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; OnInit(EventArgs e)
{
    &lt;span style="color: #0000ff"&gt;base&lt;/span&gt;.OnInit(e);

    &lt;span style="color: #0000ff"&gt;this&lt;/span&gt;.Page.Validators.Add(&lt;span style="color: #0000ff"&gt;this&lt;/span&gt;);
}&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;Conclusion&lt;/h3&gt;
&lt;p&gt;Validation of User Input can easily be handled directly within a custom control. This is especially useful when complex validation logic must take place that cannot be handled by one of the bundled Validator controls.&lt;/p&gt;</description>
      <link>http://devcenter.auburnrandall.com/Default.aspx?type=post&amp;id=50</link>
      <pubDate>Tue, 13 May 2008 17:50:46 GMT</pubDate>
      <dc:creator>jrandall</dc:creator>
    </item>
    <item>
      <title>MSN's hating on ethanol today</title>
      <description>&lt;p&gt;If you take a look at the MSN site today, there are two articles that address using ethanol as an alternative to gasoline:&lt;/p&gt; &lt;p&gt;&lt;a title="Bad ideas in 'green tech'" href="http://www.newsweek.com/id/130628?GT1=43002" target="_blank"&gt;Bad ideas in 'green tech'&lt;/a&gt; (from Newsweek)&lt;/p&gt; &lt;p&gt;&lt;a href="http://articles.moneycentral.msn.com/Investing/StockInvestingTrading/EthanolRealityCheck.aspx" target="_blank"&gt;Does it make sense to fill your gas tank with corn?&lt;/a&gt; (from MSN Money)&lt;/p&gt; &lt;p&gt;Both of these articles pose several arguments why corn ethanol is a poor choice as an alternative fuel. Chiefly:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Production and delivery of corn ethanol is double the carbon footprint as gasoline.  &lt;li&gt;Should we be burning our food when there are people starving? Corn is a major product in packaged food.  &lt;li&gt;The current goal of increased corn production would require additional crops equivalent to the size of Kansas and Iowa combined. &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;While Begley's "Sounds Good But..." article takes an extremely negative tone toward ethanol, she discounts much of all of the currently available alternatives. She doesn't offset her doomsday scenarios with any real suggestions of what a typical consumer can do to help reduce greenhouse gases. When you finish reading the article, your left feeling helpless and hopeless. This is not exactly an rally call for change.&lt;/p&gt; &lt;p&gt;Monroe's article "Ethanol reality check" takes a more reasonable approach. She points out the numerous flaws inherit with corn based ethanol. She also does a good service to spelling out the counter arguments to these flaws. The single most intriguing question that she leaves us with is: Is corn based ethanol a stepping stone to producing ethanol from a non-food source?&lt;/p&gt; &lt;p&gt;For all of the problems related with corn-based ethanol, it is a technology that is available today. If we can harness this in the short term and start building the necessary delivery infrastructure, will we be better off tomorrow when we're able to produce ethanol using other methods?&lt;/p&gt;</description>
      <link>http://devcenter.auburnrandall.com/Default.aspx?type=post&amp;id=49</link>
      <pubDate>Tue, 08 Apr 2008 14:26:27 GMT</pubDate>
      <dc:creator>jrandall</dc:creator>
    </item>
    <item>
      <title>ITemplate - Referencing Nested Controls</title>
      <description>&lt;p&gt;When authoring templated controls the default behavior is that you cannot directly reference child controls. For example, say we have the following ASPX code defining the layout of the templated control.&lt;/p&gt; &lt;div&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;mc:MyTemplateControl&lt;/span&gt; &lt;span style="color: #ff0000"&gt;runat&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="server"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;TestTemplate&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;asp:Label&lt;/span&gt; &lt;span style="color: #ff0000"&gt;runat&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="server"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;ID&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="TestLabel"&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;TestTemplate&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;mc:MyTemplateControl&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Furthermore, the following snippet is used to attempt to reference the nested Label.&lt;/p&gt;
&lt;div&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;protected&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; Page_Load(&lt;span style="color: #0000ff"&gt;object&lt;/span&gt; sender, EventArgs e)
{
    TestLabel.Text = &lt;span style="color: #006080"&gt;"hello"&lt;/span&gt;;
}&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;When we attempt to build this page, the following error occurs:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;The name 'TestLabel' does not exist in the current context&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;If you do not have the ability to change the source of the templated control, the only alternative is to use the &lt;a href="http://msdn2.microsoft.com/en-us/library/486wc64h.aspx" target="_blank"&gt;FindControl&lt;/a&gt; method. Unfortunately this syntax requires having the ID of the control hard-coded into the code-behind of the page. When the location or ID of the control changes, a subsequent change will need to be made to this hard-coded value. If this change is not made, the compiler will not pick up the oversight. The only notification of this error will be made at runtime, which leads to a situation that may be very difficult to diagnose.&lt;/p&gt;
&lt;p&gt;If you do have access to the source of the templated control you can simply modify the property that implements ITemplate with the &lt;a href="http://msdn2.microsoft.com/en-us/library/system.web.ui.templateinstanceattribute.aspx" target="_blank"&gt;TemplateInstance&lt;/a&gt; attribute. &lt;/p&gt;
&lt;div&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;[TemplateContainer(&lt;span style="color: #0000ff"&gt;typeof&lt;/span&gt;(MyTemplateContainer))]
[TemplateInstance(TemplateInstance.Single)]
[PersistenceMode(PersistenceMode.InnerProperty)]
&lt;span style="color: #0000ff"&gt;public&lt;/span&gt; ITemplate TestTemplate
{
    get { &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; _testTemplate; }
    set { _testTemplate = &lt;span style="color: #0000ff"&gt;value&lt;/span&gt;; }
}&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;With a value of TemplateInstance.Single, you will now be able to directly reference the children controls.&lt;/p&gt;</description>
      <link>http://devcenter.auburnrandall.com/Default.aspx?type=post&amp;id=48</link>
      <pubDate>Mon, 24 Mar 2008 18:52:42 GMT</pubDate>
      <dc:creator>jrandall</dc:creator>
    </item>
    <item>
      <title>Complex Object data binding</title>
      <description>&lt;p&gt;There are times when we want to databind to a value that is derived from a complex property. For example, we may want to bind to a field in a GridView similar to the following:&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.auburnrandall.com/ImageServer.ashx?img=Tech/ComplexObjectdatabinding_E1A0/image_10.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="123" alt="GridView invalid code" src="http://www.auburnrandall.com/ImageServer.ashx?img=Tech/ComplexObjectdatabinding_E1A0/image_thumb_4.png" width="601" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;div&gt;In this example the property &lt;em&gt;StandardEngine&lt;/em&gt; is an instance of the Engine class. In the GridView we want to display the number of cylinders for the car. We get this by referencing the &lt;em&gt;StandardEngine.Cylinders&lt;/em&gt; value.&lt;/div&gt; &lt;div&gt;&amp;nbsp;&lt;/div&gt; &lt;div&gt;On the surface, this seems like a legitimate way to bind to this property. Unfortunately when this is executed the following exception is raised. &lt;/div&gt; &lt;div&gt;&amp;nbsp;&lt;/div&gt; &lt;div&gt;&lt;a href="http://www.auburnrandall.com/ImageServer.ashx?img=Tech/ComplexObjectdatabinding_E1A0/image_8.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="50" alt="A field or property with the name was not found on the selected data source" src="http://www.auburnrandall.com/ImageServer.ashx?img=Tech/ComplexObjectdatabinding_E1A0/image_thumb_3.png" width="591" border="0"&gt;&lt;/a&gt; &lt;/div&gt; &lt;p&gt;Since the default behavior of the BoundField control does not support nested references, the first thing that we must do is to convert the BoundField into a TemplateField. This provides us with more control on how the data will be displayed and its evaluation during the data binding process. &lt;p&gt;&lt;a href="http://www.auburnrandall.com/ImageServer.ashx?img=Tech/ComplexObjectdatabinding_E1A0/image_12.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="191" alt="GridView template code" src="http://www.auburnrandall.com/ImageServer.ashx?img=Tech/ComplexObjectdatabinding_E1A0/image_thumb_5.png" width="602" border="0"&gt;&lt;/a&gt;  &lt;p&gt;You'll notice that the Text attribute has been left blank. Two approaches, explained below, are available that can be used that will be used to populate this value. &lt;h3&gt;Use Casting&lt;/h3&gt; &lt;p&gt;One method that can be used is to cast the instance variable to its native type and then retrieve the value through a property reference.&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.auburnrandall.com/ImageServer.ashx?img=Tech/ComplexObjectdatabinding_E1A0/image_16.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="69" alt="Databinding" src="http://www.auburnrandall.com/ImageServer.ashx?img=Tech/ComplexObjectdatabinding_E1A0/image_thumb_7.png" width="542" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;This approach requires little additional code and works well when the instance property is not null. However, this method should not be used if there is a possibility that this property will be null. &lt;/p&gt; &lt;h3&gt;Use a Method&lt;/h3&gt; &lt;p&gt;Anther option is to define a method (most likely on the page) that will return the property value based on an instance of our data bound class. Using this pattern, our ASPX code will appear as follows:&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.auburnrandall.com/ImageServer.ashx?img=Tech/ComplexObjectdatabinding_E1A0/image_18.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="64" alt="Databinding" src="http://www.auburnrandall.com/ImageServer.ashx?img=Tech/ComplexObjectdatabinding_E1A0/image_thumb_8.png" width="507" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;The supporting method will appear as below:&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.auburnrandall.com/ImageServer.ashx?img=Tech/ComplexObjectdatabinding_E1A0/image_20.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="187" alt="Supporting method" src="http://www.auburnrandall.com/ImageServer.ashx?img=Tech/ComplexObjectdatabinding_E1A0/image_thumb_9.png" width="397" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Although this solution requires more code it is much more robust as far trapping for invalid data conditions is concerned.&lt;/p&gt;</description>
      <link>http://devcenter.auburnrandall.com/Default.aspx?type=post&amp;id=47</link>
      <pubDate>Wed, 05 Mar 2008 21:03:19 GMT</pubDate>
      <dc:creator>jrandall</dc:creator>
    </item>
    <item>
      <title>Horizontal Menu with CSS</title>
      <description>&lt;p&gt;One method that is commonly used to display a menu is to use CSS along with an Unordered List (UL). There are many articles that already discuss this technique in-depth, but the basic idea is that you define your menu such as:&lt;/p&gt; &lt;div&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;div&lt;/span&gt; &lt;span style="color: #ff0000"&gt;id&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="nav"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;ul&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;li&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;a&lt;/span&gt; &lt;span style="color: #ff0000"&gt;href&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="#"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;Menu 1&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;a&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;li&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;li&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;a&lt;/span&gt; &lt;span style="color: #ff0000"&gt;href&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="#"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;Menu 2&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;a&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;li&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;li&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;a&lt;/span&gt; &lt;span style="color: #ff0000"&gt;href&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="#"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;Menu 3&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;a&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;li&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;ul&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;div&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;This renders as following (not that the background color for the "nav" element has been set to a light blue):&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;a href="http://www.auburnrandall.com/ImageServer.ashx?img=Tech/HorizontalMenuwithCSS_95F6/image_4.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="74" alt="image" src="http://www.auburnrandall.com/ImageServer.ashx?img=Tech/HorizontalMenuwithCSS_95F6/image_thumb_1.png" width="133" border="0"&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;From here you can define a style to control how to display the list item elements. For this example, the menu will display horizontally on the page.&lt;/p&gt;
&lt;div&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;#nav &lt;span style="color: #0000ff"&gt;li&lt;/span&gt;
{
    &lt;span style="color: #0000ff"&gt;display&lt;/span&gt;: &lt;span style="color: #006080"&gt;inline;&lt;/span&gt;
}&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;This renders as:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.auburnrandall.com/ImageServer.ashx?img=Tech/HorizontalMenuwithCSS_95F6/image_6.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="31" alt="image" src="http://www.auburnrandall.com/ImageServer.ashx?img=Tech/HorizontalMenuwithCSS_95F6/image_thumb_2.png" width="204" border="0"&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;For the most part, this is exactly what we want. However, there is some unaccounted for space before "Menu 1". Using the &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=E59C3964-672D-4511-BB3E-2D5E1DB91038&amp;amp;displaylang=en" target="_blank"&gt;Internet Explorer Developer Toolbar&lt;/a&gt; and selecting the "UL" element, it is evident that there is a default value for the &lt;em&gt;margin-left&lt;/em&gt; property of &lt;em&gt;30pt&lt;/em&gt;. &lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.auburnrandall.com/ImageServer.ashx?img=Tech/HorizontalMenuwithCSS_95F6/image_8.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="68" alt="image" src="http://www.auburnrandall.com/ImageServer.ashx?img=Tech/HorizontalMenuwithCSS_95F6/image_thumb_3.png" width="240" border="0"&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;We'll need to override this to push the menu all the way to the left. This is done with the following style definitions. Although only the &lt;em&gt;margin-left&lt;/em&gt; property was showing with a default, I've also set the &lt;em&gt;padding-left&lt;/em&gt; property for good measure.&lt;/p&gt;
&lt;div&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;#nav &lt;span style="color: #0000ff"&gt;ul&lt;/span&gt;
{
    &lt;span style="color: #0000ff"&gt;margin&lt;/span&gt;-&lt;span style="color: #0000ff"&gt;left&lt;/span&gt;: 0;
    &lt;span style="color: #0000ff"&gt;padding&lt;/span&gt;-&lt;span style="color: #0000ff"&gt;left&lt;/span&gt;: 0;
}&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Now the menu will correctly render as:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.auburnrandall.com/ImageServer.ashx?img=Tech/HorizontalMenuwithCSS_95F6/image_10.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="26" alt="image" src="http://www.auburnrandall.com/ImageServer.ashx?img=Tech/HorizontalMenuwithCSS_95F6/image_thumb_4.png" width="188" border="0"&gt;&lt;/a&gt;&lt;/p&gt;</description>
      <link>http://devcenter.auburnrandall.com/Default.aspx?type=post&amp;id=46</link>
      <pubDate>Fri, 22 Feb 2008 15:40:23 GMT</pubDate>
      <dc:creator>jrandall</dc:creator>
    </item>
    <item>
      <title>Sorting using IComparer(T)</title>
      <description>&lt;p&gt;When working with a collection, such as List&amp;lt;T&amp;gt;, there are many available methods that can be implemented to perform the object comparison that determines the sort order. One of the comparison options is to provide a class that implements &lt;strong&gt;IComparer&amp;lt;T&amp;gt;&lt;/strong&gt;.&lt;/p&gt; &lt;p&gt;According to the &lt;a title="http://msdn2.microsoft.com/en-us/library/8ehhxeaf.aspx" href="http://msdn2.microsoft.com/en-us/library/8ehhxeaf.aspx"&gt;MSDN documentation&lt;/a&gt;, this interface is used to "define a method that a type implements to compare two objects". Classes that implement this interface must define a &lt;strong&gt;Compare&lt;/strong&gt; method. Within this method, you provide the logic that is used to determine how two type instances match up.&lt;/p&gt; &lt;p&gt;To illustrate this we'll use the Car class (shown below), and build a IComparer class that the Sort routine will use.&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.auburnrandall.com/ImageServer.ashx?img=Tech/UsingIComparerT_BC83/image_4.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="186" alt="image" src="http://www.auburnrandall.com/ImageServer.ashx?img=Tech/UsingIComparerT_BC83/image_thumb_1.png" width="163" border="0"&gt;&lt;/a&gt;&amp;nbsp;&lt;/p&gt; &lt;div&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;class&lt;/span&gt; SimpleComparer : IComparer&amp;lt;Car&amp;gt;
{
    &lt;span style="color: #cc6633"&gt;#region&lt;/span&gt; IComparer&amp;lt;Car&amp;gt; Members

    &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; Compare(Car x, Car y)
    {
        &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; x.Make.CompareTo(y.Make);
    }

    &lt;span style="color: #cc6633"&gt;#endregion&lt;/span&gt;
}&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;This class would be used by the Sort method as follows:&lt;/p&gt;
&lt;div&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #008000"&gt;// build list from data layer&lt;/span&gt;
List&amp;lt;Car&amp;gt; cars = Car.GetCars();

cars.Sort(&lt;span style="color: #0000ff"&gt;new&lt;/span&gt; SimpleComparer());&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Since the only property that is compared is the &lt;em&gt;Make&lt;/em&gt; property, this implementation assumes that a Car collection will always be sorted by Make. This is fairly restrictive. What if we want to sort by other properties? Fortunately a decent pattern has evolved within the .NET community that simplifies this.&lt;/p&gt;
&lt;p&gt;Essentially, the pattern implements a &lt;strong&gt;Comparer&lt;/strong&gt; class that provides a set of sorting options for a specific type. The consumer will determine which option to use and create a new instance of the Comparer class targeting the selected option.&lt;/p&gt;
&lt;p&gt;This pattern can be summarized, and implemented, with the following steps.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Define an enumeration of the available sorting options. 
&lt;li&gt;Create a private field that is used to indicate the current sorting method. 
&lt;li&gt;Limit the scope of the default constructor in the Comparer class to &lt;strong&gt;protected&lt;/strong&gt;. 
&lt;li&gt;Create a public constructor that parameterizes, and assigns, the sorting method. 
&lt;li&gt;In the &lt;strong&gt;Compare&lt;/strong&gt; method, use the sorting method to conditionally determine which property (or properties) to sort by.&lt;/li&gt;&lt;/ol&gt;
&lt;p&gt;By following these five simple steps, we now have a robust Comparer class that can be used to sort a collection based on a number of pre-determined sorting options.&lt;/p&gt;
&lt;div&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;class&lt;/span&gt; CarComparer : IComparer&amp;lt;Car&amp;gt;
{
    &lt;span style="color: #008000"&gt;// Enumerate the available sorting methods&lt;/span&gt;
    &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;enum&lt;/span&gt; CarSortOptions
    {
        Make,
        Model
    }

    &lt;span style="color: #008000"&gt;// Create a field for the desired sort option&lt;/span&gt;
    &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; CarSortOptions _sortOption = CarSortOptions.Make;

    &lt;span style="color: #008000"&gt;// Restrict the scope of the default constructor&lt;/span&gt;
    &lt;span style="color: #0000ff"&gt;protected&lt;/span&gt; CarComparer()
    {
    }

    &lt;span style="color: #008000"&gt;// Create a constructor that specifies the desired sort option&lt;/span&gt;
    &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; CarComparer(CarSortOptions sortOption)
    {
        _sortOption = sortOption;
    }

    &lt;span style="color: #cc6633"&gt;#region&lt;/span&gt; IComparer&amp;lt;Car&amp;gt; Members

    &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; Compare(Car x, Car y)
    {
        &lt;span style="color: #008000"&gt;// Use the Sort Option to determine the property to Compare&lt;/span&gt;
        &lt;span style="color: #0000ff"&gt;switch&lt;/span&gt; (_sortOption)
        {
            &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; CarSortOptions.Model:
                &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; x.Model.CompareTo(y.Model);

            &lt;span style="color: #0000ff"&gt;default&lt;/span&gt;:
                &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; x.Make.CompareTo(y.Make);
        }
    }

    &lt;span style="color: #cc6633"&gt;#endregion&lt;/span&gt;
}&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Note that although simple examples of property sorting was used (using the CompareTo method), more complex data based algorithms could be substituted. &lt;/p&gt;
&lt;p&gt;The following lines illustrate how this Comparer may be used to sort a collection.&lt;/p&gt;
&lt;div&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #008000"&gt;// Build list from data layer&lt;/span&gt;
List&amp;lt;Car&amp;gt; cars = Car.GetCars();

&lt;span style="color: #008000"&gt;// Sort by "Make"&lt;/span&gt;
cars.Sort(&lt;span style="color: #0000ff"&gt;new&lt;/span&gt; CarComparer(CarComparer.CarSortOptions.Make));

&lt;span style="color: #008000"&gt;// Sort by "Model"&lt;/span&gt;
cars.Sort(&lt;span style="color: #0000ff"&gt;new&lt;/span&gt; CarComparer(CarComparer.CarSortOptions.Model));&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;If you find yourself needing to expose a powerful, and possibly complex, set of sorting options for a class, implementing IComparer&amp;lt;T&amp;gt; along with the above pattern could prove to be a useful tool.&lt;/p&gt;</description>
      <link>http://devcenter.auburnrandall.com/Default.aspx?type=post&amp;id=65</link>
      <pubDate>Thu, 24 Jan 2008 18:57:28 GMT</pubDate>
      <dc:creator>jeremy</dc:creator>
    </item>
    <item>
      <title>Check in Policies and Trust</title>
      <description>&lt;p&gt;I recently came across a &lt;a href="http://www.mattberther.com/2008/01/18/check-in-policies-signify-a-lack-of-trust/" target="_blank"&gt;post&lt;/a&gt; which summarizes that the presence of check-in policies implies a lack of trust of the contributing developers. His assertion is that when such policies are put into place they mask fundamental issues in the development process within an organization.&amp;nbsp; &lt;/p&gt; &lt;h3&gt;It's about Standardization&lt;/h3&gt; &lt;p&gt;Why do we want developers to meet a certain set of criteria before they check code in? It basically boils down to having a set of code that meets some form of local standards. Organizational standards increase the overall familiarity, quality and maintainability of the established code base. Implemented standards can take on a number of forms and will likely differ from organization to organization. Some general examples follow.&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Does the structure (layout) of the code meet established guidelines?  &lt;li&gt;Is the changeset associated with a work item?  &lt;li&gt;Has the code been properly tested with a set of unit tests?  &lt;li&gt;Does the change break the overall build of the product?&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;If you buy into the fact (as I do) that an issue is more expensive to address the further "downstream" it appears, then you'll want to address as many of these as possible as early as possible. To that end, standards can be thought of as the first line of Quality Assurance. In this case, we're trying to weed out issues that can easily be remedied early in the development process.&lt;/p&gt; &lt;h3&gt;Is it about Trust?&lt;/h3&gt; &lt;p&gt;With that in mind, is the enforcement of standards during the check-in an issue of trust? While I do agree that in an ideal world, contributing developers would have the knowledge, experience and discipline to virtually render check-in policies useless. But as is often the case, there are things that happen that will disrupt this development utopia. Programmers come on board that are not completely familiar with the local policies, or a harried developer will try to get the latest hot-fix in as quickly as possible, and so on.&lt;/p&gt; &lt;p&gt;In these circumstances it's not that the developers should be mistrusted but rather a mechanism is needed to ensure that checked-in code meets the set of standards. This mechanism, the check-in policy, becomes a sanity check that provides a level of comfort that the checked-in code is complete.&lt;/p&gt; &lt;p&gt;What it comes down to is that Programmers are human and that, however talented and "trustworthy" they may be, they may simply overlook a fundamental step in the process. This will lead to unqualified code that will have been mistakenly checked-in.&lt;/p&gt; &lt;h3&gt;Summary&lt;/h3&gt; &lt;p&gt;Well implemented check-in policies should not interfere with a good developer's day-in and out activity. In fact, if a developer completes their task as assigned, the policies should be completely transparent from their check-in. For the developer that overlooks a critical step, the policy is in place to ensure that they complete their task before check-in.&lt;/p&gt;</description>
      <link>http://devcenter.auburnrandall.com/Default.aspx?type=post&amp;id=64</link>
      <pubDate>Mon, 21 Jan 2008 20:44:26 GMT</pubDate>
      <dc:creator>jeremy</dc:creator>
    </item>
    <item>
      <title>Convert a .NET Color to a Hex value</title>
      <description>&lt;p&gt;The following method uses an option of &lt;a href="http://msdn2.microsoft.com/en-us/library/dwhawy9k(VS.80).aspx" target="_blank"&gt;ToString()&lt;/a&gt; to convert a &lt;a href="http://msdn2.microsoft.com/en-us/library/system.drawing.color(vs.80).aspx" target="_blank"&gt;Color&lt;/a&gt; to its Hex representation.&lt;/p&gt; &lt;div&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #008000"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;
&lt;span style="color: #008000"&gt;/// Converts a Color to a Hex representation RRGGBBAA. Alpha (opacity) &lt;/span&gt;
&lt;span style="color: #008000"&gt;/// channel is included at end of returned value. &lt;/span&gt;
&lt;span style="color: #008000"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;
&lt;span style="color: #008000"&gt;/// &amp;lt;param name="c"&amp;gt;Color&amp;lt;/param&amp;gt;&lt;/span&gt;
&lt;span style="color: #008000"&gt;/// &amp;lt;returns&amp;gt;Hex representation&amp;lt;/returns&amp;gt;&lt;/span&gt;
&lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; GetHex(Color c)
{
    &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; rx = c.R.ToString(&lt;span style="color: #006080"&gt;"X2"&lt;/span&gt;);
    &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; gx = c.G.ToString(&lt;span style="color: #006080"&gt;"X2"&lt;/span&gt;);
    &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; bx = c.B.ToString(&lt;span style="color: #006080"&gt;"X2"&lt;/span&gt;);
    &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; ax = c.A.ToString(&lt;span style="color: #006080"&gt;"X2"&lt;/span&gt;);

    &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; rx + gx + bx + ax;
}&lt;/pre&gt;&lt;/div&gt;</description>
      <link>http://devcenter.auburnrandall.com/Default.aspx?type=post&amp;id=63</link>
      <pubDate>Thu, 17 Jan 2008 19:34:00 GMT</pubDate>
      <dc:creator>jeremy</dc:creator>
    </item>
    <item>
      <title>Casting and State Variables</title>
      <description>&lt;p&gt;When working with ViewState and SessionState variables, you must use casting operations to convert the value from the state data type into the instance data type. In C#, there are two methods that you can use to perform this operation.&lt;/p&gt; &lt;div&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #008000"&gt;// Method 1&lt;/span&gt;
Car c = ViewState[&lt;span style="color: #006080"&gt;"MyCar"&lt;/span&gt;] &lt;span style="color: #0000ff"&gt;as&lt;/span&gt; Car;

&lt;span style="color: #008000"&gt;// Method 2&lt;/span&gt;
Car c = (Car)ViewState[&lt;span style="color: #006080"&gt;"MyCar"&lt;/span&gt;];
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;In normal circumstances, either method will perform the desired task of getting an object from ViewState into a Car instance. However in certain situations both methods have their drawbacks.&lt;/p&gt;
&lt;h3&gt;Casting using the "as" keyword&lt;/h3&gt;
&lt;p&gt;When performing a casting operation using the "as" keyword, the instance variable will be assigned to null when the cast cannot be performed. This will happen when either the object instance is null or is of the wrong type. &lt;/p&gt;
&lt;div&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;ViewState[&lt;span style="color: #006080"&gt;"MyCar"&lt;/span&gt;] = &lt;span style="color: #0000ff"&gt;null&lt;/span&gt;;
ViewState[&lt;span style="color: #006080"&gt;"MyCar"&lt;/span&gt;] = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; Person();&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;When using the "as" keyword, either of the above statements will result in a null value when trying to cast to a &lt;em&gt;Car&lt;/em&gt; instance. This may be desired in the first example. In the second example, where the ViewState instance has been assigned to the wrong &lt;em&gt;type&lt;/em&gt;, we clearly have a bug. Unfortunately when this code is run, the car instance will be null and the fact that we're converting from the wrong type will not be caught. This can be a tricky bug to troubleshoot.&lt;/p&gt;
&lt;h3&gt;Casting using the "C" style&lt;/h3&gt;
&lt;p&gt;The second form of casting, using the C style casting, exceptions will be thrown when the cast operation cannot be performed. Either of the previous examples will result in an &lt;a href="http://msdn2.microsoft.com/en-us/library/system.invalidcastexception.aspx" target="_blank"&gt;InvalidCastException&lt;/a&gt; being thrown. This is not necessarily what we want in the first case, so we'll have to check for null. In the second case, this is &lt;em&gt;exactly&lt;/em&gt; what we would want.&lt;/p&gt;
&lt;h3&gt;Casting with State variables&lt;/h3&gt;
&lt;p&gt;When dealing with State variables, I prefer to use the C style casting. Although I have to explicitly check for null before every cast, I am assured that the instance that I am casting &lt;em&gt;from&lt;/em&gt; will be of the correct type (otherwise an exception will be thrown). &lt;/p&gt;
&lt;p&gt;I find that when working with anything that needs to use constant strings as keys (as is the case with State variables), it is very easy to type in the wrong key in the wrong place. This sequence could easily lead to the State variable containing the wrong type. When this wrong type is referenced later in the code I &lt;em&gt;want&lt;/em&gt; an exception to be thrown. I want to know that I have a bug in my code and having the exception will force the issue. &lt;/p&gt;
&lt;p&gt;If I cast using "as" I will not get the exception and the program will run uninterrupted. When I finally get a problem, it will initially be seen to be unrelated to the real problem - that the wrong value was read from State.&lt;/p&gt;</description>
      <link>http://devcenter.auburnrandall.com/Default.aspx?type=post&amp;id=62</link>
      <pubDate>Thu, 10 Jan 2008 19:24:02 GMT</pubDate>
      <dc:creator>jeremy</dc:creator>
    </item>
    <item>
      <title>Printer Troubleshooting</title>
      <description>&lt;p&gt;Last night I received a call from a friend that was having troubles printing a document. The document was queuing up fine, it just would not print. He explained the steps that he went through before calling me. Namely, he:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Rebooted the entire system (and turned the printer off).&lt;/li&gt; &lt;li&gt;Uninstalled and reinstalled the printer.&lt;/li&gt; &lt;li&gt;Checked all of the connections from the printer to the computer.&lt;/li&gt; &lt;li&gt;Tried hooking the computer up to a different USB port.&lt;/li&gt; &lt;li&gt;Went online to the manufacturer's web site for any other troubleshooting hints (there were none)&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Since he had pretty much done everything that I would have suggested, I was a bit at a loss of what to do next. The one thing that kind of struck me was that the printer needed to be completely removed from the OS and re-added. I suggested he try the following:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;Delete the printer from the "Printer and Faxes" option on the &lt;em&gt;Start&lt;/em&gt; menu&lt;/li&gt; &lt;li&gt;Disconnect the printer from the computer (unplugging it from the USB port)&lt;/li&gt; &lt;li&gt;Reboot the computer.&lt;/li&gt; &lt;li&gt;Once the OS is back, plug the printer back in.&lt;/li&gt; &lt;li&gt;At this point the "Plug and Play" dialog will take over prompting for the install of the printer.&lt;/li&gt; &lt;li&gt;Try printing the document.&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="125" alt="image" src="http://www.auburnrandall.com/ImageServer.ashx?img=Tech/PrinterTroubleshooting_8B2A/image_5.png" width="185" border="0"&gt; &lt;/p&gt; &lt;p&gt;This worked.&lt;/p&gt;</description>
      <link>http://devcenter.auburnrandall.com/Default.aspx?type=post&amp;id=61</link>
      <pubDate>Thu, 20 Dec 2007 14:53:47 GMT</pubDate>
      <dc:creator>jeremy</dc:creator>
    </item>
    <item>
      <title>Close those SCRIPT tags</title>
      <description>&lt;p&gt;When declaring SCRIPT elements in the HEAD section of your web page, as highlighted below, there are two methods available for closing the tag.&lt;/p&gt;  &lt;p&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="68" alt="image" src="http://devcenter.auburnrandall.com/ImageServer.ashx?img=Tech/ClosethoseSCRIPTtags_DBE3/image_6.png" width="484" border="0" /&gt; &lt;/p&gt;  &lt;p&gt;Since I feel that the first option creates &amp;quot;cleaner&amp;quot; looking code, I tend to prefer closing HTML tags that do not contain any content in this manner. However, there is a nifty little bug in Internet Explorer. If you close a SCRIPT element as shown in the first example, the browser will not execute javascript as expected.&lt;/p&gt;  &lt;p&gt;To illustrate this, create two files. The first will be a javascript file name &lt;em&gt;MyScript.js &lt;/em&gt;and it will contain the following line:&lt;/p&gt;  &lt;div&gt;   &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;alert(&lt;span style="color: #006080"&gt;&amp;quot;HERE&amp;quot;&lt;/span&gt;);&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;The second file will be the HTML page that references the javascript file.&lt;/p&gt;

&lt;div&gt;
  &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&amp;lt;html&amp;gt;
&amp;lt;head&amp;gt;
    &amp;lt;title&amp;gt;Untitled Page&amp;lt;/title&amp;gt;
    &amp;lt;script type=&lt;span style="color: #006080"&gt;&amp;quot;text/javascript&amp;quot;&lt;/span&gt; src=&lt;span style="color: #006080"&gt;&amp;quot;MyScript.js&amp;quot;&lt;/span&gt; /&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
    &amp;lt;script type=&lt;span style="color: #006080"&gt;&amp;quot;text/javascript&amp;quot;&lt;/span&gt;&amp;gt;
        alert(&lt;span style="color: #006080"&gt;&amp;quot;In Body&amp;quot;&lt;/span&gt;);
    &amp;lt;/script&amp;gt;

&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;When viewing this page in Internet Explorer, the &amp;quot;In Body&amp;quot; alert will not show. IE is crashing on the closing of the SCRIPT element defined in the HEAD section. When you reformat this element to use the fully closed syntax (option 2 shown above), the &amp;quot;In Body&amp;quot; alert will show.&lt;/p&gt;</description>
      <link>http://devcenter.auburnrandall.com/Default.aspx?type=post&amp;id=60</link>
      <pubDate>Mon, 17 Dec 2007 20:38:17 GMT</pubDate>
      <dc:creator>jrandall</dc:creator>
    </item>
    <item>
      <title>Specifying a new DEFAULT in Access SQL</title>
      <description>&lt;p&gt;I have been trying to change the default value of a column using an SQL statement for one of my Access databases. Like the hundreds of other times that I've done this, I fired up Access to test my Query using SQL View. In the SQL window I entered:&lt;/p&gt; &lt;div&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;ALTER&lt;/span&gt; &lt;span style="color: #0000ff"&gt;TABLE&lt;/span&gt; MyTable 
    &lt;span style="color: #0000ff"&gt;ALTER&lt;/span&gt; &lt;span style="color: #0000ff"&gt;COLUMN&lt;/span&gt; MyColumn &lt;span style="color: #0000ff"&gt;BIT&lt;/span&gt; &lt;span style="color: #0000ff"&gt;DEFAULT&lt;/span&gt; 0;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;This being a very straightforward operation, I figured I was all set. Unfortunately, when I attempted to run this query I received the following error:&lt;/p&gt;
&lt;p&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="115" alt="image" src="http://www.auburnrandall.com/ImageServer.ashx?img=Tech/SpecifyinganewDEFAULTinAccessSQL_CCDC/image_3.png" width="279" border="0"&gt; &lt;/p&gt;
&lt;p&gt;Thinking that I may have somehow run into some Access SQL inconsistency, I started to search through MSDN. After a bit of digging, I ran into this post on &lt;a href="http://msdn2.microsoft.com/en-us/library/aa140015(office.10).aspx#acintsql_alttable" target="_blank"&gt;Intermediate Microsoft Jet SQL&lt;/a&gt;. In particular, there was the following entry:&lt;/p&gt;
&lt;p&gt;"The DEFAULT statement can be executed only through the Jet OLE DB provider and ADO. It will return an error message if used through the Access SQL View user interface."&lt;/p&gt;
&lt;p&gt;Nice.&lt;/p&gt;
&lt;p&gt;I put the above SQL statement into my application, and the ALTER performed properly.&lt;/p&gt;</description>
      <link>http://devcenter.auburnrandall.com/Default.aspx?type=post&amp;id=59</link>
      <pubDate>Fri, 14 Dec 2007 19:34:05 GMT</pubDate>
      <dc:creator>jeremy</dc:creator>
    </item>
    <item>
      <title>Dynamically adding links to Header</title>
      <description>&lt;p&gt;When developing an ASP.NET page, one common requirement is programmatically add links to the HTML Header section. An example of this is to conditionally reference a CSS stylesheet. Fortunately, there is a simple solution by creating an instance of the &lt;a href="http://msdn2.microsoft.com/en-us/library/system.web.ui.htmlcontrols.htmllink.aspx" target="_blank"&gt;HtmlLink&lt;/a&gt; control and then adding it the the Page.Header.Controls collection.&lt;/p&gt; &lt;div&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;protected&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; Page_Load(&lt;span style="color: #0000ff"&gt;object&lt;/span&gt; sender, EventArgs e)
{
    HtmlLink link = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; HtmlLink();
    link.Attributes[&lt;span style="color: #006080"&gt;"rel"&lt;/span&gt;] = &lt;span style="color: #006080"&gt;"stylesheet"&lt;/span&gt;;
    link.Attributes[&lt;span style="color: #006080"&gt;"type"&lt;/span&gt;] = &lt;span style="color: #006080"&gt;"text/css"&lt;/span&gt;;
    link.Attributes[&lt;span style="color: #006080"&gt;"href"&lt;/span&gt;] = &lt;span style="color: #006080"&gt;"~/DynStyleSheet.css"&lt;/span&gt;;
    Page.Header.Controls.Add(link);
}&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Note that this technique is not limited to stylesheets. Any type of link can be added.&lt;/p&gt;</description>
      <link>http://devcenter.auburnrandall.com/Default.aspx?type=post&amp;id=58</link>
      <pubDate>Tue, 11 Dec 2007 20:35:46 GMT</pubDate>
      <dc:creator>jeremy</dc:creator>
    </item>
    <item>
      <title>Calling one constructor from another in C#</title>
      <description>&lt;p&gt;When developing classes that have multiple overloaded constructors, it is possible to call one constructor from another using the &lt;a href="http://msdn2.microsoft.com/en-us/library/dk1507sz(VS.80).aspx" target="_blank"&gt;this&lt;/a&gt;&amp;nbsp;keyword. In the following example, the constructor that accepts the &lt;em&gt;name&lt;/em&gt; parameter will call the&amp;nbsp;parameter-less constructor.&lt;/p&gt; &lt;div&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;class&lt;/span&gt; Person
{
    &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; _name;

    &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; Person()
    {
        &lt;span style="color: #008000"&gt;// This code executes first&lt;/span&gt;
    }

    &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; Person(&lt;span style="color: #0000ff"&gt;string&lt;/span&gt; name) : &lt;span style="color: #0000ff"&gt;this&lt;/span&gt;()
    {
        &lt;span style="color: #008000"&gt;// This executes after Person() is complete&lt;/span&gt;
        _name = name;
    }
}&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;When one constructor calls another in this fashion, the constructor referenced by the &lt;strong&gt;this&lt;/strong&gt; keyword will execute first.&lt;/p&gt;</description>
      <link>http://devcenter.auburnrandall.com/Default.aspx?type=post&amp;id=57</link>
      <pubDate>Thu, 06 Dec 2007 19:19:42 GMT</pubDate>
      <dc:creator>jeremy</dc:creator>
    </item>
    <item>
      <title>Handling empty data in a Repeater</title>
      <description>&lt;p&gt;As powerful and elegant as the Repeater control is, there is no built&amp;nbsp;mechanism for&amp;nbsp;handling how an empty data condition will be&amp;nbsp;displayed. Other controls, for example the GridView, provide properties and templates that&amp;nbsp;will be rendered when the DataSource is void of data. Unfortunately no such behavior is built into the Repeater control. Fortunately, due to the inherent flexibility of the Repeater, it is fairly easy to add this functionality. Within this article, we'll explore using an existing Repeater to display a message when the data collection bound to the repeater is empty.&lt;/p&gt;
&lt;p&gt;In the following code example, a Repeater is used to&amp;nbsp;generate a table&amp;nbsp;based&amp;nbsp;on&amp;nbsp;a databound&amp;nbsp;Collection.&lt;/p&gt;
&lt;div&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;asp:Repeater&lt;/span&gt; &lt;span style="color: #ff0000"&gt;runat&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;ID&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Repeater1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;HeaderTemplate&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;br /&gt;
&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;table&lt;/span&gt; &lt;span style="color: #ff0000"&gt;width&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;80%&amp;quot;&amp;gt;&lt;br /&gt;
&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;HeaderTemplate&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;br /&gt;
&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;ItemTemplate&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;br /&gt;
&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;tr&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;br /&gt;
&lt;/span&gt;             &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;td&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;asp:Label&lt;/span&gt; &lt;span style="color: #ff0000"&gt;runat&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Text&lt;/span&gt;&lt;span style="color: #0000ff"&gt;='&amp;lt;%# Eval(&amp;quot;Model&amp;quot;) %&amp;gt;'&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;td&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;br /&gt;
&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;tr&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;br /&gt;
&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;ItemTemplate&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;br /&gt;
       &amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;FooterTemplate&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;br /&gt;
&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;table&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;br /&gt;
&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;FooterTemplate&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;br /&gt;
  &amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;asp:Repeater&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (!IsPostBack)&lt;br /&gt;
  {&lt;br /&gt;
       List&amp;lt;Car&amp;gt; cars = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; List&amp;lt;Car&amp;gt;();&lt;br /&gt;
       Repeater1.DataSource = cars;&lt;br /&gt;
       Repeater1.DataBind();&lt;br /&gt;
  }&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Since there haven't been any items added to the &amp;quot;cars&amp;quot; collection, the ItemTemplate will not be used and the Repeater will generate an empty table. Note that the behavior is to render the HeaderTemplate and FooterTemplate even though an empty collection has been bound to the Repeater. The following shows the resulting HTML.&lt;/p&gt;
&lt;div&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;table&lt;/span&gt; &lt;span style="color: #ff0000"&gt;width&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;80%&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;table&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Since the Header will render regardless of if there is are any items in the collection, this is a good place to put the HTML (or ASP.NET controls) that will display when there is no data to display. We will also set the&amp;nbsp;Visible property based on the data count of the Repeater's DataSource.&lt;/p&gt;
&lt;p&gt;Building on the previous example, the HeaderTemplate will now contain:&lt;/p&gt;
&lt;div&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;table&lt;/span&gt; &lt;span style="color: #ff0000"&gt;width&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;80%&amp;quot;&amp;gt;&lt;br /&gt;
&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;tr&lt;/span&gt; &lt;span style="color: #ff0000"&gt;runat&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;server&amp;quot;&lt;br /&gt;
&lt;/span&gt;         &lt;span style="color: #ff0000"&gt;visible&lt;/span&gt;&lt;span style="color: #0000ff"&gt;='&amp;lt;%# ((ICollection)Repeater1.DataSource).Count == 0 ? true : false %&amp;gt;'&amp;gt;&lt;br /&gt;
&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;td&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;br /&gt;
&lt;/span&gt;             There is no data to display&lt;br /&gt;
           &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;td&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;br /&gt;
&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;tr&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;There are&amp;nbsp;a couple of&amp;nbsp;items that should be noted in the above example.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The Repeater has been referenced by it's ID.&lt;/li&gt;
&lt;li&gt;The DataSource property of the Repeater has been cast to an ICollection object. DataSource is defined as type &lt;em&gt;object&lt;/em&gt;, but when data is bound to it, it must be of type &lt;em&gt;ICollection&lt;/em&gt;.&amp;nbsp;We are using the Count property from this interface to determine if the &amp;quot;Empty Data&amp;quot; message should display.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;When there are several controls where the Visible property needs to be set, the logic can be moved to the code-behind for the page. This is shown in the following IsDataEmpty property.&lt;/p&gt;
&lt;div&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;protected&lt;/span&gt; &lt;span style="color: #0000ff"&gt;bool&lt;/span&gt; IsDataEmpty &lt;br /&gt;
  {&lt;br /&gt;
       get&lt;br /&gt;
       {&lt;br /&gt;
           ICollection list = Repeater1.DataSource &lt;span style="color: #0000ff"&gt;as&lt;/span&gt; ICollection;&lt;br /&gt;
           &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; list.Count == 0 ? &lt;span style="color: #0000ff"&gt;true&lt;/span&gt; : &lt;span style="color: #0000ff"&gt;false&lt;/span&gt;;&lt;br /&gt;
       }&lt;br /&gt;
  }&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;The ASPX will change to reference this property as follows:&lt;/p&gt;
&lt;div&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;table&lt;/span&gt; &lt;span style="color: #ff0000"&gt;width&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;80%&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;tr&lt;/span&gt; &lt;span style="color: #ff0000"&gt;runat&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;server&amp;quot;&lt;br /&gt;
&lt;/span&gt;         &lt;span style="color: #ff0000"&gt;visible&lt;/span&gt;&lt;span style="color: #0000ff"&gt;='&amp;lt;%# IsDataEmpty %&amp;gt;'&amp;gt;&lt;br /&gt;
&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;td&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;br /&gt;
&lt;/span&gt;             There is no data to display&lt;br /&gt;
           &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;td&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;br /&gt;
&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;tr&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Regardless of which approach you use, the resulting HTML will now look like:&lt;/p&gt;
&lt;div&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;table&lt;/span&gt; &lt;span style="color: #ff0000"&gt;width&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;80%&amp;quot;&amp;gt;&lt;br /&gt;
&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;tr&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;br /&gt;
&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;td&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;br /&gt;
&lt;/span&gt;             There is no data to display&lt;br /&gt;
           &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;td&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;br /&gt;
&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;tr&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;br /&gt;
  &amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;table&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;As shown in the above examples, it is fairly simple to add HTML that will conditionally render based on the presence (or lack) of data bound to a Repeater. &lt;/p&gt;</description>
      <link>http://devcenter.auburnrandall.com/EmptyRepeaterData.aspx</link>
      <pubDate>Wed, 05 Dec 2007 21:45:40 GMT</pubDate>
      <dc:creator>jeremy</dc:creator>
    </item>
    <item>
      <title>Using Session State to pass page variables</title>
      <description>&lt;p&gt;When one page redirects to another, the&amp;nbsp;destination page may rely on information that was gathered on the&amp;nbsp;calling page. A popular form of passing this information is to use Session State variables.&lt;/p&gt; &lt;p&gt;On the first page, logic similar to the following would appear:&lt;/p&gt; &lt;div&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #008000"&gt;// myObject will be filled with values that are needed on PageTwo&lt;/span&gt;
Session[&lt;span style="color: #006080"&gt;"MyData"&lt;/span&gt;] = myObject;

Page.Redirect(&lt;span style="color: #006080"&gt;"~/PageTwo.aspx"&lt;/span&gt;);&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;PageTwo.aspx can now reference the Session variable "MyData" to retrieve and process the information.&lt;/p&gt;
&lt;div&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;MyObject instance = Session[&lt;span style="color: #006080"&gt;"MyData"&lt;/span&gt;] &lt;span style="color: #0000ff"&gt;as&lt;/span&gt; MyObject;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;This technique can be used to effectively pass&amp;nbsp;the instance of an object from one page to another. A caveat to this approach&amp;nbsp;is that&amp;nbsp;you must be aware of&amp;nbsp;how long the session information will stay "alive". If not properly cleaned up, this information will continue to tie up resources on&amp;nbsp;the web server until the session ends.&amp;nbsp;This happens&amp;nbsp;when the user either logs out of the application or closes the browser.&lt;/p&gt;
&lt;p&gt;One method of cleaning up session data is to do so when the user&amp;nbsp;completes the process they are currently engaged in. For example, I could hold information in Session until the user presses&amp;nbsp;the "Submit" or "Cancel" button. This works fine if the user is guaranteed to press either of these buttons. What happens if they don't ? What if they decide to just navigate away from the page instead of pressing "Cancel"?&lt;/p&gt;
&lt;p&gt;The information will remain in Session until the user's session ends.&lt;/p&gt;
&lt;p&gt;Or, to put it another way, the information will tie up resources on the web server for &lt;em&gt;no good purpose&lt;/em&gt; (assuming that the other pages in the web-site have no interest in this data) until the user's session ends.&lt;/p&gt;
&lt;p&gt;When developing pages, I like to dispose of my Session variables as soon as I can. One method that can be used is to consume the relevant information in the calling page and then immediately remove the session instance.&lt;/p&gt;
&lt;div&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (!Page.IsPostback)
{
    MyObject instance = Session[&lt;span style="color: #006080"&gt;"MyData"&lt;/span&gt;] &lt;span style="color: #0000ff"&gt;as&lt;/span&gt; MyObject;
    
    &lt;span style="color: #008000"&gt;// ... (do work based on instance data)&lt;/span&gt;

    Session[&lt;span style="color: #006080"&gt;"MyData"&lt;/span&gt;] = &lt;span style="color: #0000ff"&gt;null&lt;/span&gt;;
}&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Granted, it isn't always as cut and dry as this, but&amp;nbsp;bear in mind&amp;nbsp;how and when you're using session resources. Where possible, ensure that invalid session information is removed from these resources.&lt;/p&gt;</description>
      <link>http://devcenter.auburnrandall.com/Default.aspx?type=post&amp;id=40</link>
      <pubDate>Thu, 29 Nov 2007 19:13:02 GMT</pubDate>
      <dc:creator>jeremy</dc:creator>
    </item>
    <item>
      <title>An Introduction to ASP.NET Web Applications</title>
      <description>&lt;p&gt;One of the traditional obstacles in developing client-rich web applications within ASP.NET has been the fact that pages must fully refresh on every postback. During the postback, the browser will display a brief "flash" as the page information is sent and received to and from the web server. This "flash" is&amp;nbsp;a main item that differentiates&amp;nbsp;the usability of a rich-client application&amp;nbsp;from that of a web application.&lt;/p&gt; &lt;p&gt;To address this, the notion of a "partial postback" has been introduced. The idea here is that only the portion of a page that need to be updated will be sent to the browser. Once the browser receives the new information, it will only update the section on the page that has changed. This partial update eliminates the need for a full page refresh to occur, thus eliminating the dreaded "flash".&lt;/p&gt; &lt;p&gt;To implement this approach,&amp;nbsp;both ends of the browser-webserver communication will need to have infrastructure elements, or &lt;em&gt;Managers&lt;/em&gt;,&amp;nbsp;put into place to handle the transactions.&amp;nbsp;The Server Side Manager will deal with identifying and packaging the updated content that will be sent to the client.&amp;nbsp;The Client Side Manager will deal with parsing the package and displaying the updated information into the browser.&lt;/p&gt; &lt;p&gt;Using the ASP.NET AJAX extensions, the server side transactions are handled using the &lt;a href="http://www.asp.net/ajax/documentation/live/mref/T_System_Web_UI_ScriptManager.aspx" target="_blank"&gt;ScriptManager&lt;/a&gt;&amp;nbsp;control. Areas on a page that can participate in partial page rendering are identified using the &lt;a href="http://www.asp.net/ajax/documentation/live/mref/T_System_Web_UI_UpdatePanel.aspx" target="_blank"&gt;UpdatePanel&lt;/a&gt;&amp;nbsp;control. Essentially, when a partial postback is encountered, the ScriptManager will interact with any UpdatePanel controls&amp;nbsp;to determine what HTML needs to be sent to the client.&lt;/p&gt; &lt;p&gt;The client side is implemented using the &lt;a href="http://www.asp.net/ajax/documentation/live/ClientReference/Sys.WebForms/PageRequestManagerClass/default.aspx" target="_blank"&gt;PageRequestManager&lt;/a&gt;. This receives the content from the ScriptManager and uses&amp;nbsp;javascript&amp;nbsp;to "inject" the newly rendered&amp;nbsp;HTML markup&amp;nbsp;into the existing web page.&lt;/p&gt; &lt;p&gt;These tools provide&amp;nbsp;a great starting point for transitioning&amp;nbsp;your web site into a web application. Examples of how to use the ScriptManager and the UpdatePanel can be found in the ASP.NET AJAX &lt;a href="http://www.asp.net/ajax/documentation/live/overview/UpdatePanelOverview.aspx" target="_blank"&gt;documentation&lt;/a&gt;.&lt;/p&gt;</description>
      <link>http://devcenter.auburnrandall.com/Default.aspx?type=post&amp;id=39</link>
      <pubDate>Thu, 15 Nov 2007 19:16:41 GMT</pubDate>
      <dc:creator>jeremy</dc:creator>
    </item>
    <item>
      <title>Binding data to a nested Repeater</title>
      <description>&lt;p&gt;When building a page in ASP.NET, it is sometimes helpful to use repeaters nested within a main repeater to display hierarchal data. This concept is shown using the following pseudo-code.&lt;/p&gt; &lt;div&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&amp;lt;asp:Repeater runat=&lt;span style="color: #006080"&gt;"server"&lt;/span&gt; ID=&lt;span style="color: #006080"&gt;"MainDataRepeater"&lt;/span&gt;&amp;gt;
    &amp;lt;ItemTemplate&amp;gt;
        &amp;lt;%-- Databound instance data will appear here --%&amp;gt;
        &amp;lt;asp:Repeater runat=&lt;span style="color: #006080"&gt;"server"&lt;/span&gt; ID=&lt;span style="color: #006080"&gt;"SecondaryDataRepeater"&lt;/span&gt;&amp;gt;
            &amp;lt;ItemTemplate&amp;gt;
                &amp;lt;%-- Repeating subset data will appear here --%&amp;gt;
            &amp;lt;/ItemTemplate&amp;gt;
        &amp;lt;/asp:Repeater&amp;gt;
    &amp;lt;/ItemTemplate&amp;gt;
&amp;lt;/asp:Repeater&amp;gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;When following a pattern such as this, the main technical hurdle is determining how to get the data in the nested repeaters to bind properly. Fortunately, ASP.NET provides a couple of options that greatly simplify this task. &lt;/p&gt;
&lt;h3&gt;Setup the Object Model&lt;/h3&gt;
&lt;p&gt;The following examples will build on the infrastructure that was started in a &lt;a href="http://devcenter.auburnrandall.com/Default.aspx?c=Tech&amp;amp;type=post&amp;amp;id=65"&gt;previous post&lt;/a&gt;. In addition to the previously defined Car class, another class will be defined that represents information about the car for each model year.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.auburnrandall.com/ImageServer.ashx?img=Tech/BindingdatatoanestedRepeater_E15A/image.png" atomicselection="true"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="186" alt="image" src="http://www.auburnrandall.com/ImageServer.ashx?img=Tech/BindingdatatoanestedRepeater_E15A/image_thumb.png" width="379" border="0"&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;In this simple example, the resulting page will show the model years for each car instance. This is shown highlighted in the following image.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.auburnrandall.com/ImageServer.ashx?img=Tech/BindingdatatoanestedRepeater_E15A/image_1.png" atomicselection="true"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="121" alt="image" src="http://www.auburnrandall.com/ImageServer.ashx?img=Tech/BindingdatatoanestedRepeater_E15A/image_thumb_1.png" width="200" border="0"&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Now that the objects have been setup, and the desired page has been laid out, the&amp;nbsp;options used to reach this conclusion will be explored.&lt;/p&gt;
&lt;h3&gt;Databind to the Property&lt;/h3&gt;
&lt;p&gt;The easiest way to have the nested repeater access its data is to have it bind to a property of each instance. In our example, this implies that the nested repeater will bind to the ModelYears property.&lt;/p&gt;
&lt;div&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&amp;lt;asp:Repeater runat=&lt;span style="color: #006080"&gt;"server"&lt;/span&gt; ID=&lt;span style="color: #006080"&gt;"CarListRepeater"&lt;/span&gt;&amp;gt;
    &amp;lt;ItemTemplate&amp;gt;
        &amp;lt;%# Eval(&lt;span style="color: #006080"&gt;"Make"&lt;/span&gt;) %&amp;gt; &amp;lt;%# Eval(&lt;span style="color: #006080"&gt;"Model"&lt;/span&gt;) %&amp;gt; 
        &amp;lt;strong&amp;gt;&amp;lt;%# CheckAvailable(Container.DataItem) %&amp;gt;&amp;lt;/strong&amp;gt;
        
        &amp;lt;asp:Repeater runat=&lt;span style="color: #006080"&gt;"server"&lt;/span&gt; ID=&lt;span style="color: #006080"&gt;"ModelYearRepeater"&lt;/span&gt; 
            DataSource=&lt;span style="color: #006080"&gt;'&amp;lt;%# Eval("ModelYears") %&amp;gt;'&lt;/span&gt;&amp;gt;
            
            &amp;lt;ItemTemplate&amp;gt;
                &amp;lt;%# Eval(&lt;span style="color: #006080"&gt;"Year"&lt;/span&gt;) %&amp;gt;&amp;amp;nbsp;
            &amp;lt;/ItemTemplate&amp;gt;
        &amp;lt;/asp:Repeater&amp;gt;
        
        &amp;lt;br /&amp;gt;
    &amp;lt;/ItemTemplate&amp;gt;
&amp;lt;/asp:Repeater&amp;gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;In this code snippet, &lt;em&gt;ModelYearRepeater&lt;/em&gt; is bound to the &lt;em&gt;ModelYears&lt;/em&gt; property by assigning the DataSource property. Each databound instance of this Repeater will be a ModelYear type, which satisfies the &lt;em&gt;Eval("Year")&lt;/em&gt; statement.&lt;/p&gt;
&lt;h3&gt;Databind to a Method&lt;/h3&gt;
&lt;p&gt;Although databinding to a property is convenient and should be used&amp;nbsp;whenever possible,&amp;nbsp;a property containing the subset data is not always available.&amp;nbsp;In these situations,&amp;nbsp;the&amp;nbsp;data will need to be built as each&amp;nbsp;of the main data items are bound.&amp;nbsp;To do this, build the subset data in&amp;nbsp;a page source method, and bind the secondary repeater to that method.&lt;/p&gt;
&lt;p&gt;In our example, the method that will&amp;nbsp;gather the data is defined as such: &lt;/p&gt;
&lt;div&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;protected&lt;/span&gt; List&amp;lt;ModelYear&amp;gt; GetModelYears(&lt;span style="color: #0000ff"&gt;object&lt;/span&gt; dataitem)
{
    Car car = dataitem &lt;span style="color: #0000ff"&gt;as&lt;/span&gt; Car;

    &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; car.ModelYears;
}
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Note that this is returning the property of the dataitem.&amp;nbsp;In real world examples, much more code will be written here.&amp;nbsp;Once this method has been written, the secondary repeater will&amp;nbsp;use it as its datasource (sending the current dataitem as&amp;nbsp;the input&amp;nbsp;parameter).&lt;/p&gt;
&lt;div&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&amp;lt;asp:Repeater runat=&lt;span style="color: #006080"&gt;"server"&lt;/span&gt; ID=&lt;span style="color: #006080"&gt;"CarListRepeater"&lt;/span&gt;&amp;gt;
    &amp;lt;ItemTemplate&amp;gt;
        &amp;lt;%# Eval(&lt;span style="color: #006080"&gt;"Make"&lt;/span&gt;) %&amp;gt; &amp;lt;%# Eval(&lt;span style="color: #006080"&gt;"Model"&lt;/span&gt;) %&amp;gt; &amp;lt;%# CheckAvailable(Container.DataItem)%&amp;gt;
        
        &amp;lt;asp:Repeater runat=&lt;span style="color: #006080"&gt;"server"&lt;/span&gt; ID=&lt;span style="color: #006080"&gt;"ModelYearRepeater"&lt;/span&gt; 
            DataSource=&lt;span style="color: #006080"&gt;'&amp;lt;%# GetModelYears(Container.DataItem) %&amp;gt;'&lt;/span&gt;&amp;gt;
            
            &amp;lt;ItemTemplate&amp;gt;
                &amp;lt;%# Eval(&lt;span style="color: #006080"&gt;"Year"&lt;/span&gt;) %&amp;gt;&amp;amp;nbsp;
            &amp;lt;/ItemTemplate&amp;gt;
        &amp;lt;/asp:Repeater&amp;gt;
        
        &amp;lt;br /&amp;gt;
    &amp;lt;/ItemTemplate&amp;gt;
&amp;lt;/asp:Repeater&amp;gt;
&lt;/pre&gt;&lt;/div&gt;</description>
      <link>http://devcenter.auburnrandall.com/Default.aspx?type=post&amp;id=38</link>
      <pubDate>Thu, 08 Nov 2007 21:17:43 GMT</pubDate>
      <dc:creator>jeremy</dc:creator>
    </item>
    <item>
      <title>Binding complex logic in a Repeater Control</title>
      <description>&lt;p&gt;When using an ASP.NET&amp;nbsp;Repeater (or other databound controls for that matter), it is often desirable to display complex information that is calculated based on properties of the originating datasource. Using databinding syntax it is fairly easy to display the information that is defined in the data bound object. However, to display additional information, there are a&amp;nbsp;few patterns that could be followed.&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Databinding syntax could be added on the page to calculate&amp;nbsp;what to display.&amp;nbsp;This is useful for trivial scenarios, but will quickly become unreadable for complex calculations and will fragment you page source.&lt;/li&gt; &lt;li&gt;Override the ItemDataBound event for the Repeater and use FindControl to do the update. The drawback to this technique is that the control&amp;nbsp;ID must remain in sync between the page definition and the code behind. Code that contains a number of FindControl statements quickly becomes difficult to read.&lt;/li&gt; &lt;li&gt;Create a method in the page behind that performs the calculation for the databound instance. This will be the approach that will be followed.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;In the following example a repeater will be bound to a list of car objects. For each&amp;nbsp;item in this list an optional message will display indicating if the car is available.&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.auburnrandall.com/ImageServer.ashx?img=Tech/BindingcomplexlogictoaRepeater_D43A/image_1.png" atomicselection="true"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="124" alt="image" src="http://www.auburnrandall.com/ImageServer.ashx?img=Tech/BindingcomplexlogictoaRepeater_D43A/image_thumb_1.png" width="216" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;To represent the Car, the following class will be used.&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.auburnrandall.com/ImageServer.ashx?img=Tech/BindingcomplexlogictoaRepeater_D43A/image.png" atomicselection="true"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="170" alt="image" src="http://www.auburnrandall.com/ImageServer.ashx?img=Tech/BindingcomplexlogictoaRepeater_D43A/image_thumb.png" width="163" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;The collection that is bound to the repeater will be defined in the Page_Load event.&lt;/p&gt; &lt;div&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;protected&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; Page_Load(&lt;span style="color: #0000ff"&gt;object&lt;/span&gt; sender, EventArgs e)
{
    List&amp;lt;Car&amp;gt; cars = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; List&amp;lt;Car&amp;gt;();

    cars.Add(&lt;span style="color: #0000ff"&gt;new&lt;/span&gt; Car(&lt;span style="color: #006080"&gt;"Toyota"&lt;/span&gt;, &lt;span style="color: #006080"&gt;"Camry"&lt;/span&gt;));
    cars.Add(&lt;span style="color: #0000ff"&gt;new&lt;/span&gt; Car(&lt;span style="color: #006080"&gt;"Nissan"&lt;/span&gt;, &lt;span style="color: #006080"&gt;"Altima"&lt;/span&gt;));
    cars.Add(&lt;span style="color: #0000ff"&gt;new&lt;/span&gt; Car(&lt;span style="color: #006080"&gt;"Ford"&lt;/span&gt;, &lt;span style="color: #006080"&gt;"Mustang"&lt;/span&gt;));

    CarListRepeater.DataSource = cars;
    CarListRepeater.DataBind();
}
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;For the complex calculation, a method&amp;nbsp;will need to be defined in the code-behind for the page. This method&amp;nbsp;will accept the current databound instance as input. In our example, the method will perform a calculation that will determine if the Car instance is available.&lt;/p&gt;
&lt;div&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;protected&lt;/span&gt; &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; CheckAvailable(&lt;span style="color: #0000ff"&gt;object&lt;/span&gt; dataitem)
{
    Car car = dataitem &lt;span style="color: #0000ff"&gt;as&lt;/span&gt; Car;

    &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (car.Model == &lt;span style="color: #006080"&gt;"Altima"&lt;/span&gt;)
    {
        &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; &lt;span style="color: #006080"&gt;"This is available"&lt;/span&gt;;
    }

    &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; &lt;span style="color: #006080"&gt;""&lt;/span&gt;;
}
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;This method can be accessed within the Repeater using the data binding syntax. The current databound instance will be accessed through the Container.DataItem&amp;nbsp;property&amp;nbsp;available from&amp;nbsp;the Repeater. &lt;/p&gt;
&lt;div&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&amp;lt;asp:Repeater runat=&lt;span style="color: #006080"&gt;"server"&lt;/span&gt; ID=&lt;span style="color: #006080"&gt;"CarListRepeater"&lt;/span&gt;&amp;gt;
    &amp;lt;ItemTemplate&amp;gt;
        &amp;lt;%# Eval(&lt;span style="color: #006080"&gt;"Make"&lt;/span&gt;) %&amp;gt; &amp;lt;%# Eval(&lt;span style="color: #006080"&gt;"Model"&lt;/span&gt;) %&amp;gt; 
        &amp;lt;strong&amp;gt;&amp;lt;%# CheckAvailable(Container.DataItem) %&amp;gt;&amp;lt;/strong&amp;gt;&amp;lt;br /&amp;gt;
    &amp;lt;/ItemTemplate&amp;gt;
&amp;lt;/asp:Repeater&amp;gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&amp;nbsp;Using this form of data access is a useful item to be aware of when dealing with databound list controls. With it, the logic is kept off of the page source, the page source control definitions are kept out of the page-behind and the logic remains centralized. This all leads to much more manageable code.&lt;/p&gt;</description>
      <link>http://devcenter.auburnrandall.com/Default.aspx?type=post&amp;id=37</link>
      <pubDate>Wed, 07 Nov 2007 20:28:27 GMT</pubDate>
      <dc:creator>jeremy</dc:creator>
    </item>
    <item>
      <title>The Design in Software Development</title>
      <description>&lt;p&gt;When&amp;nbsp;developing software, we go through many iterations of how to get the "Design" just right. We start with an idea and break&amp;nbsp;this down into consumable units that we can easily develop. From this point, we&amp;nbsp;may have a full fledged specification&amp;nbsp;complete with UML diagrams and class definitions or&amp;nbsp;we may have a hand written note that sketches out the overall goal of the system.&lt;/p&gt; &lt;p&gt;Regardless, we start&amp;nbsp;out with some semblance of a Design through these supporting documents.&amp;nbsp;It's important to realize that these documents, although a good start, will not comprise the&amp;nbsp;actual design. The&amp;nbsp;Design of the software&amp;nbsp;is the source code. Since our&amp;nbsp;specification documents can (and will) become outdated, the source code is the &lt;em&gt;only&lt;/em&gt; reliable snapshot of the system that will be built.&lt;/p&gt; &lt;p&gt;To that end, we need to make sure that our source code is readable and discoverable enough to easily infer the purpose of the software. We cannot have elements of the system scattered haphazardly across several logical layers or partitions. We must make sure that the participants of the design (classes,&amp;nbsp;pages, objects...) are grouped and&amp;nbsp;named&amp;nbsp;in such a manner that&amp;nbsp;it is evident how they fit into the overall scheme.&lt;/p&gt; &lt;p&gt;We also must discipline ourselves to put sufficient thought into what goes into the design. In this role we become visionaries of how the system will be used in the future. We also must make sure that we can come back at a later point and redo elements of the system without causing massive disruption.&lt;/p&gt; &lt;p&gt;Quality software and quality design go hand in hand. When approached with the task of developing a system, take the time up front to at least think about how the pieces will fit together. I'm not advocating over-analyzing things, as this leads to other problems, but make sure that you are positioning yourself in a situation where you'll be able to easily adapt to new constraints.&lt;/p&gt;</description>
      <link>http://devcenter.auburnrandall.com/Default.aspx?type=post&amp;id=36</link>
      <pubDate>Thu, 01 Nov 2007 17:36:20 GMT</pubDate>
      <dc:creator>jeremy</dc:creator>
    </item>
    <item>
      <title>When errors lose their value</title>
      <description>&lt;p&gt;I have a 2006 Toyota 4Runner that I absolutely love to drive. Unfortunately, the other day an indicator started to show on my dashboard. After digging through the manual for a few minutes, I found out that this was an alert for low tire pressure. Since this error light is generic for any of my four tires, I promptly checked the pressure in all four tires. What do you know - everything was fine. After a bit of research I found out that&amp;nbsp;even the spare&amp;nbsp;can trigger this indicator. It's probably that tire that's giving me the problem.&lt;/p&gt; &lt;p&gt;Since I really don't have the ability currently to drop the spare and check the pressure, I've been riding around with the&amp;nbsp;warning light on. Essentially, this alert system has been rendered useless because I cannot pinpoint where the problem is occurring. This system would have been much more useful if:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;I had known immediately what the error was. I should not have had to spend any time looking through the manual to match the light to an error.&lt;/li&gt; &lt;li&gt;I should have been able to know exactly which tire was low and by how much.&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;In other words, the system should have told me &lt;em&gt;what&lt;/em&gt; the error was, and&lt;em&gt; how&lt;/em&gt; to fix it.&lt;/p&gt; &lt;h3&gt;How does this relate to programming?&lt;/h3&gt; &lt;p&gt;This experience has&amp;nbsp;provided me with some insight into how we, as software developers, need to keep in mind our end-users when they encounter invalid conditions in our programs. If we give them too much information that is too technical, they will likely ignore&amp;nbsp;the error&amp;nbsp;or worse, ignore our application. If we give them too little information, we are not enabling them to fix, or take part in fixing, the issue.&lt;/p&gt; &lt;p&gt;When developing applications, error reporting should not be an afterthought. How our applications behave during error conditions, and the presentation to the user is critical to software usability.&lt;/p&gt; &lt;p&gt;When we do report errors, and where it is appropriate, give the user the ability to fix the condition. Don't leave them in the dark. Don't force them to do research on where to go for resolution. Provide it to them in an easy to access format.&lt;/p&gt;</description>
      <link>http://devcenter.auburnrandall.com/Default.aspx?type=post&amp;id=35</link>
      <pubDate>Tue, 30 Oct 2007 17:32:59 GMT</pubDate>
      <dc:creator>jeremy</dc:creator>
    </item>
    <item>
      <title>Be wary of the Drop Down List</title>
      <description>&lt;p&gt;Within ASP.NET, the &lt;a href="http://msdn2.microsoft.com/en-us/library/system.web.ui.webcontrols.dropdownlist.aspx"&gt;DropDownList&lt;/a&gt; control is used to prompt a user to select an item from a list of choices. When used properly,&amp;nbsp;it can be an effective&amp;nbsp;tool&amp;nbsp;to retrieve a&amp;nbsp;user's&amp;nbsp;selection. When used improperly by having too many items in the list, they will hinder the user from making a selection, while unnecessarily bloating the page source. &lt;/p&gt; &lt;p&gt;To demonstrate the impact of page size, we'll implement a page that has 2000 items within the list. The rendered portion of the page is shown in the following example. The page is fairly responsive when communicating with the server.&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.auburnrandall.com/ImageServer.ashx?img=Tech/BewaryoftheDropDownList_9CD0/image.png" atomicselection="true"&gt;&lt;img height="141" alt="image" src="http://www.auburnrandall.com/ImageServer.ashx?img=Tech/BewaryoftheDropDownList_9CD0/image_thumb.png" width="199"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;However, when we view the page statistics within &lt;a href="http://www.fiddlertool.com/fiddler/"&gt;Fiddler&lt;/a&gt;, we see that the size of the web page is quite large.&amp;nbsp;On further examination,&amp;nbsp;a major contributor to the page size is View State.&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.auburnrandall.com/ImageServer.ashx?img=Tech/BewaryoftheDropDownList_9CD0/image_1.png" atomicselection="true"&gt;&lt;img height="69" alt="image" src="http://www.auburnrandall.com/ImageServer.ashx?img=Tech/BewaryoftheDropDownList_9CD0/image_thumb_1.png" width="525"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;It's important to realize when working with controls what the impact to View State will be. In this case, all of the data that is bound to the drop down list is added to view state. If View State is disabled for this control, the size of the page decreases substantially, but we still have a fairly hefty page.&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.auburnrandall.com/ImageServer.ashx?img=Tech/BewaryoftheDropDownList_9CD0/image_2.png" atomicselection="true"&gt;&lt;img height="66" alt="image" src="http://www.auburnrandall.com/ImageServer.ashx?img=Tech/BewaryoftheDropDownList_9CD0/image_thumb_2.png" width="510"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;On further examination of the page, there is quite a bit of data written to handle Page Event Validation. A snippet of this code follows.&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.auburnrandall.com/ImageServer.ashx?img=Tech/BewaryoftheDropDownList_9CD0/image_3.png" atomicselection="true"&gt;&lt;img height="187" alt="image" src="http://www.auburnrandall.com/ImageServer.ashx?img=Tech/BewaryoftheDropDownList_9CD0/image_thumb_3.png" width="437"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;If we disable Page Event&amp;nbsp;Validation - &lt;em&gt;and I'm not saying to do this&lt;/em&gt; - the page size is reduced to a more manageable (but still fairly large) size.&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.auburnrandall.com/ImageServer.ashx?img=Tech/BewaryoftheDropDownList_9CD0/image_4.png" atomicselection="true"&gt;&lt;img height="66" alt="image" src="http://www.auburnrandall.com/ImageServer.ashx?img=Tech/BewaryoftheDropDownList_9CD0/image_thumb_4.png" width="516"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;So, by writing essentially pure HTML (and forgoing any ASP.NET features), we have reduced the page to just under 100K. This page size may be fine for some scenarios, but we really haven't addressed the final (and potentially largest) question.&amp;nbsp;&lt;strong&gt;How usable is a large drop down list?&lt;/strong&gt; There seems to be a consensus that a drop down list that exceeds 20-30 items quickly starts to become unusable.&lt;/p&gt; &lt;p&gt;So, with that criteria what is the size of the page with all the features enabled?&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.auburnrandall.com/ImageServer.ashx?img=Tech/BewaryoftheDropDownList_9CD0/image_5.png" atomicselection="true"&gt;&lt;img height="61" alt="image" src="http://www.auburnrandall.com/ImageServer.ashx?img=Tech/BewaryoftheDropDownList_9CD0/image_thumb_5.png" width="505"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;The Conclusion? When used properly, and by that I mean a selection of 20-30 items, the Drop Down List is a perfectly constructed control. When abused, your page will start to suffer performance penalties.&lt;/p&gt;</description>
      <link>http://devcenter.auburnrandall.com/Default.aspx?type=post&amp;id=34</link>
      <pubDate>Wed, 24 Oct 2007 15:09:17 GMT</pubDate>
      <dc:creator>jeremy</dc:creator>
    </item>
    <item>
      <title>The coolest .NET method name is...</title>
      <description>&lt;h3&gt;RegisterExpandoAttribute&lt;/h3&gt; &lt;p&gt;According to &lt;a href="http://msdn2.microsoft.com/en-us/library/system.web.ui.clientscriptmanager.registerexpandoattribute.aspx" target="_blank"&gt;MSDN&lt;/a&gt;&amp;nbsp;documentation, this ClientScriptManager method is used to "Register a name/value pair as a custom (expando) attribute of the specified control". Now, I don't know about you, but my eighth grade teacher would cringe at the above definition. I pretty much knew from the name of the method that this would "Register an Expando Attribute". What I&amp;nbsp;really want to know is: What the heck is an Expando attribute, and why would I ever want to use one?&lt;/p&gt; &lt;h3&gt;Why is this important?&lt;/h3&gt; &lt;p&gt;There are often times when server-side information about a specific control must be conveyed client-side for consumption within javascript. An example may be that there is a&amp;nbsp;list of Employee names where the first initial and last name are displayed. As each name is selected, an alert is shown that displays the complete name.&lt;/p&gt; &lt;p&gt;&lt;img style="border-top-width: 1px; border-left-width: 1px; border-bottom-width: 1px; border-right-width: 1px" height="144" alt="image" src="http://www.auburnrandall.com/ImageServer.ashx?img=Tech/Thecoolest.NETmethodnameis_DA14/image_3.png" width="304"&gt; &lt;/p&gt; &lt;h3&gt;What is a custom attribute?&lt;/h3&gt; &lt;p&gt;The trick with the above (admittedly contrived) example is that each linked name must be associated&amp;nbsp;with the full name of the employee. This can be easily done by extending the standard HTML anchor tag with a custom (&lt;em&gt;expando&lt;/em&gt;) attribute. In our example, the custom attribute &lt;em&gt;fullname&lt;/em&gt; will contain the name of the employee.&lt;/p&gt; &lt;div&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;a&lt;/span&gt; &lt;span style="color: #ff0000"&gt;onclick&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="ShowFullName(this);"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;id&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="Employee1"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;href&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="#"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;fullname&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="James Smith"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;J. Smith&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;a&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;br&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;
&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;a&lt;/span&gt; &lt;span style="color: #ff0000"&gt;onclick&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="ShowFullName(this);"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;id&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="Employee2"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;href&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="#"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;fullname&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="Brenda Jones"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;B. Jones&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;a&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;br&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;
&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;a&lt;/span&gt; &lt;span style="color: #ff0000"&gt;onclick&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="ShowFullName(this);"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;id&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="Employee3"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;href&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="#"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;fullname&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="Dana Sparks"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;D. Sparks&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;a&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Now that the full&amp;nbsp;name of each employee&amp;nbsp;has been associated with the anchor, javascript can be used to access this information. &amp;nbsp;The &lt;em&gt;ShowFullName&lt;/em&gt; function will simply access the custom attribute, and display an alert with the value.&lt;/p&gt;
&lt;div&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;function&lt;/span&gt; ShowFullName(button)
{
    alert(button.getAttribute(&lt;span style="color: #006080"&gt;"fullname"&lt;/span&gt;));
}&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;How does this work with ASP.NET?&lt;/h3&gt;
&lt;p&gt;At this point, we have successfully registered a name/value (&lt;em&gt;fullname&lt;/em&gt;/&lt;em&gt;fullnamevalue&lt;/em&gt;)&lt;em&gt; &lt;/em&gt;pair as an&amp;nbsp;expando&amp;nbsp;(custom) attribute to an HTML control.&amp;nbsp;A couple of issues remain with this approach.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;The custom attribute has been added to a simple HTML control. We really need to it to be added to an ASP.NET control.&lt;/li&gt;
&lt;li&gt;The rendered HTML contains non-standard attributes&amp;nbsp;that&amp;nbsp;is&amp;nbsp;not XHTML compliant.&lt;/li&gt;&lt;/ol&gt;
&lt;p&gt;Fortunately, the RegisterExpandoAttribute method will take care of both of these issues. To address the first item, we'll rewrite our page to use an ASP.NET LinkButton.&lt;/p&gt;
&lt;div&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;asp:LinkButton&lt;/span&gt; &lt;span style="color: #ff0000"&gt;ID&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="Employee1"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;runat&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="server"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Text&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="J. Smith"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;OnClientClick&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="ShowFullName(this)"&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;br&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;
&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;asp:LinkButton&lt;/span&gt; &lt;span style="color: #ff0000"&gt;ID&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="Employee2"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;runat&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="server"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Text&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="B. Jones"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;OnClientClick&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="ShowFullName(this)"&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;br&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;
&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;asp:LinkButton&lt;/span&gt; &lt;span style="color: #ff0000"&gt;ID&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="Employee3"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;runat&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="server"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Text&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="D. Sparks"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;OnClientClick&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="ShowFullName(this)"&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Trying to add the "fullname" attribute to each linkbutton's definition will result in a compile error. To remedy this, the fullname attribute and value will be added in the page's code-behind using the RegisterExpandoAttribute method.&lt;/p&gt;
&lt;div&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;protected&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; Page_Load(&lt;span style="color: #0000ff"&gt;object&lt;/span&gt; sender, EventArgs e)
{
    ClientScript.RegisterExpandoAttribute(&lt;span style="color: #006080"&gt;"Employee1"&lt;/span&gt;, &lt;span style="color: #006080"&gt;"fullname"&lt;/span&gt;, &lt;span style="color: #006080"&gt;"James Smith"&lt;/span&gt;);
    ClientScript.RegisterExpandoAttribute(&lt;span style="color: #006080"&gt;"Employee2"&lt;/span&gt;, &lt;span style="color: #006080"&gt;"fullname"&lt;/span&gt;, &lt;span style="color: #006080"&gt;"Brenda Jones"&lt;/span&gt;);
    ClientScript.RegisterExpandoAttribute(&lt;span style="color: #006080"&gt;"Employee3"&lt;/span&gt;, &lt;span style="color: #006080"&gt;"fullname"&lt;/span&gt;, &lt;span style="color: #006080"&gt;"Dana Sparks"&lt;/span&gt;);
}
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;When the page is&amp;nbsp;displayed in the browser, the selection of each employee displays the alert box just as before. However, there is one crucial difference. In the rendered HTML, the custom attribute is not defined in the anchor tags.&lt;/p&gt;
&lt;div&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;a&lt;/span&gt; &lt;span style="color: #ff0000"&gt;onclick&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="ShowFullName(this);"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;id&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="Employee1"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;href&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="javascript:__doPostBack('Employee1','')"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;J. Smith&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;a&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;br&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;
&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;a&lt;/span&gt; &lt;span style="color: #ff0000"&gt;onclick&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="ShowFullName(this);"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;id&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="Employee2"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;href&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="javascript:__doPostBack('Employee2','')"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;B. Jones&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;a&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;br&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;
&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;a&lt;/span&gt; &lt;span style="color: #ff0000"&gt;onclick&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="ShowFullName(this);"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;id&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="Employee3"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;href&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="javascript:__doPostBack('Employee3','')"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;D. Sparks&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;a&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Rather, the value for the custom attribute is set using javascript that is automatically generated within ASP.NET.&lt;/p&gt;
&lt;div&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;var&lt;/span&gt; Employee1 = document.all ? document.all[&lt;span style="color: #006080"&gt;"Employee1"&lt;/span&gt;] : document.getElementById(&lt;span style="color: #006080"&gt;"Employee1"&lt;/span&gt;);
Employee1.fullname = &lt;span style="color: #006080"&gt;"James Smith"&lt;/span&gt;;
&lt;span style="color: #0000ff"&gt;var&lt;/span&gt; Employee2 = document.all ? document.all[&lt;span style="color: #006080"&gt;"Employee2"&lt;/span&gt;] : document.getElementById(&lt;span style="color: #006080"&gt;"Employee2"&lt;/span&gt;);
Employee2.fullname = &lt;span style="color: #006080"&gt;"Brenda Jones"&lt;/span&gt;;
&lt;span style="color: #0000ff"&gt;var&lt;/span&gt; Employee3 = document.all ? document.all[&lt;span style="color: #006080"&gt;"Employee3"&lt;/span&gt;] : document.getElementById(&lt;span style="color: #006080"&gt;"Employee3"&lt;/span&gt;);
Employee3.fullname = &lt;span style="color: #006080"&gt;"Dana Sparks"&lt;/span&gt;;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Our page&amp;nbsp;now takes full advantage of using the custom HTML attributes&amp;nbsp;while remaining&amp;nbsp;XHTML compliant.&lt;/p&gt;
&lt;h3&gt;Summary&lt;/h3&gt;
&lt;p&gt;When you find yourself in a situation where you need to use javascript on the client to process some server-side information&amp;nbsp;related to&amp;nbsp;a control, custom HTML attributes can be useful to pass the data to the client. To ensure that this information is passed in a standards compliant format, the RegisterExpandoAttribute method should be used.&lt;/p&gt;</description>
      <link>http://devcenter.auburnrandall.com/Default.aspx?type=post&amp;id=33</link>
      <pubDate>Mon, 17 Sep 2007 19:30:31 GMT</pubDate>
      <dc:creator>jeremy</dc:creator>
    </item>
    <item>
      <title>Undesired SPAN in templated control container</title>
      <description>&lt;p&gt;When developing a templated web control, the container that the template is instantiated&amp;nbsp;may render a SPAN tag around the templated content. &lt;/p&gt; &lt;p&gt;In the following control, the Render method for the LayoutTemplate container has not been overridden.&lt;/p&gt; &lt;div&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;cc:DataLayoutControl&lt;/span&gt; &lt;span style="color: #ff0000"&gt;runat&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="server"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;ID&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="DataLayoutControl1"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;LayoutTemplate&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
        ...This is the test...
    &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;LayoutTemplate&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;cc:DataLayoutControl&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;This produces the following HTML&lt;/p&gt;
&lt;div&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;div&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;span&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
  ...This is the test...
  &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;span&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;div&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Notice the SPAN tag (which seemingly came from nowhere) surrounding the templated text. This is&amp;nbsp;due to default behavior of the WebControl TagKey property&amp;nbsp;and the RenderBeginTag method.&lt;/p&gt;
&lt;h3&gt;TagKey&lt;/h3&gt;
&lt;p&gt;Paraphrasing from MSDN: "TagKey is used as the HTML tag that corresponds to the custom control." Typically in a custom control, this property is overridden and the specific HTML tag is provided. For example:&lt;/p&gt;
&lt;div&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;protected&lt;/span&gt; &lt;span style="color: #0000ff"&gt;override&lt;/span&gt; HtmlTextWriterTag TagKey
{
    get
    {
        &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; HtmlTextWriterTag.P;
    }
}&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;When this property is not specifically set, a SPAN is used as the default when the WebControl instance is created using the parameter-less &lt;a href="http://msdn2.microsoft.com/en-us/library/2xad8ys8.aspx" target="_blank"&gt;constructor&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;RenderBeginTag&lt;/h3&gt;
&lt;p&gt;In some cases,&amp;nbsp;it may not be desirable to have&amp;nbsp;a tag&amp;nbsp;surrounding the&amp;nbsp;HTML rendered by the template container control. Since TagKey is a enumeration of HtmlTextWriterTag, there is really no built-in mechanism to avoid rendering the surrounding tags. When TagKey is set to HtmlTextWriterTag.Unknown, the default SPAN will be used. This is&amp;nbsp;proven by examining the source for the .NET framework (thanks go to the fantastic &lt;a href="http://www.aisto.com/roeder/dotnet/" target="_blank"&gt;Reflector&lt;/a&gt;&amp;nbsp;tool). The following example shows the WebControl.RenderBeginTag method.&lt;/p&gt;
&lt;div&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;virtual&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; RenderBeginTag(HtmlTextWriter writer)
{
    &lt;span style="color: #0000ff"&gt;this&lt;/span&gt;.AddAttributesToRender(writer);
    HtmlTextWriterTag tagKey = &lt;span style="color: #0000ff"&gt;this&lt;/span&gt;.TagKey;
    &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (tagKey != HtmlTextWriterTag.Unknown)
    {
        writer.RenderBeginTag(tagKey);
    }
    &lt;span style="color: #0000ff"&gt;else&lt;/span&gt;
    {
        writer.RenderBeginTag(&lt;span style="color: #0000ff"&gt;this&lt;/span&gt;.TagName);
    }
}&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;Solution&lt;/h3&gt;
&lt;p&gt;To prevent the surrounding tag, the templated container control must override RenderBeginTag and RenderEndTag without any implementation for either of the methods.&lt;/p&gt;
&lt;div&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;override&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; RenderBeginTag(HtmlTextWriter writer)
{
}

&lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;override&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; RenderEndTag(HtmlTextWriter writer)
{
}&lt;/pre&gt;&lt;/div&gt;</description>
      <link>http://devcenter.auburnrandall.com/Default.aspx?type=post&amp;id=32</link>
      <pubDate>Fri, 07 Sep 2007 20:16:27 GMT</pubDate>
      <dc:creator>jeremy</dc:creator>
    </item>
    <item>
      <title>Draw border on selected row in a GridView</title>
      <description>&lt;p&gt;When a GridView is rendered, an HTML table is created. Each row of the table contains information describing an instance&amp;nbsp;of the data source. As each row is selected, we want to display a single pixel border around the selected row. &lt;/p&gt; &lt;p&gt;There is a property of the GridView: &lt;em&gt;SelectedRowStyle&lt;/em&gt;&amp;nbsp;that will be used to apply a specific style to the selected row. The CssClass property will be used to style the rendered TR element for the selected row.&lt;/p&gt; &lt;p&gt;It is important to know that&amp;nbsp;the style will only be applied to the TR element&amp;nbsp;representing the selected row. To correctly have a border around the row, we need to apply styles to the individual cells within the row. Since these&amp;nbsp;cells are children of the row, it will be trivial to style them using CSS.&lt;/p&gt; &lt;p&gt;Knowing this, let's create a sample table that will be used to simulate how the GridView&amp;nbsp;will be&amp;nbsp;rendered in the browser. The following example contains a table with three rows and&amp;nbsp;three columns per row. The second row will be the selected row.&lt;/p&gt; &lt;h3&gt;HTML&lt;/h3&gt; &lt;div&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;table&lt;/span&gt; &lt;span style="color: #ff0000"&gt;class&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="exampletable"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;unselectable&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="on"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;tbody&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;tr&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
   &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;td&lt;/span&gt; &lt;span style="color: #ff0000"&gt;class&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="exampletableleft"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;Row 1 Col 1&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;td&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
   &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;td&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;Row 1 Col 2&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;td&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
   &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;td&lt;/span&gt; &lt;span style="color: #ff0000"&gt;class&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="exampletableright"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;Row 1 Col 3&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;td&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;tr&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;tr&lt;/span&gt; &lt;span style="color: #ff0000"&gt;class&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="selectedrow"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
   &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;td&lt;/span&gt; &lt;span style="color: #ff0000"&gt;class&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="exampletableleft"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;Row 2 Col 1&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;td&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
   &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;td&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;Row 2 Col 2&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;td&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
   &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;td&lt;/span&gt; &lt;span style="color: #ff0000"&gt;class&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="exampletableright"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;Row 2 Col 3&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;td&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;tr&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;tr&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
   &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;td&lt;/span&gt; &lt;span style="color: #ff0000"&gt;class&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="exampletableleft"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;Row 3 Col 1&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;td&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
   &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;td&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;Row 3 Col 2&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;td&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
   &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;td&lt;/span&gt; &lt;span style="color: #ff0000"&gt;class&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="exampletableright"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;Row 3 Col 3&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;td&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;tr&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;tbody&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;table&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;CSS&lt;/h3&gt;
&lt;div&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #cc6633"&gt;.exampletable&lt;/span&gt; { &lt;span style="color: #0000ff"&gt;border-collapse&lt;/span&gt;: &lt;span style="color: #006080"&gt;collapse;&lt;/span&gt; }
&lt;span style="color: #cc6633"&gt;.selectedrow&lt;/span&gt; &lt;span style="color: #0000ff"&gt;td&lt;/span&gt; { &lt;span style="color: #0000ff"&gt;border&lt;/span&gt;-&lt;span style="color: #0000ff"&gt;top&lt;/span&gt;: &lt;span style="color: #006080"&gt;solid 1px #5d9ccf;&lt;/span&gt; &lt;span style="color: #0000ff"&gt;border&lt;/span&gt;-&lt;span style="color: #0000ff"&gt;bottom&lt;/span&gt;: &lt;span style="color: #006080"&gt;solid 1px #5d9ccf;&lt;/span&gt; }
&lt;span style="color: #cc6633"&gt;.selectedrow&lt;/span&gt; &lt;span style="color: #0000ff"&gt;td&lt;/span&gt;&lt;span style="color: #cc6633"&gt;.exampletableleft&lt;/span&gt; { &lt;span style="color: #0000ff"&gt;border&lt;/span&gt;-&lt;span style="color: #0000ff"&gt;left&lt;/span&gt;: &lt;span style="color: #006080"&gt;solid 1px #5d9ccf;&lt;/span&gt; }
&lt;span style="color: #cc6633"&gt;.selectedrow&lt;/span&gt; &lt;span style="color: #0000ff"&gt;td&lt;/span&gt;&lt;span style="color: #cc6633"&gt;.exampletableright&lt;/span&gt; { &lt;span style="color: #0000ff"&gt;border&lt;/span&gt;-&lt;span style="color: #0000ff"&gt;right&lt;/span&gt;: &lt;span style="color: #006080"&gt;solid 1px #5d9ccf;&lt;/span&gt; }&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;For the selected row, the TR element contains the class "selectedrow". Each child TD element within this row will&amp;nbsp;have the border-top and border-bottom styles.&lt;/p&gt;
&lt;p&gt;The leftmost and rightmost cells are marked with the "exampletableleft" and "exampletableright" classes which will translate to the appropriate border-left and border-right style. Because of the &lt;em&gt;.selectedrow&lt;/em&gt; limitation within the style definition,&amp;nbsp;these styles will only be applied when these TD elements fall within the selected TR.&lt;/p&gt;
&lt;p&gt;Notice that "class" attributes are used rather than the "id" attribute. This has been done on purpose to closely match the HTML that would be rendered from a GridView. It is very simple to set the CSS class of rendered elements, but it is really not feasible to try to set the "id" of the rendered elements.&lt;/p&gt;
&lt;h3&gt;Rendered Table&lt;/h3&gt;
&lt;p&gt;
&lt;style&gt;
.exampletable { border-collapse: collapse; }
.selectedrow td { border-top: solid 1px #5d9ccf; border-bottom: solid 1px #5d9ccf; }
.selectedrow td.exampletableleft { border-left: solid 1px #5d9ccf; }
.selectedrow td.exampletableright { border-right: solid 1px #5d9ccf; }
&lt;/style&gt;

&lt;table class="exampletable" unselectable="on"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="exampletableleft"&gt;Row 1 Col 1&lt;/td&gt;
&lt;td&gt;Row 1 Col 2&lt;/td&gt;
&lt;td class="exampletableright"&gt;Row 1 Col 3&lt;/td&gt;&lt;/tr&gt;
&lt;tr class="selectedrow"&gt;
&lt;td class="exampletableleft"&gt;Row 2 Col 1&lt;/td&gt;
&lt;td&gt;Row 2 Col 2&lt;/td&gt;
&lt;td class="exampletableright"&gt;Row 2 Col 3&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td class="exampletableleft"&gt;Row 3 Col 1&lt;/td&gt;
&lt;td&gt;Row 3 Col 2&lt;/td&gt;
&lt;td class="exampletableright"&gt;Row 3 Col 3&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/p&gt;
&lt;h3&gt;Implementation&lt;/h3&gt;
&lt;p&gt;To accomplish this for a GridView:&lt;/p&gt;
&lt;p&gt;
&lt;ol&gt;
&lt;li&gt;Set CssClass for the GridView as "exampletable"&lt;/li&gt;
&lt;li&gt;Set the SelectedRowStyle CssClass property as "selectedrow"&lt;/li&gt;
&lt;li&gt;Set the ItemStyle-CssClass property on the leftmost and rightmost columns as "exampletableleft" and "exampletableright"&lt;/li&gt;&lt;/ol&gt;&lt;/p&gt;</description>
      <link>http://devcenter.auburnrandall.com/Default.aspx?type=post&amp;id=31</link>
      <pubDate>Tue, 04 Sep 2007 20:31:04 GMT</pubDate>
      <dc:creator>jeremy</dc:creator>
    </item>
    <item>
      <title>Create Games in Silverlight</title>
      <description>&lt;p&gt;Bill Reiss is authoring a series of articles that provide instructions on how to build a game in Silverlight 1.1.&lt;/p&gt; &lt;p&gt;&lt;a title="http://silverlightrocks.com/community/blogs/silverlight_games_101/default.aspx" href="http://silverlightrocks.com/community/blogs/silverlight_games_101/default.aspx"&gt;http://silverlightrocks.com/community/blogs/silverlight_games_101/default.aspx&lt;/a&gt;&lt;/p&gt;</description>
      <link>http://devcenter.auburnrandall.com/Default.aspx?type=post&amp;id=30</link>
      <pubDate>Thu, 30 Aug 2007 18:54:34 GMT</pubDate>
      <dc:creator>jeremy</dc:creator>
    </item>
    <item>
      <title>Textbox size attribute</title>
      <description>&lt;p&gt;To set the &lt;strong&gt;size&lt;/strong&gt; attribute for an input field (textbox) in ASP.NET, set the &lt;strong&gt;Columns&lt;/strong&gt; property of the TextBox.&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.auburnrandall.com/ImageServer.ashx?img=Tech/Textboxsizeattribute_8599/qh1_1.jpg" atomicselection="true"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="326" alt="qh1_1" src="http://www.auburnrandall.com/ImageServer.ashx?img=Tech/Textboxsizeattribute_8599/qh1_1_thumb.jpg" width="483" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;&lt;a href="http://www.auburnrandall.com/ImageServer.ashx?img=Tech/Textboxsizeattribute_8599/qh1_2.jpg" atomicselection="true"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="14" alt="qh1_2" src="http://www.auburnrandall.com/ImageServer.ashx?img=Tech/Textboxsizeattribute_8599/qh1_2_thumb.jpg" width="609" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Note that this will only show when the &lt;strong&gt;TextMode&lt;/strong&gt; property is set to &lt;strong&gt;SingleLine&lt;/strong&gt;. When this property is set to &lt;strong&gt;MultiLine&lt;/strong&gt;, the &lt;strong&gt;Columns&lt;/strong&gt; property will render as &lt;strong&gt;cols&lt;/strong&gt; and the &lt;strong&gt;Rows&lt;/strong&gt; property will render as &lt;strong&gt;rows&lt;/strong&gt;.&lt;/p&gt;</description>
      <link>http://devcenter.auburnrandall.com/Default.aspx?type=post&amp;id=29</link>
      <pubDate>Thu, 23 Aug 2007 13:30:07 GMT</pubDate>
      <dc:creator>jeremy</dc:creator>
    </item>
    <item>
      <title>This is a test post</title>
      <description>&lt;p&gt;This is a test post to the Technology blog&lt;/p&gt;</description>
      <link>http://devcenter.auburnrandall.com/Default.aspx?type=post&amp;id=27</link>
      <pubDate>Fri, 22 Jun 2007 13:14:46 GMT</pubDate>
      <dc:creator>jeremy</dc:creator>
    </item>
  </channel>
</rss>
