﻿<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:blogChannel="http://backend.userland.com/blogChannelModule" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#">
  <channel>
    <title>Eamon Barker's eb.NET</title>
    <description>Not quite vb.NET, but getting close!</description>
    <link>http://www.eb.net.nz/blog/</link>
    <docs>http://www.rssboard.org/rss-specification</docs>
    <generator>BlogEngine.NET 1.4.5.0</generator>
    <language>en-AU</language>
    <blogChannel:blogRoll>http://www.eb.net.nz/blog/opml.axd</blogChannel:blogRoll>
    <blogChannel:blink>http://www.dotnetblogengine.net/syndication.axd</blogChannel:blink>
    <dc:creator>Eamon Barker</dc:creator>
    <dc:title>Eamon Barker's eb.NET</dc:title>
    <geo:lat>-27.384170</geo:lat>
    <geo:long>153.117500</geo:long>
    <item>
      <title>Development Tools I use Everyday</title>
      <description>&amp;nbsp; &lt;p&gt;The topic at last nights local .NET User Group was "Tools I can’t live without". &lt;a title="Joel's Blog" href="http://meikleprogramming.com/blog/" target="_blank"&gt;Joel Meikle&lt;/a&gt; (from &lt;a title="Meikle Programming's Home Page" href="http://meikleprogramming.com/main/" target="_blank"&gt;Meikle Programming&lt;/a&gt;) had a massive list of tools... I use most of&amp;nbsp; them and the ones I don't use I will be looking into. Below is a list of tools I can't do without. This table below doesn't include any of the SharePoint &lt;a title="SharePoint Development Tools" href="http://eb.net.nz/blog/post.aspx?id=eeb23678-0491-4835-93c7-19161b22cc9e" target="_blank"&gt;Development Tools&lt;/a&gt; or &lt;a title="SharePoint Administration Tools" href="http://eb.net.nz/blog/post.aspx?id=8fd92944-d244-4ffe-a322-3bc568696246" target="_blank"&gt;Administration Tools&lt;/a&gt; I previously blogged about. NOTE: These tools are in no particular order!&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;table border="1" cellspacing="0" cellpadding="2" width="75%"&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td valign="top" width="180"&gt;&lt;strong&gt;Tool Name&lt;/strong&gt;&lt;/td&gt; &lt;td valign="top" width="435"&gt;&lt;strong&gt;Description&lt;/strong&gt;&lt;/td&gt; &lt;td valign="top" width="139"&gt;&lt;strong&gt;Category&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="182"&gt;&lt;a title="Refactor!&amp;trade; for Visual Basic&amp;reg; .NET 2008 and 2005" href="http://www.devexpress.com/Products/Visual_Studio_Add-in/VBRefactor/" target="_blank"&gt;Refactor&lt;/a&gt;&lt;/td&gt; &lt;td valign="top" width="432"&gt;Code refactoring is the process of changing a computer program's code to make it amenable to change, improve its readability, or simplify its structure, while preserving its existing functionality&lt;a title="Code refactoring on Wikipedia" href="http://en.wikipedia.org/wiki/Refactoring" target="_blank"&gt;...&lt;/a&gt;&lt;/td&gt; &lt;td valign="top" width="139"&gt;Visual Studio Plug-in, Code Analysis &amp;amp; Improvement&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="183"&gt;&lt;a title=".NET Reflector" href="http://www.red-gate.com/products/reflector/" target="_blank"&gt;Lutz Reflector&lt;/a&gt;&lt;/td&gt; &lt;td valign="top" width="430"&gt;.NET Reflector enables you to easily view, navigate, and search through the class hierarchies of .NET assemblies even if you don't have the code for them. With it, you can decompile and analyse .NET assemblies in C#, Visual Basic and IL&lt;a title=".NET Reflector on Wikipedia" href="http://en.wikipedia.org/wiki/.NET_Reflector" target="_blank"&gt;...&lt;/a&gt;&lt;/td&gt; &lt;td valign="top" width="139"&gt;Code Analysis &amp;amp; Improvement&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="184"&gt;&lt;a title="Key Jedi" href="http://files.osherove.com/downloads/keyjedi.zip" target="_blank"&gt;Key Jedi&lt;/a&gt;&lt;/td&gt; &lt;td valign="top" width="429"&gt;Key Jedi allows learning and training to use keyboard shortcuts. It can be used in presentations, screencasts and videos, as well as when working with someone else on the same machine to teach new shortcuts. It shows a visual list of shortcuts as you type them, no matter what application you work in. It is free, simple and quick to use&lt;a title="Roy Osherove's Blog" href="http://weblogs.asp.net/rosherove/archive/2007/06/03/train-to-be-a-keyboard-master-with-keyboard-jedi.aspx" target="_blank"&gt;...&lt;/a&gt;&lt;/td&gt; &lt;td valign="top" width="139"&gt;Productivity Improvement&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="184"&gt;&lt;a title="Paint .NET Download Page" href="http://www.getpaint.net/download.html" target="_blank"&gt;Paint.NET&lt;/a&gt;&lt;/td&gt; &lt;td valign="top" width="428"&gt; &lt;p&gt;Paint.NET is an open source, raster graphics editing program for Windows, developed on the .NET Framework. Originally created as a Washington State University student project, Paint.NET has evolved from a simple replacement for the Microsoft Paint program, which is included with Windows, into a powerful editor with support for layers, blending, transparency, and plug-ins. It is often used as a free alternative to Adobe Photoshop. It is available under the MIT License&lt;a title="Paint.NET on Wikipedia" href="http://en.wikipedia.org/wiki/Paint.NET" target="_blank"&gt;...&lt;/a&gt;&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="139"&gt;Image Manipulation &amp;amp; Design&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="184"&gt;&lt;a title="Download LINQ Pad" href="http://www.linqpadupdates.net/LINQPad.exe" target="_blank"&gt;LINQ Pad&lt;/a&gt;&lt;/td&gt; &lt;td valign="top" width="428"&gt; &lt;p&gt;LINQPad is also a great way to learn LINQ: it comes preloaded with 200 examples from my book, C# 3.0 in a Nutshell.&amp;nbsp; There's no better way to experience the coolness of LINQ and functional programming.  &lt;p&gt;And LINQPad is more than just a LINQ query tool: it's a code snippet IDE. Instantly execute any C# 3 or VB 9 expression or statement block!&lt;a title="LINQ Pad Home Page" href="http://www.linqpad.net/" target="_blank"&gt;...&lt;/a&gt;&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="139"&gt;Code Analysis &amp;amp; Improvement&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="184"&gt;&lt;a title="Download NotePad++" href="http://notepad-plus.sourceforge.net/uk/download.php" target="_blank"&gt;NotePad++&lt;/a&gt;&lt;/td&gt; &lt;td valign="top" width="428"&gt; &lt;p&gt;&lt;strong&gt;Notepad++&lt;/strong&gt; is a free (as in "free speech" and also as in "free beer") source code editor and Notepad replacement that supports several languages. It runs in the MS Windows environment&lt;a title="NotePad++ Home page" href="http://notepad-plus.sourceforge.net/uk/site.htm" target="_blank"&gt;...&lt;/a&gt;&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="139"&gt;Code Analysis &amp;amp; Improvement&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="184"&gt;&lt;a href="http://www.codeplex.com/SHFB"&gt;Sandcastle Help File Builder&lt;/a&gt;&lt;/td&gt; &lt;td valign="top" width="428"&gt;Sandcastle, created by Microsoft, is a tool used for creating MSDN-style documentation from .NET assemblies and their associated XML comments files. The current version is the May 2008 release. It is command line based and has no GUI front-end, project management features, or an automated build process like those that you can find in NDoc&lt;a title="SHFB Home" href="http://www.codeplex.com/SHFB" target="_blank"&gt;...&lt;/a&gt;&lt;/td&gt; &lt;td valign="top" width="139"&gt;Documentation Tools&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="184"&gt;&lt;a title="Download #develop" href="http://www.icsharpcode.net/OpenSource/SD/Download/" target="_blank"&gt;SharpDevelop&lt;/a&gt;&lt;/td&gt; &lt;td valign="top" width="428"&gt; &lt;p&gt;SharpDevelop is a free and open source IDE for the C#, Visual Basic .NET (VB.NET), Boo (programming language) and (starting from version 3.0) F# and IronPython programming languages.  &lt;p&gt;It is typically used as an alternative to Microsoft's Visual Studio .NET. Early in its development there was a fork to Mono/Gtk# called MonoDevelop which includes multi-platform support&lt;a title="#develop on Wikipedia" href="http://en.wikipedia.org/wiki/SharpDevelop" target="_blank"&gt;...&lt;/a&gt;&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="139"&gt;Development Tool&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="184"&gt;&lt;a title="Zoomit Home Page" href="http://technet.microsoft.com/en-us/sysinternals/bb897434.aspx" target="_blank"&gt;ZoomIT&lt;/a&gt;&lt;/td&gt; &lt;td valign="top" width="428"&gt;ZoomIt is screen zoom and annotation tool for technical presentations that include application demonstrations. ZoomIt runs unobtrusively in the tray and activates with customisable hot-keys to zoom in on an area of the screen, move around while zoomed, and draw on the zoomed image. I wrote ZoomIt to fit my specific needs and use it in all my presentations&lt;/td&gt; &lt;td valign="top" width="139"&gt;Presentation Tool&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="184"&gt;&lt;a title="Firebug Home Page" href="http://getfirebug.com/" target="_blank"&gt;FireBug&lt;/a&gt; &amp;amp; &lt;a title="YSlow Home Page" href="http://developer.yahoo.com/yslow/" target="_blank"&gt;YSlow&lt;/a&gt;&lt;/td&gt; &lt;td valign="top" width="428"&gt;Firebug integrates with Firefox to put a wealth of web development tools at your fingertips while you browse. You can edit, debug, and monitor CSS, HTML, and JavaScript live in any web page&lt;a title="Firebug Home Page" href="http://getfirebug.com/" target="_blank"&gt;...&lt;/a&gt;&lt;br&gt;&lt;br&gt;YSlow analyzes web pages and tells you why they're slow based on the rules for high performance web sites. YSlow is a Firefox add-on integrated with the popular Firebug web development tool.&lt;/td&gt; &lt;td valign="top" width="139"&gt;Code Analysis &amp;amp; Improvement&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="184"&gt;&lt;a title="Download Ultramon" href="http://realtimesoft.com/ultramon/download.asp" target="_blank"&gt;Ultramon&lt;/a&gt;&lt;/td&gt; &lt;td valign="top" width="428"&gt;UltraMon is a utility for multi-monitor systems, designed to increase productivity and unlock the full potential of multiple monitors&lt;a title="Ultramon Home Page" href="http://realtimesoft.com/ultramon/" target="_blank"&gt;...&lt;/a&gt;&lt;/td&gt; &lt;td valign="top" width="139"&gt;Productivity Improvement&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="184"&gt;&lt;a title="Enso Home Page" href="http://www.humanized.com/enso/" target="_blank"&gt;Enso&lt;/a&gt;&lt;/td&gt; &lt;td valign="top" width="428"&gt;Enso is dead simple to use. You just hold down the Caps Lock key and type an Enso command, which is displayed in a translucent overlay. Once the command is typed, you simply release the Caps Lock key to activate it, and the overlay disappears. If you type fast, it all happens in a flash. For instance, to launch the Firefox Web browser, you just hold down the Caps Lock key and type "open firefox." To look up the meaning of the word "proclivity," you just hold down the Caps Lock key and type "define proclivity."&lt;/td&gt; &lt;td valign="top" width="139"&gt;Productivity Improvement&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;</description>
      <link>http://www.eb.net.nz/blog/post/2008/09/10/Development-Tools-I-use-Everyday.aspx</link>
      <author>eamon.nospam@nospam.eb.net.nz (eamon)</author>
      <comments>http://www.eb.net.nz/blog/post/2008/09/10/Development-Tools-I-use-Everyday.aspx#comment</comments>
      <guid>http://www.eb.net.nz/blog/post.aspx?id=67bc22ec-9380-4e06-b2ac-c0a34d4a06e7</guid>
      <pubDate>Wed, 10 Sep 2008 19:37:19 -2300</pubDate>
      <category>.NET Development</category>
      <dc:publisher>eamon</dc:publisher>
      <pingback:server>http://www.eb.net.nz/blog/pingback.axd</pingback:server>
      <pingback:target>http://www.eb.net.nz/blog/post.aspx?id=67bc22ec-9380-4e06-b2ac-c0a34d4a06e7</pingback:target>
      <slash:comments>20265</slash:comments>
      <trackback:ping>http://www.eb.net.nz/blog/trackback.axd?id=67bc22ec-9380-4e06-b2ac-c0a34d4a06e7</trackback:ping>
      <wfw:comment>http://www.eb.net.nz/blog/post/2008/09/10/Development-Tools-I-use-Everyday.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.eb.net.nz/blog/syndication.axd?post=67bc22ec-9380-4e06-b2ac-c0a34d4a06e7</wfw:commentRss>
    </item>
    <item>
      <title>SharePoint Development - Three Phases for Customisation</title>
      <description>&lt;a href="http://www.eb.net.nz/blog/image.axd?picture=WindowsLiveWriter/SharePointDevelopmentThreePhasesforCusto_9C73/image_4.png"&gt;&lt;img style="margin: 10px" src="http://www.eb.net.nz/blog/image.axd?picture=WindowsLiveWriter/SharePointDevelopmentThreePhasesforCusto_9C73/image_thumb_1.png" border="0" alt="image" width="286" height="248" align="right" /&gt;&lt;/a&gt; 
&lt;p&gt;
After a couple of weeks on holiday, I am back into it... and I thought I would get started with a post on the way I customise a SharePoint project. This post&amp;nbsp; won&amp;#39;t cover coding or how to configure sites, but more of the philosophy behind the customisation of a deployment. 
&lt;/p&gt;
&lt;p&gt;
When I get a new project to sink my teeth into I generally split the customisation into three parts: Configuration, SharePoint Designer and Custom Coding. 
&lt;/p&gt;
&lt;h3&gt;The three phases&lt;/h3&gt;
&lt;p&gt;
As I explained above, I use three phases when I do any customisation in SharePoint. Some projects may only need to use the first, some may need all three. Below is an explanation of each of those phases: 
&lt;/p&gt;
&lt;h4&gt;Configuration&lt;/h4&gt;
&lt;p&gt;
Using SharePoint&amp;#39;s out-of-the-box functionality you should be able to achieve between 60%-80% of the required customisation (or 100% if it is a less complicated project). 
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.eb.net.nz/blog/image.axd?picture=WindowsLiveWriter/SharePointDevelopmentThreePhasesforCusto_9C73/image_5.png"&gt;&lt;img style="border-width: 0px; margin: 5px 10px 0px 0px" src="http://www.eb.net.nz/blog/image.axd?picture=WindowsLiveWriter/SharePointDevelopmentThreePhasesforCusto_9C73/image_thumb.png" border="0" alt="image" width="244" height="134" align="left" /&gt;&lt;/a&gt;Using Sites, Lists, Content Types, etc. you should be able to get a working example of a site. Usually this can be done with the users to ensure your requirements are correct and saves re-work later on. 
&lt;/p&gt;
&lt;p&gt;
I also find starting the build like this, you can let the project team loose on the site and as they get a feel for it they may move the requirements... it is better it happens at this stage, rather than on delivery when a lot more work has been done to the solution. 
&lt;/p&gt;
&lt;p&gt;
Once the initial configuration has been completed and a gap analysis has been done to determine what (if any) further customisation needs to be done you will need to crack open either SharePoint Designer (SPD) or Visual Studio (VS). 
&lt;/p&gt;
&lt;h4&gt;SharePoint Designer &lt;a href="http://www.eb.net.nz/blog/image.axd?picture=WindowsLiveWriter/SharePointDevelopmentThreePhasesforCusto_9C73/image_7.png"&gt;&lt;img style="border-width: 0px; margin: 0px 20px 20px 10px" src="http://www.eb.net.nz/blog/image.axd?picture=WindowsLiveWriter/SharePointDevelopmentThreePhasesforCusto_9C73/image_thumb_2.png" border="0" alt="image" width="265" height="136" align="right" /&gt;&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;
The next phase of any custom work I do requires SharePoint Designer (SPD). SPD is a tool that doesn&amp;#39;t require masses of coding (VB.NET or C#) knowledge and can be used by technical BA&amp;#39;s or skilled up power users. This doesn&amp;#39;t mean developers can&amp;#39;t use it as well! 
&lt;/p&gt;
&lt;p&gt;
I generally use SharePoint designer to: 
&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Change the look and feel for the site &lt;/li&gt;
	&lt;li&gt;Display Cross-Site information in the Data View Web Part &lt;/li&gt;
	&lt;li&gt;Use SP Data source controls to populate ASPX controls &lt;/li&gt;
	&lt;li&gt;Do basic customisation of list views using the Custom List Form Web Part &lt;/li&gt;
	&lt;li&gt;Create basic workflows &lt;/li&gt;
	&lt;li&gt;Generally messing with the SharePoint Pages&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
Most of the time SharePoint Designer will get you close to the finish line. There are a few issues with it (not being able to easily move Workflows is one of them), but the good out-weights the bad! 
&lt;/p&gt;
&lt;h4&gt;Custom Coding (Visual Studio) &lt;img style="margin: 0px 15px 0px 5px" src="http://www.gecadshop.ro/library/Image/products/microsoft/Visual_Studio_Professional_2008.jpg" alt="" width="115" height="153" align="right" /&gt;&lt;/h4&gt;
&lt;p&gt;
The third and final phase in any custom work is the cutting of custom code. The tool I use when customising a project in this way is Visual Studio. This is the realm of the developer and comes with all of the &amp;quot;extras&amp;quot; that go with full custom development (support, bugs, upgrade changes, etc.). But, VS allows you to really make the final changes to customise the project to 100% of the users requirements. 
&lt;/p&gt;
&lt;p&gt;
I use VSeWSS and &lt;a href="http://www.eb.net.nz/blog/post/2008/07/13/Development-Tools-for-SharePoint.aspx" target="_blank" title="The tools I use when I develop in SharePoint"&gt;other tools&lt;/a&gt; along with VS to do the following tweaks: 
&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Create full site definitions so re-deploying the same site template is easy! &lt;/li&gt;
	&lt;li&gt;Create state machine and complex sequential workflows &lt;/li&gt;
	&lt;li&gt;Create custom Web Parts to modify and display information &lt;/li&gt;
	&lt;li&gt;Write event handlers to catch and process requests&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
and the list can go on and on... Where there are any gaps left after the first two steps, it should be cleaned up with code. 
&lt;/p&gt;
&lt;h3&gt;What to use and When&lt;/h3&gt;
&lt;p&gt;
The size of the project generally dictates how far down the list you will need to go to get the solution you want. Below is a table that shows where you which direction you need to head: 
&lt;/p&gt;
&lt;table border="1" cellspacing="0" cellpadding="2" width="100%"&gt;
	&lt;tbody&gt;
		&lt;tr&gt;
			&lt;td width="449" valign="top"&gt;&lt;strong&gt;Project Outline&lt;/strong&gt;&lt;/td&gt;
			&lt;td width="278" valign="top"&gt;&lt;strong&gt;Skills Required&lt;/strong&gt;&lt;/td&gt;
			&lt;td width="224" valign="top"&gt;&lt;strong&gt;Products to use&lt;/strong&gt;&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td width="467" valign="top"&gt;You are required to create a project management site that has the following functionality:&lt;br /&gt;
			&lt;ul&gt;
				&lt;li&gt;A place to store Risks, Issues, Communication Plans, Team Tasks &lt;/li&gt;
				&lt;li&gt;A place to store meeting information &lt;/li&gt;
				&lt;li&gt;A place to keep documents &lt;/li&gt;
				&lt;li&gt;A calendar to keep track of important events &lt;/li&gt;
				&lt;li&gt;A way to track tasks and view due/over due information&lt;/li&gt;
			&lt;/ul&gt;
			&lt;/td&gt;
			&lt;td width="286" valign="top"&gt;Knowledge of List &amp;amp; Site creation. This can be a Power User, BA, IT Pro or Developer. &lt;/td&gt;
			&lt;td width="230" valign="top"&gt;&lt;strong&gt;General SharePoint Configuration&lt;/strong&gt;&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td width="470" valign="top"&gt;You are asked to enhance the site with the following functionality:&lt;br /&gt;
			&lt;ul&gt;
				&lt;li&gt;A workflow that creates an unassigned task when an issue has been raised&lt;/li&gt;
				&lt;li&gt;A summary page displaying information on different phases of the project&lt;/li&gt;
				&lt;li&gt;Dashboard showing risk information using Red Light/Green Light indicators&lt;/li&gt;
			&lt;/ul&gt;
			&lt;/td&gt;
			&lt;td width="289" valign="top"&gt;SharePoint Designer Experience, HTML &amp;amp; CSS.&lt;br /&gt;
			This can be a Technical BA, Web Designer or Developer &lt;/td&gt;
			&lt;td width="235" valign="top"&gt;&lt;strong&gt;SharePoint Designer&lt;/strong&gt;&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td width="467" valign="top"&gt;The project team have used the site for several weeks and come back with the following enhancements:&lt;br /&gt;
			&lt;ul&gt;
				&lt;li&gt;A Web Part that shows statistical information about communications that have taken place. This Web Part is to be available to anyone to place on their personal page views&lt;/li&gt;
				&lt;li&gt;A workflow that produces an Office 2007 document with information from the issues &amp;amp; risk list to be used as a weekly report&lt;/li&gt;
			&lt;/ul&gt;
			&lt;/td&gt;
			&lt;td width="289" valign="top"&gt;VB.NET or C# programming skills &amp;amp; SharePoint development experience, generally this is the domain of a programmer.&lt;/td&gt;
			&lt;td width="239" valign="top"&gt;&lt;strong&gt;Visual Studio&lt;/strong&gt; and any other &lt;a href="http://www.eb.net.nz/blog/post/2008/07/13/Development-Tools-for-SharePoint.aspx" target="_blank"&gt;development tools&lt;/a&gt;&lt;/td&gt;
		&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;Conclusion&lt;/h3&gt;
&lt;p&gt;
Hopefully the above information will prove useful when deciding what path to take with customisation of your SharePoint project. If you have a large project that requires a fair bit of custom work, try and get the most out of SharePoint before you start using SharePoint Designer or Visual Studio... it is amazing what a little bit of planning and architecture can do! Anywhere from 60% - 80% of a large project can be completed without even opening SPD or VS. 
&lt;/p&gt;
</description>
      <link>http://www.eb.net.nz/blog/post/2008/09/08/SharePoint-Development-Three-Phases-for-Customisation.aspx</link>
      <author>eamon.nospam@nospam.eb.net.nz (Eamon)</author>
      <comments>http://www.eb.net.nz/blog/post/2008/09/08/SharePoint-Development-Three-Phases-for-Customisation.aspx#comment</comments>
      <guid>http://www.eb.net.nz/blog/post.aspx?id=1cb1e544-60c8-4446-8cb1-10538dc0188d</guid>
      <pubDate>Mon, 08 Sep 2008 07:12:00 -2300</pubDate>
      <category>SharePoint</category>
      <category>WSS/MOSS Development</category>
      <dc:publisher>Eamon</dc:publisher>
      <pingback:server>http://www.eb.net.nz/blog/pingback.axd</pingback:server>
      <pingback:target>http://www.eb.net.nz/blog/post.aspx?id=1cb1e544-60c8-4446-8cb1-10538dc0188d</pingback:target>
      <slash:comments>12559</slash:comments>
      <trackback:ping>http://www.eb.net.nz/blog/trackback.axd?id=1cb1e544-60c8-4446-8cb1-10538dc0188d</trackback:ping>
      <wfw:comment>http://www.eb.net.nz/blog/post/2008/09/08/SharePoint-Development-Three-Phases-for-Customisation.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.eb.net.nz/blog/syndication.axd?post=1cb1e544-60c8-4446-8cb1-10538dc0188d</wfw:commentRss>
    </item>
    <item>
      <title>UNPLUGGED MSDN update &amp; HP-Microsoft SBS Road Show</title>
      <description>&lt;p&gt;
This post is for anyone in New Zealand that is interested in the latest and greatest from MSFT &amp;amp; HP in the Small Business and Cloud-Based Services space... If you haven&amp;#39;t already done so, check out the following two events: 
&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;a href="http://blogs.msdn.com/nzevents/archive/2008/09/04/sep-oct-2008-unplugged-msdn-update-get-ready-for-cloud-based-services-ie8-silverlight-2.aspx" target="_blank"&gt;Microsoft Unplugged series&lt;/a&gt; (to register)&lt;br /&gt;
	the presentation by &lt;a href="http://blogs.msdn.com/nigel/" target="_blank" title="Nigel's Blog"&gt;Nigel Parker&lt;/a&gt; is titled: UNPLUGGED MSDN Update: Get Ready for Cloud-Based Services, IE8 &amp;amp; Silverlight 2&lt;/li&gt;
	&lt;li&gt;&lt;a href="https://h50043.www5.hp.com/formlab/en-NZ/0066_080116070043_1.aspx" target="_blank" title="HP-Microsoft SBS 2008 ROK Road Show Registration Page"&gt;HP-Microsoft SBS 2008 ROK Road Show&lt;/a&gt; (to register)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
Both events are being run on the same day in most centres, with the HP-MSFT session in the morning and the unplugged session in the afternoon. For more details on both the events visit the &lt;a href="http://blogs.technet.com/nz_small_business_specialists/archive/2008/08/27/event.aspx" target="_blank"&gt;NZ SBSC (Small Business Specialist Community) blog&lt;/a&gt;. 
&lt;/p&gt;
</description>
      <link>http://www.eb.net.nz/blog/post/2008/09/07/UNPLUGGED-MSDN-update-HP-Microsoft-SBS-Road-Show.aspx</link>
      <author>eamon.nospam@nospam.eb.net.nz (Eamon)</author>
      <comments>http://www.eb.net.nz/blog/post/2008/09/07/UNPLUGGED-MSDN-update-HP-Microsoft-SBS-Road-Show.aspx#comment</comments>
      <guid>http://www.eb.net.nz/blog/post.aspx?id=1c06d91f-671e-4a60-9fd8-dda9afc922d4</guid>
      <pubDate>Sun, 07 Sep 2008 01:30:00 -2300</pubDate>
      <category>.NET Development</category>
      <category>Administration</category>
      <dc:publisher>Eamon</dc:publisher>
      <pingback:server>http://www.eb.net.nz/blog/pingback.axd</pingback:server>
      <pingback:target>http://www.eb.net.nz/blog/post.aspx?id=1c06d91f-671e-4a60-9fd8-dda9afc922d4</pingback:target>
      <slash:comments>5954</slash:comments>
      <trackback:ping>http://www.eb.net.nz/blog/trackback.axd?id=1c06d91f-671e-4a60-9fd8-dda9afc922d4</trackback:ping>
      <wfw:comment>http://www.eb.net.nz/blog/post/2008/09/07/UNPLUGGED-MSDN-update-HP-Microsoft-SBS-Road-Show.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.eb.net.nz/blog/syndication.axd?post=1c06d91f-671e-4a60-9fd8-dda9afc922d4</wfw:commentRss>
    </item>
    <item>
      <title>BOP SPUG Presentation: SharePoint Workflows from a Developers Point-of-View</title>
      <description>&lt;p&gt;
I am presenting at this months &lt;a href="http://www.sharepointusergroup.net.nz/BayOfPlenty/default.aspx" target="_blank" title="Bay of Plenty SharePoint User Group Site"&gt;Bay of Plenty SharePoint User Group&lt;/a&gt;... The topic is: &lt;a href="http://www.sharepointusergroup.net.nz/BayOfPlenty/Lists/Events%20Calendar/DispForm.aspx?ID=9&amp;amp;Source=http%3A%2F%2Fwww%2Esharepointusergroup%2Enet%2Enz%2FBayOfPlenty%2Fdefault%2Easpx" target="_blank" title="SharePoint Workflows from a Developers Point-of-View on the BOP SPUG site."&gt;&lt;strong&gt;SharePoint Workflows from a Developers Point-of-View&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;.&lt;/strong&gt; 
&lt;/p&gt;
&lt;p&gt;
Here is a blurb about the presentation: 
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;Workflows can be a powerful tool for an organisation to automate many processes and decrease information duplication and becoming misplaced. In this session Eamon will create a workflow using Visual Studio to show the power of SharePoint&amp;rsquo;s Workflow Engine working with enterprise line-of-business applications. This session is aimed at developers, but it may be useful for power users to get a look at what is possible with customised workflows.&lt;/em&gt; 
&lt;/p&gt;
&lt;p&gt;
I will record the session and post it on here, so anyone that misses it will be able to watch it and post questions. 
&lt;/p&gt;
</description>
      <link>http://www.eb.net.nz/blog/post/2008/09/06/BOP-SPUG-Presentation-SharePoint-Workflows-from-a-Developers-Point-of-View.aspx</link>
      <author>eamon.nospam@nospam.eb.net.nz (Eamon)</author>
      <comments>http://www.eb.net.nz/blog/post/2008/09/06/BOP-SPUG-Presentation-SharePoint-Workflows-from-a-Developers-Point-of-View.aspx#comment</comments>
      <guid>http://www.eb.net.nz/blog/post.aspx?id=4d16e49f-70a6-4928-8dd6-454fdbce4cf7</guid>
      <pubDate>Sat, 06 Sep 2008 18:19:00 -2300</pubDate>
      <category>WSS/MOSS Development</category>
      <dc:publisher>Eamon</dc:publisher>
      <pingback:server>http://www.eb.net.nz/blog/pingback.axd</pingback:server>
      <pingback:target>http://www.eb.net.nz/blog/post.aspx?id=4d16e49f-70a6-4928-8dd6-454fdbce4cf7</pingback:target>
      <slash:comments>4110</slash:comments>
      <trackback:ping>http://www.eb.net.nz/blog/trackback.axd?id=4d16e49f-70a6-4928-8dd6-454fdbce4cf7</trackback:ping>
      <wfw:comment>http://www.eb.net.nz/blog/post/2008/09/06/BOP-SPUG-Presentation-SharePoint-Workflows-from-a-Developers-Point-of-View.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.eb.net.nz/blog/syndication.axd?post=4d16e49f-70a6-4928-8dd6-454fdbce4cf7</wfw:commentRss>
    </item>
    <item>
      <title>SharePoint Development Tip: Using LINQ to query a SharePoint List</title>
      <description>&lt;p&gt;
Over the past couple of days I have been playing with an internal project, so I thought I would play and query the lists with LINQ... here is what I came up with! 
&lt;/p&gt;
&lt;p&gt;
Because a SPListItemCollection inherits from ICollection, we can attack it with a LINQ query... and that we shall! 
&lt;/p&gt;
&lt;p&gt;
A bit of background, I am using a Web Part to render the information to the user. The Web Part has a several properties for the user to supply information to configure it (they will appear in the &amp;quot;Miscellaneous&amp;quot; section of the Web Part Properties Pane). The properties are as follows, the CAML property is optional, but it gives an easy way to filter information from the list without going into the code: 
&lt;/p&gt;
&lt;div style="font-size: 8pt; margin: 20px 0px 10px; overflow: auto; width: 58.28%; cursor: text; max-height: 200px; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; height: 210px; background-color: #f4f4f4; border: gray 1px solid; padding: 4px"&gt;
&lt;div style="font-size: 8pt; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; border-style: none; padding: 0px"&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: white; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Private&lt;/span&gt; _siteurl &lt;span style="color: #0000ff"&gt;As&lt;/span&gt; &lt;span style="color: #0000ff"&gt;String&lt;/span&gt; = &lt;span style="color: #006080"&gt;&amp;quot;&amp;quot;&lt;/span&gt;
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;   2:&lt;/span&gt; &amp;lt;WebBrowsable(&lt;span style="color: #0000ff"&gt;True&lt;/span&gt;), _
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: white; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;   3:&lt;/span&gt; WebDisplayName(&lt;span style="color: #006080"&gt;&amp;quot;Web Site URL *&amp;quot;&lt;/span&gt;), _
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;   4:&lt;/span&gt; WebDescription(&lt;span style="color: #006080"&gt;&amp;quot;The site the list is located.&amp;quot;&lt;/span&gt;), _
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: white; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;   5:&lt;/span&gt; Personalizable(PersonalizationScope.User)&amp;gt; _
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;   6:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Property&lt;/span&gt; SiteURL() &lt;span style="color: #0000ff"&gt;As&lt;/span&gt; &lt;span style="color: #0000ff"&gt;String&lt;/span&gt;
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: white; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;   7:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;Get&lt;/span&gt;
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;   8:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;Return&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Me&lt;/span&gt;._siteurl
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: white; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;   9:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;End&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Get&lt;/span&gt;
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;  10:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;Set&lt;/span&gt;(&lt;span style="color: #0000ff"&gt;ByVal&lt;/span&gt; value &lt;span style="color: #0000ff"&gt;As&lt;/span&gt; &lt;span style="color: #0000ff"&gt;String&lt;/span&gt;)
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: white; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;  11:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;Me&lt;/span&gt;._siteurl = value
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;  12:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;End&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Set&lt;/span&gt;
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: white; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;  13:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;End&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Property&lt;/span&gt;
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;  14:&lt;/span&gt;&amp;nbsp; 
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: white; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;  15:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Private&lt;/span&gt; _listGuid &lt;span style="color: #0000ff"&gt;As&lt;/span&gt; &lt;span style="color: #0000ff"&gt;String&lt;/span&gt; = &lt;span style="color: #006080"&gt;&amp;quot;&amp;quot;&lt;/span&gt;
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;  16:&lt;/span&gt; &amp;lt;WebBrowsable(&lt;span style="color: #0000ff"&gt;True&lt;/span&gt;), _
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: white; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;  17:&lt;/span&gt; WebDisplayName(&lt;span style="color: #006080"&gt;&amp;quot;Test Management List GUID *&amp;quot;&lt;/span&gt;), _
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;  18:&lt;/span&gt; WebDescription(&lt;span style="color: #006080"&gt;&amp;quot;Enter the GUID for the List.&amp;quot;&lt;/span&gt;), _
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: white; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;  19:&lt;/span&gt; Personalizable(PersonalizationScope.User)&amp;gt; _
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;  20:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Property&lt;/span&gt; ListGUID() &lt;span style="color: #0000ff"&gt;As&lt;/span&gt; &lt;span style="color: #0000ff"&gt;String&lt;/span&gt;
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: white; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;  21:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;Get&lt;/span&gt;
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;  22:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;Return&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Me&lt;/span&gt;._listGuid
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: white; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;  23:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;End&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Get&lt;/span&gt;
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;  24:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;Set&lt;/span&gt;(&lt;span style="color: #0000ff"&gt;ByVal&lt;/span&gt; value &lt;span style="color: #0000ff"&gt;As&lt;/span&gt; &lt;span style="color: #0000ff"&gt;String&lt;/span&gt;)
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: white; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;  25:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;Me&lt;/span&gt;._listGuid = value
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;  26:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;End&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Set&lt;/span&gt;
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: white; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;  27:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;End&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Property&lt;/span&gt;
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;  28:&lt;/span&gt;&amp;nbsp; 
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: white; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;  29:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Private&lt;/span&gt; _camlQuery &lt;span style="color: #0000ff"&gt;As&lt;/span&gt; &lt;span style="color: #0000ff"&gt;String&lt;/span&gt; = &lt;span style="color: #006080"&gt;&amp;quot;&amp;quot;&lt;/span&gt;
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;  30:&lt;/span&gt; &amp;lt;WebBrowsable(&lt;span style="color: #0000ff"&gt;True&lt;/span&gt;), _
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: white; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;  31:&lt;/span&gt; WebDisplayName(&lt;span style="color: #006080"&gt;&amp;quot;CAML query for the webpart&amp;quot;&lt;/span&gt;), _
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;  32:&lt;/span&gt; WebDescription(&lt;span style="color: #006080"&gt;&amp;quot;Enter the CAML for the List.&amp;quot;&lt;/span&gt;), _
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: white; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;  33:&lt;/span&gt; Personalizable(PersonalizationScope.User)&amp;gt; _
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;  34:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Property&lt;/span&gt; CAML() &lt;span style="color: #0000ff"&gt;As&lt;/span&gt; &lt;span style="color: #0000ff"&gt;String&lt;/span&gt;
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: white; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;  35:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;Get&lt;/span&gt;
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;  36:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;Return&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Me&lt;/span&gt;._camlQuery
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: white; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;  37:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;End&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Get&lt;/span&gt;
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;  38:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;Set&lt;/span&gt;(&lt;span style="color: #0000ff"&gt;ByVal&lt;/span&gt; value &lt;span style="color: #0000ff"&gt;As&lt;/span&gt; &lt;span style="color: #0000ff"&gt;String&lt;/span&gt;)
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: white; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;  39:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;Me&lt;/span&gt;._camlQuery = value
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;  40:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;End&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Set&lt;/span&gt;
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: white; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;  41:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;End&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Property&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;
The first thing we need to do in the process is attach to the site and then web that we want we want to query. To do this I do the following: 
&lt;/p&gt;
&lt;div style="font-size: 8pt; margin: 20px 0px 10px; overflow: auto; width: 46.68%; cursor: text; max-height: 200px; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; height: 257px; background-color: #f4f4f4; border: gray 1px solid; padding: 4px"&gt;
&lt;div style="font-size: 8pt; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; border-style: none; padding: 0px"&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: white; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;   1:&lt;/span&gt; &lt;span style="color: #008000"&gt;&amp;#39; Create a Web object to use through the routine&lt;/span&gt;
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;   2:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Dim&lt;/span&gt; Web &lt;span style="color: #0000ff"&gt;as&lt;/span&gt; SPWeb
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: white; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;   3:&lt;/span&gt; &lt;span style="color: #008000"&gt;&amp;#39; Crate a local SPWeb Object&lt;/span&gt;
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;   4:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Dim&lt;/span&gt; _thisweb &lt;span style="color: #0000ff"&gt;As&lt;/span&gt; SPWeb
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: white; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;   5:&lt;/span&gt; &lt;span style="color: #008000"&gt;&amp;#39; Open the site with the URL supplied by the user&lt;/span&gt;
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;   6:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Dim&lt;/span&gt; SiteColl &lt;span style="color: #0000ff"&gt;As&lt;/span&gt; SPSite = &lt;span style="color: #0000ff"&gt;New&lt;/span&gt; SPSite(SiteURL)
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: white; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;   7:&lt;/span&gt; _thisweb = SiteColl.OpenWeb
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;   8:&lt;/span&gt; &lt;span style="color: #008000"&gt;&amp;#39; Write the SPWeb Object to the property&lt;/span&gt;
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: white; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;   9:&lt;/span&gt; Web = _thisweb
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;  10:&lt;/span&gt; &lt;span style="color: #008000"&gt;&amp;#39; Clean up the SPWeb Object&lt;/span&gt;
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: white; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;  11:&lt;/span&gt; _thisweb.Dispose()
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;  12:&lt;/span&gt; _thisweb.Close()
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;
This gives us an SPWeb object to play with. In the next snippet of code we attach to the list and create a CAML query object (SPQuery) that we will apply if it was supplied: 
&lt;/p&gt;
&lt;div style="font-size: 8pt; margin: 20px 0px 10px; overflow: auto; width: 57.23%; cursor: text; max-height: 200px; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; height: 180px; background-color: #f4f4f4; border: gray 1px solid; padding: 4px"&gt;
&lt;div style="font-size: 8pt; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; border-style: none; padding: 0px"&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: white; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;   1:&lt;/span&gt; &lt;span style="color: #008000"&gt;&amp;#39; Attach to the list&lt;/span&gt;
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;   2:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Dim&lt;/span&gt; thisListGUID &lt;span style="color: #0000ff"&gt;As&lt;/span&gt; Guid = &lt;span style="color: #0000ff"&gt;New&lt;/span&gt; Guid(_listGuid)
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: white; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;   3:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Dim&lt;/span&gt; list &lt;span style="color: #0000ff"&gt;As&lt;/span&gt; SPList = Web.Lists(thisListGUID)
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;   4:&lt;/span&gt;&amp;nbsp; 
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: white; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;   5:&lt;/span&gt; &lt;span style="color: #008000"&gt;&amp;#39; Define the Query&lt;/span&gt;
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;   6:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Dim&lt;/span&gt; query &lt;span style="color: #0000ff"&gt;As&lt;/span&gt; SPQuery = &lt;span style="color: #0000ff"&gt;New&lt;/span&gt; SPQuery(list.DefaultView)
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: white; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;   7:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;If&lt;/span&gt; CAML &amp;lt;&amp;gt; &lt;span style="color: #006080"&gt;&amp;quot;&amp;quot;&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Then&lt;/span&gt;
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;   8:&lt;/span&gt;     query.Query = CAML
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: white; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;   9:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;End&lt;/span&gt; &lt;span style="color: #0000ff"&gt;If&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;
Now we have all of that set up, we can make the LINQ query. in this query we are simply retrieving the data, but it is possible to sort, group by etc. as well. 
&lt;/p&gt;
&lt;div style="font-size: 8pt; margin: 20px 0px 10px; overflow: auto; width: 57.31%; cursor: text; max-height: 200px; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; height: 68px; background-color: #f4f4f4; border: gray 1px solid; padding: 4px"&gt;
&lt;div style="font-size: 8pt; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; border-style: none; padding: 0px"&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: white; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Dim&lt;/span&gt; linqQuery = From Z &lt;span style="color: #0000ff"&gt;As&lt;/span&gt; SPListItem &lt;span style="color: #0000ff"&gt;In&lt;/span&gt; list.GetItems(query) _
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;   2:&lt;/span&gt;                                   &lt;span style="color: #0000ff"&gt;Select&lt;/span&gt; Z
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;
Now we have the information, we can loop through it and do what we want with it. Below I have shown we can use a Lambda Query to group SharePoint information. In the example list I have Title, Category and Status fields and I want to group the information by the Category and then do something depending on the status, it may be some conditional formatting depending on other properties or maybe assign a task... anything really. 
&lt;/p&gt;
&lt;p&gt;
The reason for the substring is that SharePoint formats fields with an ID and then the Human Readable value, e.g. 1;#Status. We only want what is after the #. 
&lt;/p&gt;
&lt;div style="font-size: 8pt; margin: 20px 0px 10px; overflow: auto; width: 84.72%; cursor: text; max-height: 200px; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; height: 210px; background-color: #f4f4f4; border: gray 1px solid; padding: 4px"&gt;
&lt;div style="font-size: 8pt; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; border-style: none; padding: 0px"&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: white; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Dim&lt;/span&gt; CategoryTitle &lt;span style="color: #0000ff"&gt;as&lt;/span&gt; &lt;span style="color: #0000ff"&gt;String&lt;/span&gt; = &lt;span style="color: #006080"&gt;&amp;quot;&amp;quot;&lt;/span&gt;
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;   2:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;For&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Each&lt;/span&gt; i &lt;span style="color: #0000ff"&gt;In&lt;/span&gt; linqQuery.GroupBy(&lt;span style="color: #0000ff"&gt;Function&lt;/span&gt;(a &lt;span style="color: #0000ff"&gt;As&lt;/span&gt; SPListItem) a(&lt;span style="color: #006080"&gt;&amp;quot;Category&amp;quot;&lt;/span&gt;))
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: white; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;   3:&lt;/span&gt;     CategoryTitle = i.Key.ToString.Substring(i.Key.ToString.LastIndexOf(&lt;span style="color: #006080"&gt;&amp;quot;#&amp;quot;&lt;/span&gt;) + 1)
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;   4:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;For&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Each&lt;/span&gt; item &lt;span style="color: #0000ff"&gt;In&lt;/span&gt; i
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: white; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;   5:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;Select&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Case&lt;/span&gt; item(&lt;span style="color: #006080"&gt;&amp;quot;Status&amp;quot;&lt;/span&gt;).ToString
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;   6:&lt;/span&gt;             &lt;span style="color: #0000ff"&gt;Case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;Open&amp;quot;&lt;/span&gt;
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: white; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;   7:&lt;/span&gt;                 &lt;span style="color: #008000"&gt;&amp;#39; Do Something&lt;/span&gt;
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;   8:&lt;/span&gt;             &lt;span style="color: #0000ff"&gt;Case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;Closed&amp;quot;&lt;/span&gt;
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: white; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;   9:&lt;/span&gt;                 &lt;span style="color: #008000"&gt;&amp;#39; Do Something&lt;/span&gt;
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;  10:&lt;/span&gt;             &lt;span style="color: #0000ff"&gt;Case&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Else&lt;/span&gt;
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: white; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;  11:&lt;/span&gt;                 &lt;span style="color: #008000"&gt;&amp;#39; Do Something else&lt;/span&gt;
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;  12:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;End&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Select&lt;/span&gt;
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: white; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;  13:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;Next&lt;/span&gt;
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;  14:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Next&lt;/span&gt; 
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;
Hopefully that is a fairly quick and easy demo of how to get information from SharePoint as objects and use them! 
&lt;/p&gt;
</description>
      <link>http://www.eb.net.nz/blog/post/2008/08/12/SharePoint-Development-Tip-Using-LINQ-to-query-a-SharePoint-List.aspx</link>
      <author>eamon.nospam@nospam.eb.net.nz (Eamon)</author>
      <comments>http://www.eb.net.nz/blog/post/2008/08/12/SharePoint-Development-Tip-Using-LINQ-to-query-a-SharePoint-List.aspx#comment</comments>
      <guid>http://www.eb.net.nz/blog/post.aspx?id=49675d3e-52cb-496e-b819-a47507230f34</guid>
      <pubDate>Tue, 12 Aug 2008 20:46:00 -2300</pubDate>
      <category>.NET Development</category>
      <category>WSS/MOSS Development</category>
      <dc:publisher>Eamon</dc:publisher>
      <pingback:server>http://www.eb.net.nz/blog/pingback.axd</pingback:server>
      <pingback:target>http://www.eb.net.nz/blog/post.aspx?id=49675d3e-52cb-496e-b819-a47507230f34</pingback:target>
      <slash:comments>11852</slash:comments>
      <trackback:ping>http://www.eb.net.nz/blog/trackback.axd?id=49675d3e-52cb-496e-b819-a47507230f34</trackback:ping>
      <wfw:comment>http://www.eb.net.nz/blog/post/2008/08/12/SharePoint-Development-Tip-Using-LINQ-to-query-a-SharePoint-List.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.eb.net.nz/blog/syndication.axd?post=49675d3e-52cb-496e-b819-a47507230f34</wfw:commentRss>
    </item>
    <item>
      <title>System Administration Tools for SharePoint</title>
      <description>&lt;p&gt;
To follow on from my &lt;a href="http://www.eb.net.nz/Blog/post.aspx?id=eeb23678-0491-4835-93c7-19161b22cc9e" target="_blank" title="My previous post on Development Tools for SharePoint"&gt;Development Tools for SharePoint&lt;/a&gt; post, I thought I would throw together a list of things I use to keep on top of SharePoint for its day to day running and making sure it is going to be able to cope after an install/upgrade. 
&lt;/p&gt;
&lt;table border="0" style="background-color: #616161"&gt;
	&lt;tbody&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;table border="0" cellspacing="1" cellpadding="2" width="600"&gt;
				&lt;tbody&gt;
					&lt;tr style="background-color: #ffffff"&gt;
						&lt;td width="222" valign="top"&gt;&lt;strong&gt;Tool&amp;#39;s Name&lt;/strong&gt;&lt;/td&gt;
						&lt;td width="535" valign="top"&gt;&lt;strong&gt;Description&lt;/strong&gt;&lt;/td&gt;
					&lt;/tr&gt;
					&lt;tr style="background-color: #ffffff"&gt;
						&lt;td width="222" valign="top"&gt;&lt;a href="http://technet.microsoft.com/en-us/library/cc261956.aspx" target="_blank" title="Microsoft Office SharePoint Server 2007 includes the Stsadm tool for command-line administration of Office SharePoint Server 2007 servers and sites."&gt;STSADM&lt;/a&gt;&lt;/td&gt;
						&lt;td width="535" valign="top"&gt;This would be the tool that I use the most when administering SharePoint.&lt;br /&gt;
						STSADM is the command line utility that allows you to do any configuration/install/migration/anything task that you need to perform on your deployment. STSADM is more powerful than the Web UI and can perform some tasks that the Web UI can&amp;#39;t. &lt;br /&gt;
						Want to schedule a nightly SP back up? Using the STSADM command in a batch file attached to a scheduled task will give you that functionality!&lt;br /&gt;
						A really good source for all the STSADM commands is &lt;a href="http://blogs.technet.com/josebda/archive/2008/03/15/complete-reference-of-all-stsadm-operations-with-parameters-in-moss-2007-sp1.aspx" target="_blank"&gt;Jose Barreto&amp;#39;s blog on all the operations and parameters for STSADM&lt;/a&gt;&lt;/td&gt;
					&lt;/tr&gt;
					&lt;tr style="background-color: #ffffff"&gt;
						&lt;td width="222" valign="top"&gt;&lt;a href="http://blogs.msdn.com/ronalus/archive/2007/01/04/stsadmwin-has-an-2007-version.aspx" target="_blank" title="stsadmWin 2007 is here"&gt;stsadmWin&lt;/a&gt;&lt;/td&gt;
						&lt;td width="535" valign="top"&gt;This was suggested in another post of mine, and I have had to add this to the list of tools I use to manage SP. STSADM is cool, this makes it a lot cooler! It is a must for any SP admin!&lt;/td&gt;
					&lt;/tr&gt;
					&lt;tr style="background-color: #ffffff"&gt;
						&lt;td width="222" valign="top"&gt;&lt;a href="http://technet.microsoft.com/en-us/library/bb961988.aspx" target="_blank" title="SharePoint Capacity Planning Tool"&gt;SharePoint Capacity Planning Tool&lt;/a&gt;&lt;/td&gt;
						&lt;td width="535" valign="top"&gt;This isn&amp;#39;t a tool for monitoring a SharePoint deployment, but it is fantastic for planning a deployment and as such is a must in the tool kit! MSFT have done a good job on this tool and is something you should run if there is ever a company expansion or a shift in the way you use SP.&lt;/td&gt;
					&lt;/tr&gt;
					&lt;tr style="background-color: #ffffff"&gt;
						&lt;td width="222" valign="top"&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=cb944b27-9d6b-4a1f-b3e1-778efda07df8&amp;amp;displaylang=en" target="_blank"&gt;Best Practices Analyzer for SharePoint&lt;/a&gt;&lt;/td&gt;
						&lt;td width="535" valign="top"&gt;Where would we be without best practice&amp;#39;s? This tool runs over your farm, applies best practice rules and produces a report giving you a heads up on where to improve the performance of your deployment. There is more information about the &lt;a href="http://blogs.msdn.com/sharepoint/archive/2007/04/02/best-practices-analyzer.aspx" target="_blank"&gt;BPA on the SharePoint Team&amp;#39;s blog&lt;/a&gt;.&lt;/td&gt;
					&lt;/tr&gt;
					&lt;tr style="background-color: #ffffff"&gt;
						&lt;td width="222" valign="top"&gt;&lt;a href="http://www.codeplex.com/sushi" target="_blank" title="SharePoint Admin tool"&gt;SharePoint SUSHI&lt;/a&gt; 
						&lt;p&gt;
						&lt;strong&gt;SUSHI&lt;/strong&gt; = &lt;strong&gt;S&lt;/strong&gt;harePoint &lt;strong&gt;U&lt;/strong&gt;tility with a &lt;strong&gt;S&lt;/strong&gt;mart, &lt;strong&gt;H&lt;/strong&gt;elpful &lt;strong&gt;I&lt;/strong&gt;nterface 
						&lt;/p&gt;
						&lt;/td&gt;
						&lt;td width="535" valign="top"&gt;
						&lt;p&gt;
						SUSHI is a powerful, user-friendly SharePoint application enabling you to accomplish common SharePoint administrative and development tasks. You can think of SUSHI as a Swiss army knife for SharePoint. 
						&lt;/p&gt;
						&lt;/td&gt;
					&lt;/tr&gt;
					&lt;tr style="background-color: #ffffff"&gt;
						&lt;td width="222" valign="top"&gt;Microsoft SQL Server Manager&lt;/td&gt;
						&lt;td width="535" valign="top"&gt;I use this to &amp;quot;take care&amp;quot; of the SharePoint Databases. I use MSSM to manage the size of the database&amp;#39;s for the various sites in an given farm.&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
</description>
      <link>http://www.eb.net.nz/blog/post/2008/08/03/System-Administration-Tools-for-SharePoint.aspx</link>
      <author>eamon.nospam@nospam.eb.net.nz (Eamon)</author>
      <comments>http://www.eb.net.nz/blog/post/2008/08/03/System-Administration-Tools-for-SharePoint.aspx#comment</comments>
      <guid>http://www.eb.net.nz/blog/post.aspx?id=8fd92944-d244-4ffe-a322-3bc568696246</guid>
      <pubDate>Sun, 03 Aug 2008 17:29:00 -2300</pubDate>
      <category>Administration</category>
      <category>SharePoint</category>
      <dc:publisher>Eamon</dc:publisher>
      <pingback:server>http://www.eb.net.nz/blog/pingback.axd</pingback:server>
      <pingback:target>http://www.eb.net.nz/blog/post.aspx?id=8fd92944-d244-4ffe-a322-3bc568696246</pingback:target>
      <slash:comments>12762</slash:comments>
      <trackback:ping>http://www.eb.net.nz/blog/trackback.axd?id=8fd92944-d244-4ffe-a322-3bc568696246</trackback:ping>
      <wfw:comment>http://www.eb.net.nz/blog/post/2008/08/03/System-Administration-Tools-for-SharePoint.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.eb.net.nz/blog/syndication.axd?post=8fd92944-d244-4ffe-a322-3bc568696246</wfw:commentRss>
    </item>
    <item>
      <title>SharePoint Tip: Creating Multiple Sub-Sites with STSADM</title>
      <description>&lt;p&gt;In this post I will go cover the creation of a site using the STSADM tool. If you want to clone a few sites and re-create several copies of them this is the easiest way to do it. This is really handy if you have a base Project Management or Team Site that you want to use for a few different areas of your business!&lt;/p&gt; &lt;h3&gt;STSADM Export - Exporting the base site&lt;/h3&gt; &lt;p&gt;The first step of the process is to create a "template" for us to re-use when creating the copies. To do this we use the STSADM -o export command. Below is the syntax to do this. As always, I put this into a batch file so I have to change the directory to the 12 hive so I can run STSADM.&lt;/p&gt; &lt;div style="border-right: gray 1px solid; padding-right: 4px; padding-left: 4px; font-size: 8pt; border-top: gray 1px solid; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 97.5%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4"&gt; &lt;div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; 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;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: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   1:&lt;/span&gt; cd %COMMONPROGRAMFILES%\Microsoft Shared\web server extensions\12\bin &lt;/pre&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: #606060"&gt;   2:&lt;/span&gt; REM Export the base site to a folder on the file system&lt;/pre&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: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   3:&lt;/span&gt; stsadm -o export -url http://yoursite/demosite/ -filename c:\SiteBase\ -includeusersecurity -versions 4 -nofilecompression -quiet &lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h3&gt;Creating the Site and Importing the base template&lt;/h3&gt;
&lt;p&gt;The next part of the process is to create a base site and then import the "template" we exported above.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Note: Make sure you use the same site template for the createweb command as you used to create the base template! not doing so will cause an error and the import process will not work.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Below is the syntax to create the site and import the exported "template".&lt;/p&gt;
&lt;div style="border-right: gray 1px solid; padding-right: 4px; padding-left: 4px; font-size: 8pt; border-top: gray 1px solid; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 97.5%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4"&gt;
&lt;div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; 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;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: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   1:&lt;/span&gt; cd %COMMONPROGRAMFILES%\Microsoft Shared\web server extensions\12\bin&lt;/pre&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: #606060"&gt;   2:&lt;/span&gt; REM Create a site base&lt;/pre&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: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   3:&lt;/span&gt; stsadm -o createweb -url http://yoursite/NewSite -title "Demo Site Name" -sitetemplate STS#0 &lt;/pre&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: #606060"&gt;   4:&lt;/span&gt; REM Import the template we exported &lt;/pre&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: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   5:&lt;/span&gt; stsadm -o import -url http://yoursite/NewSite -filename c:\SiteBase\ -includeusersecurity -nofilecompression -quiet &lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Now that we have this we can reproduce it to create multiple instances of the same site!&lt;/p&gt;</description>
      <link>http://www.eb.net.nz/blog/post/2008/07/21/Creating-Multiple-SubSites-with-STSADM.aspx</link>
      <author>eamon.nospam@nospam.eb.net.nz (eamon)</author>
      <comments>http://www.eb.net.nz/blog/post/2008/07/21/Creating-Multiple-SubSites-with-STSADM.aspx#comment</comments>
      <guid>http://www.eb.net.nz/blog/post.aspx?id=e31c9509-9065-49a5-8125-83a50d5f4947</guid>
      <pubDate>Mon, 21 Jul 2008 18:08:40 -2300</pubDate>
      <category>Administration</category>
      <category>SharePoint</category>
      <dc:publisher>eamon</dc:publisher>
      <pingback:server>http://www.eb.net.nz/blog/pingback.axd</pingback:server>
      <pingback:target>http://www.eb.net.nz/blog/post.aspx?id=e31c9509-9065-49a5-8125-83a50d5f4947</pingback:target>
      <slash:comments>11212</slash:comments>
      <trackback:ping>http://www.eb.net.nz/blog/trackback.axd?id=e31c9509-9065-49a5-8125-83a50d5f4947</trackback:ping>
      <wfw:comment>http://www.eb.net.nz/blog/post/2008/07/21/Creating-Multiple-SubSites-with-STSADM.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.eb.net.nz/blog/syndication.axd?post=e31c9509-9065-49a5-8125-83a50d5f4947</wfw:commentRss>
    </item>
    <item>
      <title>Accessing Database Images in ASP.NET and displaying them with .JPG extension</title>
      <description>&lt;p&gt;
In this post I am going to explain how to use the latest bits of the .NET framework (.NET 3.5 SP1) to display images from a database so the user sees them with a *.JPG extension. This is something that should be simple, yet, takes a little bit of work! The scenario I am using is as follows:
&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;MSFT SQL 2005 Database &lt;/li&gt;
	&lt;li&gt;.NET 3.5 SP1 Entity Framework &lt;/li&gt;
	&lt;li&gt;.NET 2.5 SP1 Routing Engine &lt;/li&gt;
	&lt;li&gt;ASP.NET Web Forms &lt;/li&gt;
	&lt;li&gt;IIS 7 on a Vista PC (But works on Server 2008)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
OK so to paint the picture, by the end of this we will be able to access an image from a URL that looks like this: &lt;em&gt;http://yoursite.com/Image/imgID-1-T.jpg&lt;/em&gt;. This will return the image with ID of 1 and it will be a thumbnail image, but I will show how to display either the thumbnail or full size version, or what ever you want!
&lt;/p&gt;
&lt;h3&gt;Displaying the images in an ASP.NET Webform&lt;/h3&gt;
&lt;p&gt;
Rendering the image to a web page can be quite a cool thing to do, the code below takes a few different pieces of a pie and puts them nicely together! I will start off by accessing the data, then altering the images (if needed) and finally rendering the images to the page.
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;Note: As this page will be accessed via a routing rule that passes in the name of the JPG being accessed through, the JPG has to be named with the format of ImageType-ImageID-ImageSize.&lt;/em&gt;
&lt;/p&gt;
&lt;p&gt;
For this example, I have created a folder called _Images. Inside that folder I have an aspx page called image.aspx. The actual ASPX page is standard as shown below:
&lt;/p&gt;
&lt;div style="font-size: 8pt; margin: 20px 0px 10px; overflow: auto; width: 97.5%; cursor: text; max-height: 200px; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; border: gray 1px solid; padding: 4px"&gt;
&lt;div style="font-size: 8pt; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; border-style: none; padding: 0px"&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: white; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;   1:&lt;/span&gt; &lt;span style="background-color: #ffff00"&gt;&amp;lt;%@ Page Language=&amp;quot;vb&amp;quot; AutoEventWireup=&amp;quot;false&amp;quot; CodeBehind=&amp;quot;Image.aspx.vb&amp;quot; Inherits=&amp;quot;Example.Image&amp;quot; EnableTheming=&amp;quot;false&amp;quot; StylesheetTheme=&amp;quot;&amp;quot; %&amp;gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;   2:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;!&lt;/span&gt;&lt;span style="color: #800000"&gt;DOCTYPE&lt;/span&gt; &lt;span style="color: #ff0000"&gt;html&lt;/span&gt; &lt;span style="color: #ff0000"&gt;PUBLIC&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;quot;-//W3C//DTD XHTML 1.0 Transitional//EN&amp;quot;&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: white; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;   3:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;html&lt;/span&gt; &lt;span style="color: #ff0000"&gt;xmlns&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;http://www.w3.org/1999/xhtml&amp;quot;&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;   4:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;head&lt;/span&gt; &lt;span style="color: #ff0000"&gt;id&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Head1&amp;quot;&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: #0000ff"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: white; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;   5:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;title&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;Image&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;title&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;   6:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;head&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: white; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;   7:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;body&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;   8:&lt;/span&gt;&amp;nbsp; 
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: white; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;   9:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;body&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;  10:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;html&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h4&gt;Database&lt;/h4&gt;
&lt;p&gt;
The database in this example is a simple one table set-up with two columns in it, the table is called Images. 
&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;ImageID - Int field to hold the image ID &lt;/li&gt;
	&lt;li&gt;Image - Image field&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
Here is the SQL for the table:
&lt;/p&gt;
&lt;div style="font-size: 8pt; margin: 20px 0px 10px; overflow: auto; width: 97.5%; cursor: text; max-height: 200px; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; border: gray 1px solid; padding: 4px"&gt;
&lt;div style="font-size: 8pt; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; border-style: none; padding: 0px"&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: white; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;CREATE&lt;/span&gt; &lt;span style="color: #0000ff"&gt;TABLE&lt;/span&gt; [dbo].[Images](
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;   2:&lt;/span&gt;     [ImageID] [&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;] &lt;span style="color: #0000ff"&gt;IDENTITY&lt;/span&gt;(1,1) &lt;span style="color: #0000ff"&gt;NOT&lt;/span&gt; &lt;span style="color: #0000ff"&gt;NULL&lt;/span&gt;,
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: white; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;   3:&lt;/span&gt;     [Image] [image] &lt;span style="color: #0000ff"&gt;NOT&lt;/span&gt; &lt;span style="color: #0000ff"&gt;NULL&lt;/span&gt;,
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;   4:&lt;/span&gt;  &lt;span style="color: #0000ff"&gt;CONSTRAINT&lt;/span&gt; [PK_Images] &lt;span style="color: #0000ff"&gt;PRIMARY&lt;/span&gt; &lt;span style="color: #0000ff"&gt;KEY&lt;/span&gt; &lt;span style="color: #0000ff"&gt;CLUSTERED&lt;/span&gt; 
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: white; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;   5:&lt;/span&gt; (
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;   6:&lt;/span&gt;     [ImageID] &lt;span style="color: #0000ff"&gt;ASC&lt;/span&gt;
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: white; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;   7:&lt;/span&gt; )&lt;span style="color: #0000ff"&gt;WITH&lt;/span&gt; (PAD_INDEX  = &lt;span style="color: #0000ff"&gt;OFF&lt;/span&gt;, STATISTICS_NORECOMPUTE  = &lt;span style="color: #0000ff"&gt;OFF&lt;/span&gt;, 
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;   8:&lt;/span&gt; IGNORE_DUP_KEY = &lt;span style="color: #0000ff"&gt;OFF&lt;/span&gt;, ALLOW_ROW_LOCKS  = &lt;span style="color: #0000ff"&gt;ON&lt;/span&gt;, ALLOW_PAGE_LOCKS  = &lt;span style="color: #0000ff"&gt;ON&lt;/span&gt;) &lt;span style="color: #0000ff"&gt;ON&lt;/span&gt; [&lt;span style="color: #0000ff"&gt;PRIMARY&lt;/span&gt;]
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: white; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;   9:&lt;/span&gt; ) &lt;span style="color: #0000ff"&gt;ON&lt;/span&gt; [&lt;span style="color: #0000ff"&gt;PRIMARY&lt;/span&gt;] TEXTIMAGE_ON [&lt;span style="color: #0000ff"&gt;PRIMARY&lt;/span&gt;]
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;  10:&lt;/span&gt;&amp;nbsp; 
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: white; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;  11:&lt;/span&gt; GO
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;h4&gt;Code Behind&lt;/h4&gt;
&lt;p&gt;
My data-source is the Entity Framework (EF), but you could use any source to populate the code. First off I need to reference the System.Data namespaces that will allow me to work with the EF, also I have added a reference to the System.Drawing namespace that I will use to resize the images.
&lt;/p&gt;
&lt;div style="font-size: 8pt; margin: 20px 0px 10px; overflow: auto; width: 46.11%; cursor: text; max-height: 200px; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; height: 66px; background-color: #f4f4f4; border: gray 1px solid; padding: 4px"&gt;
&lt;div style="font-size: 8pt; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; border-style: none; padding: 0px"&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: white; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Imports&lt;/span&gt; System.Data.Objects
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;   2:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Imports&lt;/span&gt; System.Data.Objects.DataClasses
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: white; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;   3:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Imports&lt;/span&gt; System.Drawing.Image
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h4&gt;The Process of generating the image&lt;/h4&gt;
&lt;p&gt;
In this section I will explain how the code below works and what is happening through out. 
&lt;/p&gt;
&lt;p&gt;
Here is how the code below works:
&lt;/p&gt;
&lt;ol&gt;
	&lt;li&gt;First we need to create the EF context that we will use to get the images from the data classes. This is the ImageData definition. &lt;/li&gt;
	&lt;li&gt;The first thing we need to do in the Page_Load is to split up the name of the file. I will explain later how the file is routed to this page, but as we are using the routing rules, we need to get this name from the HttpContect. ImageName is set in the routing rules to pass the name of the image through to this page (see the &lt;strong&gt;Routing the Images using a *.JPG File&lt;/strong&gt; section).&amp;nbsp; &lt;/li&gt;
	&lt;li&gt;Now that we have access to the data and the image ID, we need to get the image out of the database. This is done using a lambda query on the context we opened above. We pass this to an instance of the Images class (this is an EF generated class). &lt;/li&gt;
	&lt;li&gt;As we are not rendering an aspx text page, we need to change the Content Type of the output, this is now &amp;quot;image/jpeg&amp;quot; &lt;/li&gt;
	&lt;li&gt;The next part of the process is to resize the image. As part of the image naming process (e.g. &amp;lt;img scr=&amp;quot;/image/ImgID-1-T.jpg&amp;quot;&amp;gt;) you need to make sure you have the &amp;quot;-&amp;quot; in the same order as I have and that you are using a size character you have defined in the code below.&lt;br /&gt;
	Notice there are three options, T and S being the resize options and the final is just rendering the full size image.&lt;/li&gt;
&lt;/ol&gt;
&lt;div style="font-size: 8pt; margin: 20px 0px 10px; overflow: auto; width: 97.5%; cursor: text; max-height: 600px; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; border: gray 1px solid; padding: 4px"&gt;
&lt;div style="font-size: 8pt; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; border-style: none; padding: 0px"&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: white; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Dim&lt;/span&gt; ImageData &lt;span style="color: #0000ff"&gt;as&lt;/span&gt; &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; ImageEntities
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;   2:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Protected&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Sub&lt;/span&gt; Page_Load(&lt;span style="color: #0000ff"&gt;ByVal&lt;/span&gt; sender &lt;span style="color: #0000ff"&gt;As&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Object&lt;/span&gt;, &lt;span style="color: #0000ff"&gt;ByVal&lt;/span&gt; e &lt;span style="color: #0000ff"&gt;As&lt;/span&gt; System.EventArgs) &lt;span style="color: #0000ff"&gt;Handles&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Me&lt;/span&gt;.Load
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: white; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;   3:&lt;/span&gt;     &lt;span style="color: #008000"&gt;&amp;#39;Split the File Name out to get the information we need&lt;/span&gt;
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;   4:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;Dim&lt;/span&gt; ImageInfo &lt;span style="color: #0000ff"&gt;As&lt;/span&gt; &lt;span style="color: #0000ff"&gt;String&lt;/span&gt;() = Context.Items(&lt;span style="color: #006080"&gt;&amp;quot;imagename&amp;quot;&lt;/span&gt;).ToString.Split(&lt;span style="color: #006080"&gt;&amp;quot;-&amp;quot;&lt;/span&gt;)
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: white; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;   5:&lt;/span&gt;     
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;   6:&lt;/span&gt;     &lt;span style="color: #008000"&gt;&amp;#39;In this example I am only accessing one data source, you could access many,&lt;/span&gt;
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: white; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;   7:&lt;/span&gt;     &lt;span style="color: #008000"&gt;&amp;#39;add a Select Case with the Image Type and select from other areas&lt;/span&gt;
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;   8:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;Dim&lt;/span&gt; ImageType &lt;span style="color: #0000ff"&gt;As&lt;/span&gt; &lt;span style="color: #0000ff"&gt;String&lt;/span&gt; = ImageInfo(0) 
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: white; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;   9:&lt;/span&gt;     
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;  10:&lt;/span&gt;     &lt;span style="color: #008000"&gt;&amp;#39;We need the ID of the image&lt;/span&gt;
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: white; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;  11:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;Dim&lt;/span&gt; ImageID &lt;span style="color: #0000ff"&gt;As&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Integer&lt;/span&gt; = ImageInfo(1)
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;  12:&lt;/span&gt;     
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: white; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;  13:&lt;/span&gt;     &lt;span style="color: #008000"&gt;&amp;#39;We need to know what size to change it to&lt;/span&gt;
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;  14:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;Dim&lt;/span&gt; ImageSize &lt;span style="color: #0000ff"&gt;As&lt;/span&gt; &lt;span style="color: #0000ff"&gt;String&lt;/span&gt; = ImageInfo(2)
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: white; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;  15:&lt;/span&gt;     
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;  16:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;Dim&lt;/span&gt; Images &lt;span style="color: #0000ff"&gt;As&lt;/span&gt; ImageModel.Images
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: white; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;  17:&lt;/span&gt;     Images = ShoppingData.Images.FirstOrDefault( _
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;  18:&lt;/span&gt;                         &lt;span style="color: #0000ff"&gt;Function&lt;/span&gt;(i &lt;span style="color: #0000ff"&gt;As&lt;/span&gt; Images) i.ImageID = ImageID)
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: white; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;  19:&lt;/span&gt;     
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;  20:&lt;/span&gt;     &lt;span style="color: #008000"&gt;&amp;#39;Cast the Image data from the database to a Byte()&lt;/span&gt;
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: white; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;  21:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;Dim&lt;/span&gt; aryContent &lt;span style="color: #0000ff"&gt;As&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Byte&lt;/span&gt;() = &lt;span style="color: #0000ff"&gt;DirectCast&lt;/span&gt;(Images.Image, &lt;span style="color: #0000ff"&gt;Byte&lt;/span&gt;())
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;  22:&lt;/span&gt;     
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: white; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;  23:&lt;/span&gt;     &lt;span style="color: #008000"&gt;&amp;#39;Create a new Memory Stream to hold the contents of the &lt;/span&gt;
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;  24:&lt;/span&gt;     &lt;span style="color: #008000"&gt;&amp;#39;image in ready for the Drawing.Image&lt;/span&gt;
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: white; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;  25:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;Dim&lt;/span&gt; imgStream &lt;span style="color: #0000ff"&gt;As&lt;/span&gt; &lt;span style="color: #0000ff"&gt;New&lt;/span&gt; IO.MemoryStream
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;  26:&lt;/span&gt;     
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: white; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;  27:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;Dim&lt;/span&gt; dummyCallBack &lt;span style="color: #0000ff"&gt;As&lt;/span&gt; GetThumbnailImageAbort
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;  28:&lt;/span&gt;     dummyCallBack = &lt;span style="color: #0000ff"&gt;New&lt;/span&gt; System.Drawing.Image.GetThumbnailImageAbort( _
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: white; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;  29:&lt;/span&gt;                                                         &lt;span style="color: #0000ff"&gt;AddressOf&lt;/span&gt; ThumbnailCallback)
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;  30:&lt;/span&gt;&amp;nbsp; 
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: white; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;  31:&lt;/span&gt;     imgStream.Write(aryContent, 0, aryContent.Length)
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;  32:&lt;/span&gt;&amp;nbsp; 
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: white; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;  33:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;Dim&lt;/span&gt; Img &lt;span style="color: #0000ff"&gt;As&lt;/span&gt; System.Drawing.Image
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;  34:&lt;/span&gt;     Img = Drawing.Image.FromStream(imgStream)
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: white; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;  35:&lt;/span&gt;     
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;  36:&lt;/span&gt;     &lt;span style="color: #008000"&gt;&amp;#39;Set the MIME tyoe&lt;/span&gt;
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: white; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;  37:&lt;/span&gt;     Response.ContentType = &lt;span style="color: #006080"&gt;&amp;quot;image/jpeg&amp;quot;&lt;/span&gt;
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;  38:&lt;/span&gt;     &lt;span style="color: #008000"&gt;&amp;#39;Resize the image if we need to&lt;/span&gt;
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: white; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;  39:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;If&lt;/span&gt; ImageSize = &lt;span style="color: #006080"&gt;&amp;quot;T&amp;quot;&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Then&lt;/span&gt;
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;  40:&lt;/span&gt;         &lt;span style="color: #008000"&gt;&amp;#39;This will keep the image 100px high and change the width to keep the &lt;/span&gt;
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: white; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;  41:&lt;/span&gt;         &lt;span style="color: #008000"&gt;&amp;#39;ratio correct&lt;/span&gt;
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;  42:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;Dim&lt;/span&gt; ratio = Img.Width / Img.Height
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: white; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;  43:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;Dim&lt;/span&gt; height = 100
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;  44:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;Dim&lt;/span&gt; width = 100 * ratio
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: white; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;  45:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;Dim&lt;/span&gt; thumbnail &lt;span style="color: #0000ff"&gt;As&lt;/span&gt; Drawing.Image = Img.GetThumbnailImage( _ 
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;  46:&lt;/span&gt;                                             width, height, dummyCallBack, IntPtr.Zero)
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: white; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;  47:&lt;/span&gt;         thumbnail.Save(Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg)
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;  48:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;ElseIf&lt;/span&gt; ImageSize = &lt;span style="color: #006080"&gt;&amp;quot;S&amp;quot;&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Then&lt;/span&gt;
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: white; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;  49:&lt;/span&gt;         &lt;span style="color: #008000"&gt;&amp;#39;This will keep the image 100px wide and change the height to keep the &lt;/span&gt;
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;  50:&lt;/span&gt;         &lt;span style="color: #008000"&gt;&amp;#39;ratio correct&lt;/span&gt;
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: white; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;  51:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;Dim&lt;/span&gt; ratio = Img.Height / Img.Width
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;  52:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;Dim&lt;/span&gt; height = 100 * ratio
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: white; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;  53:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;Dim&lt;/span&gt; width = 100
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;  54:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;Dim&lt;/span&gt; thumbnail &lt;span style="color: #0000ff"&gt;As&lt;/span&gt; Drawing.Image = Img.GetThumbnailImage(width, height, _
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: white; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;  55:&lt;/span&gt;                                                            dummyCallBack, IntPtr.Zero)
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;  56:&lt;/span&gt;         thumbnail.Save(Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg)
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: white; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;  57:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;Else&lt;/span&gt;
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;  58:&lt;/span&gt;         Img.Save(Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg)
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: white; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;  59:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;End&lt;/span&gt; &lt;span style="color: #0000ff"&gt;If&lt;/span&gt;
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;  60:&lt;/span&gt;     Response.&lt;span style="color: #0000ff"&gt;End&lt;/span&gt;()
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: white; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;  61:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;End&lt;/span&gt; Sub
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;
The above code will now render an image, but will have to go via the routing engine. If you want to skip that step change the Context.Items code to a Request.QueryString and pass through some parameters that way.
&lt;/p&gt;
&lt;h3&gt;Routing the Images using a *.JPG File&lt;/h3&gt;
&lt;p&gt;
To route the images with a certain path and extension I used the example &lt;a href="http://chriscavanagh.wordpress.com/2008/03/11/aspnet-routing-goodbye-url-rewriting/" target="_blank" title="ASP.NET Routing"&gt;Chris Cavanagh gave on his blog&lt;/a&gt;. His example was in C#, so I converted it and have the VB example below. First off, I added a new class file to my project and put the routing functions in that. Then I referenced those classes from the global.asax.
&lt;/p&gt;
&lt;h4&gt;PageRouter Class&lt;/h4&gt;
&lt;p&gt;
The PageRouter class will handle all the setting of page routing rules. The first thing we have to do is reference some of the namespaces we are going to use in the class:
&lt;/p&gt;
&lt;div style="font-size: 8pt; margin: 20px 0px 10px; overflow: auto; width: 47.25%; cursor: text; max-height: 200px; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; height: 164px; background-color: #f4f4f4; border: gray 1px solid; padding: 4px"&gt;
&lt;div style="font-size: 8pt; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; border-style: none; padding: 0px"&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: white; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Imports&lt;/span&gt; System
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;   2:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Imports&lt;/span&gt; System.Web
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: white; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;   3:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Imports&lt;/span&gt; System.Web.UI
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;   4:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Imports&lt;/span&gt; System.Web.UI.HtmlControls
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: white; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;   5:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Imports&lt;/span&gt; System.Web.UI.WebControls
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;   6:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Imports&lt;/span&gt; System.Web.UI.WebControls.WebParts
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: white; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;   7:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Imports&lt;/span&gt; System.Web.Routing
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;   8:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Imports&lt;/span&gt; System.Web.Compilation
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;
The first class we want to create is a page handler class that will have our custom IRouteHandler and will do the registering of our rules. For more information about what happens in this class, please read &lt;a href="http://chriscavanagh.wordpress.com/2008/03/11/aspnet-routing-goodbye-url-rewriting/" target="_blank"&gt;Chris&amp;#39; blog&lt;/a&gt;.
&lt;/p&gt;
&lt;div style="font-size: 8pt; margin: 20px 0px 10px; overflow: auto; width: 97.34%; cursor: text; max-height: 200px; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; height: 210px; background-color: #f4f4f4; border: gray 1px solid; padding: 4px"&gt;
&lt;div style="font-size: 8pt; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; border-style: none; padding: 0px"&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: white; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Class&lt;/span&gt; WebFormRouteHandler(Of T &lt;span style="color: #0000ff"&gt;As&lt;/span&gt; {IHttpHandler, &lt;span style="color: #0000ff"&gt;New&lt;/span&gt;})
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;   2:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;Implements&lt;/span&gt; IRouteHandler
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: white; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;   3:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;Private&lt;/span&gt; _virtualpath
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;   4:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;Public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Property&lt;/span&gt; VirtualPath() &lt;span style="color: #0000ff"&gt;As&lt;/span&gt; &lt;span style="color: #0000ff"&gt;String&lt;/span&gt;
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: white; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;   5:&lt;/span&gt;             &lt;span style="color: #0000ff"&gt;Get&lt;/span&gt;
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;   6:&lt;/span&gt;                 &lt;span style="color: #0000ff"&gt;Return&lt;/span&gt; _virtualpath
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: white; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;   7:&lt;/span&gt;             &lt;span style="color: #0000ff"&gt;End&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Get&lt;/span&gt;
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;   8:&lt;/span&gt;             &lt;span style="color: #0000ff"&gt;Set&lt;/span&gt;(&lt;span style="color: #0000ff"&gt;ByVal&lt;/span&gt; value &lt;span style="color: #0000ff"&gt;As&lt;/span&gt; &lt;span style="color: #0000ff"&gt;String&lt;/span&gt;)
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: white; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;   9:&lt;/span&gt;                 _virtualpath = value
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;  10:&lt;/span&gt;             &lt;span style="color: #0000ff"&gt;End&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Set&lt;/span&gt;
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: white; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;  11:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;End&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Property&lt;/span&gt;
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;  12:&lt;/span&gt;&amp;nbsp; 
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: white; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;  13:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;Public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Sub&lt;/span&gt; &lt;span style="color: #0000ff"&gt;New&lt;/span&gt;(&lt;span style="color: #0000ff"&gt;ByVal&lt;/span&gt; virtualPath &lt;span style="color: #0000ff"&gt;As&lt;/span&gt; &lt;span style="color: #0000ff"&gt;String&lt;/span&gt;)
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;  14:&lt;/span&gt;             _virtualpath = virtualPath
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: white; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;  15:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;End&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Sub&lt;/span&gt;
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;  16:&lt;/span&gt;&amp;nbsp; 
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: white; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;  17:&lt;/span&gt; &lt;span style="color: #cc6633"&gt;#Region&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;IRouteHandler Members&amp;quot;&lt;/span&gt;
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;  18:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;Public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Function&lt;/span&gt; GetHttpHandler(&lt;span style="color: #0000ff"&gt;ByVal&lt;/span&gt; requestContext &lt;span style="color: #0000ff"&gt;As&lt;/span&gt; System.Web.Routing.RequestContext) _
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: white; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;  19:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;As&lt;/span&gt; System.Web.IHttpHandler &lt;span style="color: #0000ff"&gt;Implements&lt;/span&gt; System.Web.Routing.IRouteHandler.GetHttpHandler
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;  20:&lt;/span&gt;             &lt;span style="color: #0000ff"&gt;For&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Each&lt;/span&gt; value &lt;span style="color: #0000ff"&gt;In&lt;/span&gt; requestContext.RouteData.Values
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: white; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;  21:&lt;/span&gt;                 requestContext.HttpContext.Items(value.Key) = value.Value
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;  22:&lt;/span&gt;             &lt;span style="color: #0000ff"&gt;Next&lt;/span&gt;
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: white; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;  23:&lt;/span&gt;             &lt;span style="color: #0000ff"&gt;If&lt;/span&gt; (VirtualPath IsNot &lt;span style="color: #0000ff"&gt;Nothing&lt;/span&gt;) &lt;span style="color: #0000ff"&gt;Then&lt;/span&gt;
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;  24:&lt;/span&gt;                 &lt;span style="color: #0000ff"&gt;Return&lt;/span&gt; (&lt;span style="color: #0000ff"&gt;DirectCast&lt;/span&gt;(BuildManager.CreateInstanceFromVirtualPath(VirtualPath, &lt;span style="color: #0000ff"&gt;GetType&lt;/span&gt;(T)), IHttpHandler))
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: white; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;  25:&lt;/span&gt;             &lt;span style="color: #0000ff"&gt;Else&lt;/span&gt;
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;  26:&lt;/span&gt;                 &lt;span style="color: #0000ff"&gt;Return&lt;/span&gt; &lt;span style="color: #0000ff"&gt;New&lt;/span&gt; T()
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: white; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;  27:&lt;/span&gt;             &lt;span style="color: #0000ff"&gt;End&lt;/span&gt; &lt;span style="color: #0000ff"&gt;If&lt;/span&gt;
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;  28:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;End&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Function&lt;/span&gt;
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: white; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;  29:&lt;/span&gt; &lt;span style="color: #cc6633"&gt;#End Region&lt;/span&gt;
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;  30:&lt;/span&gt;&amp;nbsp; 
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: white; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;  31:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;End&lt;/span&gt; Class
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;
Once that is done we have to create our PageRouter class, we will reference this later in the Global.asax. This class will hold all of the routing rules we want to use in our project. This project calls on the WebFormRouteHandler to register the pages. 
&lt;/p&gt;
&lt;div style="font-size: 8pt; margin: 20px 0px 10px; overflow: auto; width: 97.5%; cursor: text; max-height: 200px; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; border: gray 1px solid; padding: 4px"&gt;
&lt;div style="font-size: 8pt; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; border-style: none; padding: 0px"&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: white; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Class&lt;/span&gt; PageRouter
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;   2:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;Public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Shared&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Sub&lt;/span&gt; RegisterRoutes(&lt;span style="color: #0000ff"&gt;ByVal&lt;/span&gt; routes &lt;span style="color: #0000ff"&gt;As&lt;/span&gt; RouteCollection)
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: white; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;   3:&lt;/span&gt;             &lt;span style="color: #008000"&gt;&amp;#39; Note: Change the URL to &amp;quot;{controller}.mvc/{action}/{id}&amp;quot; to enable &lt;/span&gt;
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;   4:&lt;/span&gt;             &lt;span style="color: #008000"&gt;&amp;#39; automatic support on IIS6 and IIS7 classic mode &lt;/span&gt;
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: white; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;   5:&lt;/span&gt;             routes.Add(&lt;span style="color: #0000ff"&gt;New&lt;/span&gt; Route(&lt;span style="color: #006080"&gt;&amp;quot;Image/{imagename}.jpg&amp;quot;&lt;/span&gt;, &lt;span style="color: #0000ff"&gt;New&lt;/span&gt; WebFormRouteHandler(Of Page)(&lt;span style="color: #006080"&gt;&amp;quot;~/_Images/Image.aspx&amp;quot;&lt;/span&gt;)))
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;   6:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;End&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Sub&lt;/span&gt;
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: white; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;   7:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;End&lt;/span&gt; Class
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;
The code above will catch any requests coming for images at &lt;em&gt;http://yoursite.com/image/imgID-1-T.jpg&lt;/em&gt; and send them to our image page. You will notice this is where we set the name of the context item, {imagename}.
&lt;/p&gt;
&lt;h4&gt;Global.asax Code&lt;/h4&gt;
&lt;p&gt;
Finally we need to fire the PageRouter class and register the routes. When the application starts, I want to set all then routing rules, so in the global.asax I add the following code to the Application_Start subroutine. Please note, you will have to reference the System.Web namespace (Imports System.Web.Routing).
&lt;/p&gt;
&lt;div style="font-size: 8pt; margin: 20px 0px 10px; overflow: auto; width: 59.99%; cursor: text; max-height: 200px; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; height: 94px; background-color: #f4f4f4; border: gray 1px solid; padding: 4px"&gt;
&lt;div style="font-size: 8pt; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; border-style: none; padding: 0px"&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: white; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Sub&lt;/span&gt; Application_Start(&lt;span style="color: #0000ff"&gt;ByVal&lt;/span&gt; sender &lt;span style="color: #0000ff"&gt;As&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Object&lt;/span&gt;, &lt;span style="color: #0000ff"&gt;ByVal&lt;/span&gt; e &lt;span style="color: #0000ff"&gt;As&lt;/span&gt; EventArgs)
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;   2:&lt;/span&gt;     PageRouter.RegisterRoutes(RouteTable.Routes)
&lt;/pre&gt;
&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: consolas, 'Courier New', courier, monospace; background-color: white; border-style: none; padding: 0px"&gt;
&lt;span style="color: #606060"&gt;   3:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;End&lt;/span&gt; Sub
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;Finally&lt;/h3&gt;
&lt;p&gt;
Hopefully that explains how to render a database image as a *.JPG using ASP.NET SP1! There are some cool things we can now do straight out of the box, and from what I have seen of SP1 I can&amp;#39;t wait for it to be released!
&lt;/p&gt;
</description>
      <link>http://www.eb.net.nz/blog/post/2008/07/20/Accessing-Database-Images-in-ASPNET-and-using-the-Routing-Engine-to-rename-the-file.aspx</link>
      <author>eamon.nospam@nospam.eb.net.nz (Eamon)</author>
      <comments>http://www.eb.net.nz/blog/post/2008/07/20/Accessing-Database-Images-in-ASPNET-and-using-the-Routing-Engine-to-rename-the-file.aspx#comment</comments>
      <guid>http://www.eb.net.nz/blog/post.aspx?id=ad7f881a-3af7-4a9b-9df3-08a4e422ead3</guid>
      <pubDate>Sun, 20 Jul 2008 00:03:00 -2300</pubDate>
      <category>.NET Development</category>
      <dc:publisher>Eamon</dc:publisher>
      <pingback:server>http://www.eb.net.nz/blog/pingback.axd</pingback:server>
      <pingback:target>http://www.eb.net.nz/blog/post.aspx?id=ad7f881a-3af7-4a9b-9df3-08a4e422ead3</pingback:target>
      <slash:comments>5765</slash:comments>
      <trackback:ping>http://www.eb.net.nz/blog/trackback.axd?id=ad7f881a-3af7-4a9b-9df3-08a4e422ead3</trackback:ping>
      <wfw:comment>http://www.eb.net.nz/blog/post/2008/07/20/Accessing-Database-Images-in-ASPNET-and-using-the-Routing-Engine-to-rename-the-file.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.eb.net.nz/blog/syndication.axd?post=ad7f881a-3af7-4a9b-9df3-08a4e422ead3</wfw:commentRss>
    </item>
    <item>
      <title>10 Reasons why SharePoint Designer is cool!</title>
      <description>&lt;p&gt;
&lt;a href="http://www.eb.net.nz/Blog/image.axd?picture=WindowsLiveWriter/10CoolthingsaboutSharePointDesigner_948F/image_6.png"&gt;&lt;img style="margin: 0px 30px" src="/Blog/image.axd?picture=WindowsLiveWriter/10CoolthingsaboutSharePointDesigner_948F/image_thumb_2.png" border="0" alt="Microsoft Office SharePoint Designer" width="150" height="150" align="left" /&gt;&lt;/a&gt; It seems every time I talk to another developer about SharePoint, the second I mention &lt;a href="http://office.microsoft.com/en-us/sharepointdesigner/FX100487631033.aspx" target="_blank" title="SharePoint Designer Home Page"&gt;SharePoint Designer (SPD)&lt;/a&gt; I get a sideways look and told &amp;quot;I won&amp;#39;t use FrontPage&amp;quot;. First off, Expression blend is FrontPage; SharePoint Designer is a tool to modify and enhance SharePoint. Hopefully reading the rest of this post will motivate you to install it (or open it) and give it a good ole&amp;#39; fashion thrashing... not too hard, it has a tenancy to break every now and then... 
&lt;/p&gt;
&lt;p&gt;
The list below isn&amp;#39;t wholly features of SPD, it includes spin-offs that have come in handy for myself and others using it. 
&lt;/p&gt;
&lt;p&gt;
I have ordered this list from what I think are its great features, to the best features... in terms of how it helps me when tinkering with SharePoint. 
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;h3&gt;1. Let Technical BA&amp;#39;s and Power Users do their stuff&lt;/h3&gt;
&lt;p&gt;
I wasn&amp;#39;t sure whether to put this in the number one position or ten, but it made it to one... I am developer, I enjoy chunking through code and not doing workflow and page modifications that don&amp;#39;t include at least one line of VB. Getting a technical analyst trained up in SPD will save a lot of time for everyone. For example, say a client asks for modifications in a workshop, the analyst can do these on the fly, fantastic! This tool is aimed at those sort of power users, so let them go for it! 
&lt;/p&gt;
&lt;h3&gt;2. The DataView Web Part&lt;/h3&gt;
&lt;p&gt;
This is my favourite feature of SPD. It takes all of&amp;nbsp;two minutes to get a DataView Web Part on your page and linked up to a data source. Creating custom views and filtering information from around the site is simple using this feature. If a project manager has ever asked you to give them a summary of all their outstanding tasks across all their projects, then the DataView Web Part will help a lot! 
&lt;/p&gt;
&lt;p&gt;
Dataview Web Parts use XSLT to render the data. Looking back at point one, there are some things BA&amp;#39;s can&amp;#39;t do, one of those is tweaking the XSLT... the DataView Web Part offers an extension (&lt;a href="http://msdn.microsoft.com/en-us/library/aa505323.aspx" target="_blank" title="SharePoint Data View Web Part Extension Functions in the ddwrt Namespace"&gt;ddwrt namespace&lt;/a&gt;) that helps a bit, but there is always something that will need some customisation. 
&lt;/p&gt;
&lt;h3&gt;3. ASPX Page Editing&lt;/h3&gt;
&lt;p&gt;
Have you ever tried to edit SharePoint ASPX pages in Visual Studio? If you need to make changes to the look and feel of a page, then SPD is the only tool to use. If you are creating a feature, you wouldn&amp;#39;t use SPD to create the sites/lists etc. but to modify existing pages, SPD is great! Another advantage of SPD over Visual Studio is the preview... Visual Studio doesn&amp;#39;t give you a preview of the page when it is up on the site, SPD does. In saying that, you can copy the ASPX code from VS and paste it into SPD to see how it looks. 
&lt;/p&gt;
&lt;h3&gt;4. Branding SharePoint Sites&lt;a href="http://www.eb.net.nz/Blog/image.axd?picture=WindowsLiveWriter/10CoolthingsaboutSharePointDesigner_948F/image_2.png"&gt;&lt;img style="margin: 0px 20px 15px 10px; border-width: 0px" src="/Blog/image.axd?picture=WindowsLiveWriter/10CoolthingsaboutSharePointDesigner_948F/image_thumb.png" border="0" alt="SharePoint Designer Server Controls" width="289" height="193" align="right" /&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;
This isn&amp;#39;t a feature as such, but it is something that is near impossible without SPD. Modifying your &amp;quot;companyPage.master&amp;quot; is simple in SPD, it gives you a great preview, all the controls SharePoint controls in a menu (see image) ready to drag on and use. 
&lt;/p&gt;
&lt;p&gt;
Editing your corporate style sheet and seeing the results straight away is another bonus of SPD. Doing it the &lt;em&gt;hard &lt;/em&gt;way would mean changing it in an editor of choice, uploading it to the 12 hive, refreshing the APP pool and then the browser... SPD seems a lot easier! 
&lt;/p&gt;
&lt;h3&gt;5. Workflow Designer&lt;/h3&gt;
&lt;p&gt;
As I said in point one, getting some of the workflows completed by a BA will help the progress of the project to no end. Of course, there are limitations to the sort of things the SPD workflow designer can do, anything that needs some custom coding will have to go to the developers. All in all the workflow designer in SPD is a great tool for getting a workflow out and working! 
&lt;/p&gt;
&lt;h3&gt;6. SP Datasource&lt;a href="http://www.eb.net.nz/Blog/image.axd?picture=WindowsLiveWriter/10CoolthingsaboutSharePointDesigner_948F/image_4.png"&gt;&lt;img style="margin: 0px 15px 0px 10px; border-width: 0px" src="/Blog/image.axd?picture=WindowsLiveWriter/10CoolthingsaboutSharePointDesigner_948F/image_thumb_1.png" border="0" alt="Data From a SharePoint Web Service" width="267" height="206" align="right" /&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;
Out of the top five, but only just! This is an easy way to connect to any number of data sources, not just SharePoint. 
&lt;/p&gt;
&lt;p&gt;
A few Examples: 
&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;SharePoint Lists &lt;/li&gt;
	&lt;li&gt;SharePoint Libraries &lt;/li&gt;
	&lt;li&gt;Other Databases &lt;/li&gt;
	&lt;li&gt;XML Files &lt;/li&gt;
	&lt;li&gt;Linked sources &lt;/li&gt;
	&lt;li&gt;BDC (If you are running the enterprise version of MOSS, &lt;br /&gt;
	see my post on &lt;a href="http://www.eb.net.nz/Blog/post/2008/07/14/Differences-between-SharePoint-Services-and-Office-SharePoint-Server-Presentation-Explained.aspx" target="_blank"&gt;the differences between WSS and MOSS for details&lt;/a&gt;) &lt;/li&gt;
	&lt;li&gt;Web Services (SharePoint or Other), see the image for an example of output data&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
One of the really cool data sources is the &lt;strong&gt;Linked sources &lt;/strong&gt;data source. The can pull together any number of other data sources and give you a sing source, great for roll ups from multiple sites. 
&lt;/p&gt;
&lt;p&gt;
SP Datasource can be used by a DataView Web Part OR be dragged onto your page as a normal ASP.NET data source and consumed by any of the standard ASP.NET controls. For example, if you wanted a drop-down list that looks to an active issues list: connect to that list, filter the list showing only active and drag the data source onto the page, that easy! 
&lt;/p&gt;
&lt;h3&gt;7. Custom List Forms&lt;/h3&gt;
&lt;p&gt;
Much like the SP Datasource, this is something that is a must for anyone checking out SPD to have a look at. If you want to customise any list, survey, etc. within SharePoint, you will need to use this feature. This is a great thing if you want to add some additional information to a list form, change the way titles &lt;a href="http://www.eb.net.nz/Blog/image.axd?picture=WindowsLiveWriter/10CoolthingsaboutSharePointDesigner_948F/image_8.png"&gt;&lt;img style="margin: 10px 10px 0px 0px; border-width: 0px" src="/Blog/image.axd?picture=WindowsLiveWriter/10CoolthingsaboutSharePointDesigner_948F/image_thumb_3.png" border="0" alt="SharePoint Designer Folder List" width="232" height="172" align="left" /&gt;&lt;/a&gt;are displayed, or generally mess with a form. 
&lt;/p&gt;
&lt;h3&gt;8. Site Connectivity&lt;/h3&gt;
&lt;p&gt;
Using SPD to connect to a SharePoint site opens up a whole bunch of interesting places you wouldn&amp;#39;t have known about unless you went for a hunt through the database and 12 hive. Opening a site in SPD shows all the master page and css files that give the site its look and feel (see the image to the left). You can view all the sites and lists within the folder list. 
&lt;/p&gt;
&lt;h3&gt;9. Client Application&lt;/h3&gt;
&lt;p&gt;
The fact that SPD is a client application that can connect to SharePoint is great! There is no need to install a virtual server to do development work, it sits on a normal PC and connects to the deployment without issue. 
&lt;/p&gt;
&lt;h3&gt;10. Import/Export&lt;/h3&gt;
&lt;p&gt;
And finally in the tenth position the ability to export and import sites to either a SharePoint site template or a Personal Web Package. Makes it very easy to move something from a development environment to testing, without having to create a whole bunch of XML and config files. This feature is great for moving something like a Wiki from one site to another, without losing the links! 
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
Hopefully that gives you enough to break out the Office disk and put SharePoint Designer on your machine! If you have any comments or other reasons why SharePoint Designer is a cool product, please submit a comment! 
&lt;/p&gt;
</description>
      <link>http://www.eb.net.nz/blog/post/2008/07/15/10-Reasons-why-SharePoint-Designer-is-cool.aspx</link>
      <author>eamon.nospam@nospam.eb.net.nz (Eamon)</author>
      <comments>http://www.eb.net.nz/blog/post/2008/07/15/10-Reasons-why-SharePoint-Designer-is-cool.aspx#comment</comments>
      <guid>http://www.eb.net.nz/blog/post.aspx?id=3c9d590e-009b-4c05-bce1-57a62c700c26</guid>
      <pubDate>Tue, 15 Jul 2008 17:39:00 -2300</pubDate>
      <category>SharePoint</category>
      <category>WSS/MOSS Development</category>
      <dc:publisher>Eamon</dc:publisher>
      <pingback:server>http://www.eb.net.nz/blog/pingback.axd</pingback:server>
      <pingback:target>http://www.eb.net.nz/blog/post.aspx?id=3c9d590e-009b-4c05-bce1-57a62c700c26</pingback:target>
      <slash:comments>14952</slash:comments>
      <trackback:ping>http://www.eb.net.nz/blog/trackback.axd?id=3c9d590e-009b-4c05-bce1-57a62c700c26</trackback:ping>
      <wfw:comment>http://www.eb.net.nz/blog/post/2008/07/15/10-Reasons-why-SharePoint-Designer-is-cool.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.eb.net.nz/blog/syndication.axd?post=3c9d590e-009b-4c05-bce1-57a62c700c26</wfw:commentRss>
    </item>
    <item>
      <title>SharePoint Tip: Upgrading a SharePoint (SP0) Content Database to SP1</title>
      <description>&lt;p&gt;
If you have installed SharePoint (SP0) and you want to move a content database to a deployment running SP1 without upgrading the whole farm, read on! 
&lt;/p&gt;
&lt;p&gt;
First off, create a blank team site (Central Administration &amp;gt; Application Management &amp;gt; Create or extend Web application) and then follow the steps below. 
&lt;/p&gt;
&lt;p&gt;
When you attempt to attach the database through the central admin web interface, you might get hit with the following error: 
&lt;/p&gt;
&lt;blockquote&gt;
	Attaching this database requires upgrade, which could time out the browser session.&amp;nbsp; You must use the STSADM command &amp;#39;addcontentdb&amp;#39; to attach this database. 
&lt;/blockquote&gt;
&lt;p&gt;
To get around this, do what the error says... 
&lt;/p&gt;
&lt;ol&gt;
	&lt;li&gt;RDP to your SharePoint server &lt;/li&gt;
	&lt;li&gt;Open the Command Prompt (Start &amp;gt; Run &amp;gt;CMD) &lt;/li&gt;
	&lt;li&gt;Paste the following line into the prompt &amp;quot;cd %COMMONPROGRAMFILES%\Microsoft Shared\web server extensions\12\bin&amp;quot;, this will take you to the 12 Hive &lt;/li&gt;
	&lt;li&gt;Type the following command:&lt;br /&gt;
	stsadm -o addcontentdb -url http://SiteName -databasename WSS_Content_DATABASENAME -databaseserver DOMAIN\DATABASESERVER &lt;/li&gt;
	&lt;li&gt;Hit enter, and all going to plan you will get: &lt;strong&gt;Operation completed successfully&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
To make sure, go to Central Administration &amp;gt; Application Management &amp;gt; Content Databases and it should be there. Take the origional database (the one created when you created the site) offline and make sure this one is the only one online. Navigate to your site and again, make sure it is all there! 
&lt;/p&gt;
</description>
      <link>http://www.eb.net.nz/blog/post/2008/07/14/Upgrading-a-SharePoint-(SP0)-Content-Database-to-SP1.aspx</link>
      <author>eamon.nospam@nospam.eb.net.nz (Eamon)</author>
      <comments>http://www.eb.net.nz/blog/post/2008/07/14/Upgrading-a-SharePoint-(SP0)-Content-Database-to-SP1.aspx#comment</comments>
      <guid>http://www.eb.net.nz/blog/post.aspx?id=dc6b2c69-81b1-4e98-86de-2796a31d6451</guid>
      <pubDate>Mon, 14 Jul 2008 14:58:00 -2300</pubDate>
      <category>Administration</category>
      <category>SharePoint</category>
      <dc:publisher>Eamon</dc:publisher>
      <pingback:server>http://www.eb.net.nz/blog/pingback.axd</pingback:server>
      <pingback:target>http://www.eb.net.nz/blog/post.aspx?id=dc6b2c69-81b1-4e98-86de-2796a31d6451</pingback:target>
      <slash:comments>6731</slash:comments>
      <trackback:ping>http://www.eb.net.nz/blog/trackback.axd?id=dc6b2c69-81b1-4e98-86de-2796a31d6451</trackback:ping>
      <wfw:comment>http://www.eb.net.nz/blog/post/2008/07/14/Upgrading-a-SharePoint-(SP0)-Content-Database-to-SP1.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.eb.net.nz/blog/syndication.axd?post=dc6b2c69-81b1-4e98-86de-2796a31d6451</wfw:commentRss>
    </item>
  </channel>
</rss>