<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://weblogs.asp.net/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Kevin Isom</title><link>http://weblogs.asp.net/kevinisom/default.aspx</link><description>Just a good ol' boy, by-God Virginia-proud and country-sophisticated -- sort of like a John Deere tractor with air conditioning and satellite radio.</description><dc:language>en</dc:language><generator>CommunityServer 2007 SP1 (Build: 20510.895)</generator><item><title>Testing Web Services remotely</title><link>http://weblogs.asp.net/kevinisom/archive/2008/08/26/testing-web-services-remotely.aspx</link><pubDate>Mon, 25 Aug 2008 23:48:20 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6565300</guid><dc:creator>kevinisom</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/kevinisom/rsscomments.aspx?PostID=6565300</wfw:commentRss><comments>http://weblogs.asp.net/kevinisom/archive/2008/08/26/testing-web-services-remotely.aspx#comments</comments><description>&lt;p&gt;I hate it when I forget something. I had one of the guys on my team today asked me how to invoke a web service remotely as he was getting an error. Well I knew right away what the problem was. But could remember the solution so I had to look and now I'm gonna put it here so it'll be easier to find next time.&lt;/p&gt;  &lt;div class="csharpcode"&gt;   &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;system.web&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;  &lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;webServices&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;protocols&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;add&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;HttpGet&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;add&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;HttpPost&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;protocols&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;webServices&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;system.web&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;  &lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;&lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;&lt;/p&gt;

&lt;p&gt;Now I don't recommend this for production, but it's pretty useful for testing.&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6565300" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/kevinisom/archive/tags/XML/default.aspx">XML</category><category domain="http://weblogs.asp.net/kevinisom/archive/tags/web+services/default.aspx">web services</category><category domain="http://weblogs.asp.net/kevinisom/archive/tags/web_2E00_config/default.aspx">web.config</category></item><item><title>Web Development with Internet Explorer</title><link>http://weblogs.asp.net/kevinisom/archive/2008/02/29/web-development-with-internet-explorer.aspx</link><pubDate>Fri, 29 Feb 2008 04:01:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:5880004</guid><dc:creator>kevinisom</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/kevinisom/rsscomments.aspx?PostID=5880004</wfw:commentRss><comments>http://weblogs.asp.net/kevinisom/archive/2008/02/29/web-development-with-internet-explorer.aspx#comments</comments><description>&lt;p&gt;Firebug rocks. Nothing, I mean nothing beats it for debug web pages. But what do you do for problems specific to IE (most notably IE 6) Here are a list of tools I use to help cause telling the user to get a real browser is not a solution&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=E59C3964-672D-4511-BB3E-2D5E1DB91038&amp;amp;displaylang=en" target="_blank"&gt;Internet Explorer Developer Toolbar&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;This toolbar provides some of the features of firebug.   &lt;br /&gt;&lt;a href="http://weblogs.asp.net/blogs/kevinisom/WindowsLiveWriter/WebDevelopmentwithInternetExplorer_ED7D/CropperCapture%5B2%5D.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="154" alt="CropperCapture[2]" src="http://weblogs.asp.net/blogs/kevinisom/WindowsLiveWriter/WebDevelopmentwithInternetExplorer_ED7D/CropperCapture%5B2%5D_thumb.png" width="406" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://westciv.com/xray/" target="_blank"&gt;XRAY&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Is a bookmarklet that let's you see information about elements on a page.   &lt;br /&gt;&lt;a href="http://weblogs.asp.net/blogs/kevinisom/WindowsLiveWriter/WebDevelopmentwithInternetExplorer_ED7D/CropperCapture%5B3%5D.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="154" alt="CropperCapture[3]" src="http://weblogs.asp.net/blogs/kevinisom/WindowsLiveWriter/WebDevelopmentwithInternetExplorer_ED7D/CropperCapture%5B3%5D_thumb.png" width="404" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.my-debugbar.com/wiki/CompanionJS/HomePage" target="_blank"&gt;Companion.JS&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;An javascript debugger for IE   &lt;br /&gt;&lt;a href="http://weblogs.asp.net/blogs/kevinisom/WindowsLiveWriter/WebDevelopmentwithInternetExplorer_ED7D/CropperCapture%5B4%5D.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="175" alt="CropperCapture[4]" src="http://weblogs.asp.net/blogs/kevinisom/WindowsLiveWriter/WebDevelopmentwithInternetExplorer_ED7D/CropperCapture%5B4%5D_thumb.png" width="324" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;This may not be free in the future. Debug Bar from the same guy is also a very useful tool, but it's not free for professional use but probably worth the 59 euro if you do a lot of work with IE.&lt;/p&gt;  &lt;p&gt;And finally something while not useful for debugging but damn useful in its own right is the &lt;a href="http://www.ieforge.com/InlineSearch/HomePage" target="_blank"&gt;Inline Search for IE&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://weblogs.asp.net/blogs/kevinisom/WindowsLiveWriter/WebDevelopmentwithInternetExplorer_ED7D/CropperCapture%5B5%5D.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="45" alt="CropperCapture[5]" src="http://weblogs.asp.net/blogs/kevinisom/WindowsLiveWriter/WebDevelopmentwithInternetExplorer_ED7D/CropperCapture%5B5%5D_thumb.png" width="644" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Hope this helps somebody out.&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=5880004" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/kevinisom/archive/tags/Tips/default.aspx">Tips</category><category domain="http://weblogs.asp.net/kevinisom/archive/tags/Tools/default.aspx">Tools</category></item><item><title>Visual Basic.Net ain't half bad</title><link>http://weblogs.asp.net/kevinisom/archive/2008/02/29/visual-basic-net-ain-t-half-bad.aspx</link><pubDate>Fri, 29 Feb 2008 01:49:29 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:5879512</guid><dc:creator>kevinisom</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/kevinisom/rsscomments.aspx?PostID=5879512</wfw:commentRss><comments>http://weblogs.asp.net/kevinisom/archive/2008/02/29/visual-basic-net-ain-t-half-bad.aspx#comments</comments><description>&lt;p&gt;There I said it.&lt;/p&gt;  &lt;p&gt;I'm a C# guy. Now about 4 years when I started with .Net I started writing in VB.Net but I quickly decided to move C#. This, despite having spent the 3+ years prior working in ASP Classic. After a little bit of C# I quickly adopted the typical C# snobbish opinion of VB. For no good reason mind you, just cause it was different.&lt;/p&gt;  &lt;h2&gt;My how things change.&lt;/h2&gt;  &lt;p&gt;I've joined a VB team and instead of trying to make the team change to C# I figured I'd just get back to VB. Also we do a lot of work with XML so it got me looking into the VB 9.0 XML features and I found that you can do things like this:&lt;/p&gt;  &lt;div class="csharpcode"&gt;   &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;Imports&lt;/span&gt; &amp;lt;xmlns:ns=&lt;span class="str"&gt;&amp;quot;http://contacts&amp;quot;&lt;/span&gt;&amp;gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;&lt;span class="kwrd"&gt;Dim&lt;/span&gt; contact1 &lt;span class="kwrd"&gt;As&lt;/span&gt; XElement = _&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;    &amp;lt;contact&amp;gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;      &amp;lt;name&amp;gt;Joe Bloggs&amp;lt;/name&amp;gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;      &amp;lt;phone type=&lt;span class="str"&gt;&amp;quot;home&amp;quot;&lt;/span&gt;&amp;gt;09-555-0144&amp;lt;/phone&amp;gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;      &amp;lt;phone type=&lt;span class="str"&gt;&amp;quot;mobile&amp;quot;&lt;/span&gt;&amp;gt;021-555-0145&amp;lt;/phone&amp;gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;    &amp;lt;/contact&amp;gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;style type="text/css"&gt;



.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt;Okay, nifty and all, but what do you do from there...How about this?&lt;/p&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;Dim&lt;/span&gt; phoneTypes &lt;span class="kwrd"&gt;As&lt;/span&gt; XElement = _&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;  &amp;lt;phoneTypes&amp;gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;      &amp;lt;%= From phone &lt;span class="kwrd"&gt;In&lt;/span&gt; contacts...&amp;lt;phone&amp;gt; _&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;          &lt;span class="kwrd"&gt;Select&lt;/span&gt; &amp;lt;type&amp;gt;&amp;lt;%= phone.@type %&amp;gt;&amp;lt;/type&amp;gt; _&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;      %&amp;gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;  &amp;lt;/phoneTypes&amp;gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;And that will give you the following XML&lt;/p&gt;

&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;phoneTypes&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;type&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;home&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;type&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;type&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;mobile&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;type&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;phoneTypes&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;style type="text/css"&gt;


.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt;That's rather cool and really useful with some of the stuff I'll be working on.&lt;/p&gt;

&lt;p&gt;Check out the &lt;a href="http://msdn2.microsoft.com/en-us/library/bb384460.aspx" target="_blank"&gt;Overview of LINQ to XML in Visual Basic&lt;/a&gt; for more details&lt;/p&gt;

&lt;p&gt;Now, I still want to say I'm a C# guy, but I think the snickering at the mention of VB stops now.&amp;#160; &lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=5879512" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/kevinisom/archive/tags/Tips/default.aspx">Tips</category><category domain="http://weblogs.asp.net/kevinisom/archive/tags/Code/default.aspx">Code</category><category domain="http://weblogs.asp.net/kevinisom/archive/tags/Visual+Basic/default.aspx">Visual Basic</category><category domain="http://weblogs.asp.net/kevinisom/archive/tags/XML/default.aspx">XML</category></item><item><title>Visual Basic.Net and NUnit Gotcha</title><link>http://weblogs.asp.net/kevinisom/archive/2008/02/28/visual-basic-net-and-nunit-gotcha.aspx</link><pubDate>Wed, 27 Feb 2008 20:41:39 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:5872387</guid><dc:creator>kevinisom</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/kevinisom/rsscomments.aspx?PostID=5872387</wfw:commentRss><comments>http://weblogs.asp.net/kevinisom/archive/2008/02/28/visual-basic-net-and-nunit-gotcha.aspx#comments</comments><description>&lt;p&gt;I like the NUnit 2.4 &lt;a href="http://nunit.com/blogs/?p=44" target="_blank"&gt;Constraint based syntax&lt;/a&gt;. So In my new role I am having to implement Unit Testing so I decided on going with &lt;a href="http://www.nunit.org" target="_blank"&gt;NUnit&lt;/a&gt; to begin with despite my preference for &lt;a href="http://www.mbunit.com/" target="_blank"&gt;MbUnit&lt;/a&gt;. But once I got started writing my tests, I discover Is is a keyword in VB (I'm more of a C# person, but hey I'm no language bigot). I kinda freak out a little. Did I do something wrong? Forget to add something? Google a bit and still no joy. Then I remember the code examples installed with NUnit and have a look and what do you know? Is is now Iz in VB. Not exactly as clear as Is but you gotta do what you gotta do. So now in VB a Unit Test looks like this&lt;/p&gt;  &lt;div class="csharpcode"&gt;   &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;Imports&lt;/span&gt; NUnit.Framework&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;&lt;span class="kwrd"&gt;Imports&lt;/span&gt; NUnit.Framework.SyntaxHelpers&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;&amp;lt;TestFixture()&amp;gt; _&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;&lt;span class="kwrd"&gt;Public&lt;/span&gt; &lt;span class="kwrd"&gt;Class&lt;/span&gt; MyVIsualBasicSampleTests&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;    &amp;lt;Test()&amp;gt; _&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;    &lt;span class="kwrd"&gt;Public&lt;/span&gt; &lt;span class="kwrd"&gt;Sub&lt;/span&gt; TestBlankForSyntax()&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;        Assert.That(something.IsSomething(), Iz.&lt;span class="kwrd"&gt;False&lt;/span&gt;)&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;    &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Sub&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;    &amp;lt;Test()&amp;gt; _&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;    &lt;span class="kwrd"&gt;Public&lt;/span&gt; &lt;span class="kwrd"&gt;Sub&lt;/span&gt; AnotherSampleTestForSomethingElse()&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;        Assert.That(something.IsSomethingElse(), Iz.&lt;span class="kwrd"&gt;True&lt;/span&gt;)&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;    &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Sub&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  15:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  16:  &lt;/span&gt;&lt;span class="kwrd"&gt;End&lt;/span&gt; Class&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;&lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;&lt;/p&gt;

&lt;p&gt;And there you go. &lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=5872387" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/kevinisom/archive/tags/Tips/default.aspx">Tips</category><category domain="http://weblogs.asp.net/kevinisom/archive/tags/Code/default.aspx">Code</category><category domain="http://weblogs.asp.net/kevinisom/archive/tags/Unit+Testing/default.aspx">Unit Testing</category><category domain="http://weblogs.asp.net/kevinisom/archive/tags/Visual+Basic/default.aspx">Visual Basic</category></item><item><title>Web Application Projects and Profiles</title><link>http://weblogs.asp.net/kevinisom/archive/2008/02/28/web-application-projects-and-profiles.aspx</link><pubDate>Wed, 27 Feb 2008 20:05:17 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:5872161</guid><dc:creator>kevinisom</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/kevinisom/rsscomments.aspx?PostID=5872161</wfw:commentRss><comments>http://weblogs.asp.net/kevinisom/archive/2008/02/28/web-application-projects-and-profiles.aspx#comments</comments><description>&lt;p&gt;So, I'm working on a Web Application Project in Visual Studio 2008 and I realize I don't have a strongly typed Profile object...So I Google around and find that this a Problem in Visual Studio 2005 and that Microsoft didn't fix the problem in VS 2008. Needless to say I was a little unimpressed. But I also found the &lt;a href="http://code.msdn.microsoft.com/WebProfileBuilder/Release/ProjectReleases.aspx?ReleaseId=130" target="_blank"&gt;Web Profile Builder&lt;/a&gt; at the &lt;a href="http://code.msdn.microsoft.com/" target="_blank"&gt;MSDN Code Gallery&lt;/a&gt;. I followed the &lt;a title="Instructions for installing Web Profile Builder" href="http://weblogs.asp.net/joewrobel/archive/2008/02/03/web-profile-builder-for-web-application-projects.aspx" target="_blank"&gt;instructions here&lt;/a&gt; and was away running.&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=5872161" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/kevinisom/archive/tags/asp.net/default.aspx">asp.net</category><category domain="http://weblogs.asp.net/kevinisom/archive/tags/Tips/default.aspx">Tips</category><category domain="http://weblogs.asp.net/kevinisom/archive/tags/VisualStudio/default.aspx">VisualStudio</category></item><item><title>Hiding a Popup Panel with JavaScript</title><link>http://weblogs.asp.net/kevinisom/archive/2008/01/29/hiding-a-popup-panel-with-javascript.aspx</link><pubDate>Tue, 29 Jan 2008 03:34:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:5672655</guid><dc:creator>kevinisom</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/kevinisom/rsscomments.aspx?PostID=5672655</wfw:commentRss><comments>http://weblogs.asp.net/kevinisom/archive/2008/01/29/hiding-a-popup-panel-with-javascript.aspx#comments</comments><description>
&lt;p&gt;Had a instance where I needed to close the Popup Control with JavaScript&lt;/p&gt;
  &lt;div class="csharpcode"&gt;   
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;ajax:PopupControlExtender&lt;/span&gt; &lt;span class="attr"&gt;ID&lt;/span&gt;&lt;span class="kwrd"&gt;="pceShowPanel"&lt;/span&gt; &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;="server"&lt;/span&gt;&lt;/pre&gt;
  
&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;    &lt;span class="attr"&gt;TargetControlID&lt;/span&gt;&lt;span class="kwrd"&gt;="showPanel"&lt;/span&gt;&lt;/pre&gt;
  
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;    &lt;span class="attr"&gt;PopupControlID&lt;/span&gt;&lt;span class="kwrd"&gt;="popupPanel"&lt;/span&gt; &lt;/pre&gt;
  
&lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;    &lt;span class="attr"&gt;BehaviorID&lt;/span&gt;&lt;span class="kwrd"&gt;="popupBehavior"&lt;/span&gt;                 &lt;/pre&gt;
  
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;    &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;&lt;style type="text/css"&gt;

.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;So with that on your page just hide it with hidePopup().&lt;/p&gt;

&lt;div class="csharpcode"&gt;
  
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;function&lt;/span&gt; Hide(){&lt;/pre&gt;
  
&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;    $find(&lt;span class="str"&gt;'popupBehavior'&lt;/span&gt;).hidePopup()&lt;/pre&gt;
  
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;style type="text/css"&gt;

.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt;Of course you can show the popup as well with the showPopup() method. The real trick here is the &lt;a href="http://www.asp.net/AJAX/Documentation/Live/ClientReference/Global/FindShortcutMethod.aspx" target="_blank" mce_href="http://www.asp.net/AJAX/Documentation/Live/ClientReference/Global/FindShortcutMethod.aspx"&gt;$find&lt;/a&gt; shortcut method. The &lt;a href="http://www.asp.net/AJAX/Documentation/Live/ClientReference/Sys/ApplicationClass/SysApplicationFindComponentMethod.aspx" target="_blank" mce_href="http://www.asp.net/AJAX/Documentation/Live/ClientReference/Sys/ApplicationClass/SysApplicationFindComponentMethod.aspx"&gt;FindComponent&lt;/a&gt; method does just that and get's the component in this case the &lt;a href="http://asp.net/AJAX/AjaxControlToolkit/Samples/PopupControl/PopupControl.aspx" target="_blank" mce_href="http://asp.net/AJAX/AjaxControlToolkit/Samples/PopupControl/PopupControl.aspx"&gt;PopupExtender&lt;/a&gt; and allows you to call the methods associated with that control.&lt;/p&gt;

&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=5672655" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/kevinisom/archive/tags/ajaxcontroltoolkit/default.aspx">ajaxcontroltoolkit</category><category domain="http://weblogs.asp.net/kevinisom/archive/tags/ajax/default.aspx">ajax</category><category domain="http://weblogs.asp.net/kevinisom/archive/tags/asp.net/default.aspx">asp.net</category><category domain="http://weblogs.asp.net/kevinisom/archive/tags/Tips/default.aspx">Tips</category></item><item><title>Setting Form Values Automatically with SubSonic</title><link>http://weblogs.asp.net/kevinisom/archive/2007/10/30/setting-form-values-automatically-with-subsonic.aspx</link><pubDate>Tue, 30 Oct 2007 10:04:46 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:4835911</guid><dc:creator>kevinisom</dc:creator><slash:comments>6</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/kevinisom/rsscomments.aspx?PostID=4835911</wfw:commentRss><comments>http://weblogs.asp.net/kevinisom/archive/2007/10/30/setting-form-values-automatically-with-subsonic.aspx#comments</comments><description>&lt;p&gt;Tedious coding sucks. SubSonic saves lots of time. But I want it to save me more. So I've started working on a method that will fill out the controls for me so I don't have to. It's simple really. I just new() up a the model I will use and pass it to my method along with the UserControl I have my form elements in.&lt;/p&gt; &lt;div class="csharpcode"&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; SetupForm&amp;lt;T&amp;gt;(Control form, T activeRecord ) &lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;    &lt;span class="kwrd"&gt;where&lt;/span&gt; T : AbstractRecord&amp;lt;T&amp;gt; ,&lt;span class="kwrd"&gt;new&lt;/span&gt;()&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;{&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;    TableSchema.TableColumnSettingCollection settings = activeRecord.GetColumnSettings();&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;    &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (TableSchema.TableColumnSetting setting &lt;span class="kwrd"&gt;in&lt;/span&gt; settings)&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;    {&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;        Control settingControl = form.FindControl(setting.ColumnName);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;        &lt;span class="kwrd"&gt;if&lt;/span&gt; (settingControl &lt;span class="kwrd"&gt;is&lt;/span&gt; TextBox)&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;            ((TextBox)settingControl).Text = &lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;                activeRecord.GetColumnValue&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt;(setting.ColumnName);&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;        &lt;span class="kwrd"&gt;if&lt;/span&gt; (settingControl &lt;span class="kwrd"&gt;is&lt;/span&gt; DropDownList)&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;            ((DropDownList)settingControl).SelectedValue = &lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;                activeRecord.GetColumnValue&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt;(setting.ColumnName);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;    }&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  15:  &lt;/span&gt;}&lt;/pre&gt;&lt;/div&gt;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;

&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;

&lt;p&gt;The key thing is to make sure you have called EnsureChildControls() before calling this method.&lt;/p&gt;
&lt;p&gt;So in my control the code looks like&lt;/p&gt;
&lt;div class="csharpcode"&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;int&lt;/span&gt; issueId = SubSonic.Sugar.Web.QueryString&amp;lt;&lt;span class="kwrd"&gt;int&lt;/span&gt;&amp;gt;(&lt;span class="str"&gt;"issue"&lt;/span&gt;);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;&lt;span class="kwrd"&gt;if&lt;/span&gt; (issueId != 0)&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;{&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;    EnsureChildControls();&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;    Issue issue = &lt;span class="kwrd"&gt;new&lt;/span&gt; Issue(issueId);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;    &lt;span class="rem"&gt;//BasePage inherits from System.Web.UI.Page&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;    BasePage.SetupForm(&lt;span class="kwrd"&gt;this&lt;/span&gt;, issue);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;} &lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Now this is pretty rough and more than anything a proof of concept so your mileage may vary. But I figure this is a good place to start&lt;/p&gt;&lt;a href="http://www.dotnetkicks.com/kick/?url=http%3a%2f%2fweblogs.asp.net%2fkevinisom%2farchive%2f2007%2f10%2f30%2fsetting-form-values-automatically-with-subsonic.aspx"&gt;&lt;img alt="kick it on DotNetKicks.com" src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fweblogs.asp.net%2fkevinisom%2farchive%2f2007%2f10%2f30%2fsetting-form-values-automatically-with-subsonic.aspx" border="0"&gt;&lt;/a&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=4835911" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/kevinisom/archive/tags/asp.net/default.aspx">asp.net</category><category domain="http://weblogs.asp.net/kevinisom/archive/tags/Tips/default.aspx">Tips</category><category domain="http://weblogs.asp.net/kevinisom/archive/tags/SubSonic/default.aspx">SubSonic</category></item><item><title>Setting the enum from it's name</title><link>http://weblogs.asp.net/kevinisom/archive/2007/10/30/getting-the-name-of-an-enum.aspx</link><pubDate>Mon, 29 Oct 2007 17:55:46 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:4813353</guid><dc:creator>kevinisom</dc:creator><slash:comments>4</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/kevinisom/rsscomments.aspx?PostID=4813353</wfw:commentRss><comments>http://weblogs.asp.net/kevinisom/archive/2007/10/30/getting-the-name-of-an-enum.aspx#comments</comments><description>&lt;p&gt;I've changed this a bit due to some comments&lt;/p&gt; &lt;div class="csharpcode"&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;enum&lt;/span&gt; Directions&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;{&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;    Up,&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;    Down,&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;    Left,&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;    Right&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;}&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;&lt;span class="kwrd"&gt;void&lt;/span&gt; DoSomething()&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;{&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;    &lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;    Directions currentState =(Directions) Enum.Parse(&lt;span class="kwrd"&gt;typeof&lt;/span&gt;(Directions), &lt;span class="str"&gt;"Down"&lt;/span&gt;); &lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;}&lt;/pre&gt;&lt;/div&gt;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=4813353" width="1" height="1"&gt;</description></item><item><title>Grabbing Data from a GridView on PostBack</title><link>http://weblogs.asp.net/kevinisom/archive/2007/10/29/grabbing-data-from-a-gridview-on-postback.aspx</link><pubDate>Mon, 29 Oct 2007 03:55:25 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:4813616</guid><dc:creator>kevinisom</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/kevinisom/rsscomments.aspx?PostID=4813616</wfw:commentRss><comments>http://weblogs.asp.net/kevinisom/archive/2007/10/29/grabbing-data-from-a-gridview-on-postback.aspx#comments</comments><description>&lt;p&gt;Have you ever wanted to grab bulk data on a grid view? It's actually not that hard at all. Set the &lt;a title="DataKeys Property" href="http://msdn2.microsoft.com/d55dhytz.aspx"&gt;System.Web.UI.WebControls.GridView.DataKeys&lt;/a&gt;&amp;nbsp;Property on the Grid, then on the postback event iterate over the grid like so.&lt;/p&gt; &lt;div class="csharpcode"&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;foreach&lt;/span&gt; (GridViewRow row &lt;span class="kwrd"&gt;in&lt;/span&gt; gridView.Rows) &lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;{ &lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;    DataKey data = gridView.DataKeys[row.RowIndex]; &lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;    &lt;span class="kwrd"&gt;int&lt;/span&gt; Id = (&lt;span class="kwrd"&gt;int&lt;/span&gt;)data.Values[&lt;span class="str"&gt;"Id"&lt;/span&gt;]; &lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;    TextBox myControl = row.FindControl(&lt;span class="str"&gt;"mycontrol"&lt;/span&gt;) &lt;span class="kwrd"&gt;as&lt;/span&gt; TextBox; &lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;    &lt;span class="rem"&gt;//do something with the data&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;} &lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;
And on your GridView add the DataKeys Property&lt;/p&gt;
&lt;div class="csharpcode"&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;asp:GridView&lt;/span&gt; &lt;span class="attr"&gt;ID&lt;/span&gt;&lt;span class="kwrd"&gt;="myGrid"&lt;/span&gt; &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;="server"&lt;/span&gt; &lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;     &lt;span class="attr"&gt;DataSourceID&lt;/span&gt;&lt;span class="kwrd"&gt;="myDataSource"&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;     &lt;span class="attr"&gt;DataKeyNames&lt;/span&gt;&lt;span class="kwrd"&gt;="Id"&lt;/span&gt; &lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=4813616" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/kevinisom/archive/tags/asp.net/default.aspx">asp.net</category><category domain="http://weblogs.asp.net/kevinisom/archive/tags/Tips/default.aspx">Tips</category></item><item><title>SubSonic LoadFromPost</title><link>http://weblogs.asp.net/kevinisom/archive/2007/10/29/subsonic-loadfrompost.aspx</link><pubDate>Sun, 28 Oct 2007 23:01:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:4807819</guid><dc:creator>kevinisom</dc:creator><slash:comments>10</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/kevinisom/rsscomments.aspx?PostID=4807819</wfw:commentRss><comments>http://weblogs.asp.net/kevinisom/archive/2007/10/29/subsonic-loadfrompost.aspx#comments</comments><description>
&lt;p&gt;I think &lt;a href="http://www.subsonicproject.com" mce_href="http://www.subsonicproject.com" target="_blank"&gt;SubSonic&lt;/a&gt; is simply amazing. It has saved me so much time and effort of writing. One little trick that it's got is the LoadFromPost method the Models inherit from the SubSonic.AbstractRecord&amp;lt;T&amp;gt; class.&lt;/p&gt;
  
&lt;p&gt;What LoadFromPost does is iterate over the the Request.Forms collection and matches the name of the form element with the corresponding&amp;nbsp; property for your Model. So what that means is no more of this.&lt;/p&gt;
  &lt;div class="csharpcode"&gt;   
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 1: &lt;/span&gt;Product prod = &lt;span class="kwrd"&gt;new&lt;/span&gt; Product();&lt;/pre&gt;
  
&lt;pre&gt;&lt;span class="lnum"&gt; 2: &lt;/span&gt;prod.Name = name.Text;&lt;/pre&gt;
  
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 3: &lt;/span&gt;....&lt;span class="rem"&gt;//More code setting the properties based on the form&lt;/span&gt;&lt;/pre&gt;
  
&lt;pre&gt;&lt;span class="lnum"&gt; 4: &lt;/span&gt;prod.Save&lt;/pre&gt;
&lt;/div&gt;
&lt;style type="text/css"&gt;


.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt;So all you now have to do is this&lt;/p&gt;

&lt;div class="csharpcode"&gt;
  
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 1: &lt;/span&gt;Product prod = &lt;span class="kwrd"&gt;new&lt;/span&gt; Product&lt;/pre&gt;
  
&lt;pre&gt;&lt;span class="lnum"&gt; 2: &lt;/span&gt;prod.LoadFromPost();&lt;span class="rem"&gt;//this loads up all the properties.&lt;/span&gt;&lt;/pre&gt;
  
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 3: &lt;/span&gt;prod.Save();&lt;/pre&gt;
&lt;/div&gt;
&lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt;Anything that saves time is a good thing, and nothing sucks more than writing tedious databinding code. Another advantage is that you don't need to use Server controls just plain html tags so you don't have to worry about ASP.Net adding all the extra naming container bits as well and that'll play nicely with any JavaScript or CSS that uses the id of an html tag.&lt;/p&gt;

&lt;a href="http://www.dotnetkicks.com/kick/?url=http%3a%2f%2fweblogs.asp.net%2fkevinisom%2farchive%2f2007%2f10%2f29%2fsubsonic-loadfrompost.aspx"&gt;&lt;img src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fweblogs.asp.net%2fkevinisom%2farchive%2f2007%2f10%2f29%2fsubsonic-loadfrompost.aspx" alt="kick it on DotNetKicks.com" border="0"&gt;&lt;/a&gt;
&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=4807819" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/kevinisom/archive/tags/asp.net/default.aspx">asp.net</category><category domain="http://weblogs.asp.net/kevinisom/archive/tags/SubSonic/default.aspx">SubSonic</category></item><item><title>Update to Ajax control toolkit breaks autocomplete</title><link>http://weblogs.asp.net/kevinisom/archive/2007/10/12/update-to-ajax-control-toolkit-breaks-autocomplete.aspx</link><pubDate>Thu, 11 Oct 2007 20:58:22 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:4525007</guid><dc:creator>kevinisom</dc:creator><slash:comments>9</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/kevinisom/rsscomments.aspx?PostID=4525007</wfw:commentRss><comments>http://weblogs.asp.net/kevinisom/archive/2007/10/12/update-to-ajax-control-toolkit-breaks-autocomplete.aspx#comments</comments><description>&lt;p&gt;I recently updated an application to the latest version of the Ajax Control Toolkit and my AutoComplete Extender broke. It was returning the list fine. but in the dropdown the only values showed were undefined. Not cool. But after some research I changed the web service that returns the values to use the new AutoComplete Item&lt;/p&gt;  &lt;p&gt;First Version&lt;/p&gt;  &lt;p&gt;&amp;#xA0;&lt;/p&gt;  &lt;div class="csharpcode"&gt;   &lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 1: &lt;/span&gt;[WebMethod]&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt; 2: &lt;/span&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt;[] AutoComplete( &lt;span class="kwrd"&gt;string&lt;/span&gt; prefixText, &lt;span class="kwrd"&gt;int&lt;/span&gt; count )&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 3: &lt;/span&gt;{&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt; 4: &lt;/span&gt; List&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt; results = &lt;span class="kwrd"&gt;new&lt;/span&gt; List&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt;(); &lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 5: &lt;/span&gt; IDataReader reader = DataLayer.AutoCompleteLookup(prefixText).GetReader(); &lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt; 6: &lt;/span&gt; &lt;span class="kwrd"&gt;while&lt;/span&gt; (reader.Read())&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 7: &lt;/span&gt; {&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt; 8: &lt;/span&gt; results.Add(reader[0].ToString());&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 9: &lt;/span&gt; }&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt; 10: &lt;/span&gt;&amp;#xA0;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 11: &lt;/span&gt; &lt;span class="kwrd"&gt;return&lt;/span&gt; results.ToArray();&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt; 12: &lt;/span&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt;That worked fine, and I have a feeling that if the service wasn't returning numeric values like 01-145 that it might still be fine, but the service was returning values like 01-145 so I had to do this&lt;/p&gt;

&lt;div class="csharpcode"&gt;
  &lt;div class="csharpcode"&gt;
    &lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 1: &lt;/span&gt;[WebMethod]&lt;/pre&gt;

    &lt;pre&gt;&lt;span class="lnum"&gt; 2: &lt;/span&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt;[] AutoComplete( &lt;span class="kwrd"&gt;string&lt;/span&gt; prefixText, &lt;span class="kwrd"&gt;int&lt;/span&gt; count )&lt;/pre&gt;

    &lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 3: &lt;/span&gt;{&lt;/pre&gt;

    &lt;pre&gt;&lt;span class="lnum"&gt; 4: &lt;/span&gt; List&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt; results = &lt;span class="kwrd"&gt;new&lt;/span&gt; List&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt;(); &lt;/pre&gt;

    &lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 5: &lt;/span&gt; IDataReader reader = DataLayer.AutoCompleteLookup(prefixText).GetReader(); &lt;/pre&gt;

    &lt;pre&gt;&lt;span class="lnum"&gt; 6: &lt;/span&gt; &lt;span class="kwrd"&gt;while&lt;/span&gt; (reader.Read())&lt;/pre&gt;

    &lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 7: &lt;/span&gt; {&lt;/pre&gt;

    &lt;pre&gt;&lt;span class="lnum"&gt; 8: &lt;/span&gt; results.Add(&lt;/pre&gt;

    &lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 9: &lt;/span&gt; AutoCompleteExtender.CreateAutoCompleteItem&lt;/pre&gt;

    &lt;pre&gt;&lt;span class="lnum"&gt; 10: &lt;/span&gt; (&lt;/pre&gt;

    &lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 11: &lt;/span&gt; reader[0].ToString(), &lt;/pre&gt;

    &lt;pre&gt;&lt;span class="lnum"&gt; 12: &lt;/span&gt; reader[0].ToString()&lt;/pre&gt;

    &lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 13: &lt;/span&gt; )&lt;/pre&gt;

    &lt;pre&gt;&lt;span class="lnum"&gt; 14: &lt;/span&gt; );&lt;/pre&gt;

    &lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 15: &lt;/span&gt; }&lt;/pre&gt;

    &lt;pre&gt;&lt;span class="lnum"&gt; 16: &lt;/span&gt; &lt;span class="kwrd"&gt;return&lt;/span&gt; results.ToArray();&lt;/pre&gt;

    &lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 17: &lt;/span&gt;}&lt;/pre&gt;
  &lt;/div&gt;
  &lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;&lt;/div&gt;
&lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt;After that changed the AutoComplete worked again.&lt;/p&gt;

&lt;p&gt;Now that got me wondering what I could do with the AutoComplete Item that comes back. So I found a &lt;a href="http://blogs.msdn.com/phaniraj/archive/2007/06/19/how-to-use-a-key-value-pair-in-your-autocompleteextender.aspx" target="_blank"&gt;post&lt;/a&gt; by &lt;a href="http://blogs.msdn.com/phaniraj/default.aspx" target="_blank"&gt;Phani Raj&lt;/a&gt;. The Extender Control has a property OnClientItemSelected (actually the extender has 9 OnClient events) so you could do something like this.&lt;/p&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 1: &lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;ajax:AutoCompleteExtender&lt;/span&gt; &lt;span class="attr"&gt;ID&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;AutoComlete&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt; 2: &lt;/span&gt; &lt;span class="attr"&gt;TargetControlID&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;lookupBox&amp;quot;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 3: &lt;/span&gt; &lt;span class="attr"&gt;ServicePath&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;~/services/Lookup.asmx&amp;quot;&lt;/span&gt; &lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt; 4: &lt;/span&gt; &lt;span class="attr"&gt;ServiceMethod&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;AutoComplete&amp;quot;&lt;/span&gt; &lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 5: &lt;/span&gt; &lt;span class="attr"&gt;OnClientItemSelected&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;AutoComlete_Selected&amp;quot;&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt; 6: &lt;/span&gt; &lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 7: &lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;script&lt;/span&gt; &lt;span class="attr"&gt;language&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;javascript&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt; 8: &lt;/span&gt; &lt;span class="kwrd"&gt;function&lt;/span&gt; AutoComlete_Selected( source, eventArgs ) {&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 9: &lt;/span&gt; $get(&lt;span class="str"&gt;&amp;quot;hiddenField&amp;quot;&lt;/span&gt;).value = eventArgs.get_value();&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt; 10: &lt;/span&gt; &lt;span class="rem"&gt;//eventArgs also has .get_text() &lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 11: &lt;/span&gt; }&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt; 12: &lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;script&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt;Hope this helps someone&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=4525007" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/kevinisom/archive/tags/ajaxcontroltoolkit/default.aspx">ajaxcontroltoolkit</category><category domain="http://weblogs.asp.net/kevinisom/archive/tags/ajax/default.aspx">ajax</category><category domain="http://weblogs.asp.net/kevinisom/archive/tags/asp.net/default.aspx">asp.net</category></item><item><title>Custom Parameter for a DataSource</title><link>http://weblogs.asp.net/kevinisom/archive/2007/09/01/custom-parameter-for-a-datasource.aspx</link><pubDate>Sat, 01 Sep 2007 03:35:32 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:4813294</guid><dc:creator>kevinisom</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/kevinisom/rsscomments.aspx?PostID=4813294</wfw:commentRss><comments>http://weblogs.asp.net/kevinisom/archive/2007/09/01/custom-parameter-for-a-datasource.aspx#comments</comments><description>&lt;p&gt;While using a cookie parameter for an ObjectDataSource I discovered that you get the whole cookie, not the value from a key....So instead of my method getting passed the value, it was getting passed key=value. Needless to say I was a little miffed. But I quickly discovered how easy it is to create my own custom data parameter.&lt;/p&gt;&lt;!--
{\rtf1\ansi\ansicpg\lang1024\noproof1252\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Courier New;}}{\colortbl;??\red0\green0\blue0;\red255\green255\blue255;\red163\green21\blue21;\red0\green0\blue255;\red128\green128\blue128;\red0\green128\blue0;\red43\green145\blue175;}??\fs20 \tab [ToolboxData(\cf3 "&amp;lt;\{0\}:CookieParameter &amp;gt;&amp;lt;/\{0\}:CookieParameter&amp;gt;"\cf0 )]\par ??\tab [System.Drawing.ToolboxBitmap(\cf4 typeof\cf0 (Parameter))]\par ??\tab \cf4 public\cf0  \cf4 class\cf0  CookieParameter : Parameter\par ??\tab \{\par ??\tab \tab \cf4 private\cf0  \cf4 string\cf0  _cookieKey;\par ??\tab \tab \cf4 public\cf0  \cf4 string\cf0  Key\par ??\tab \tab \{\par ??\tab \tab \tab \cf4 get\cf0  \{ \cf4 return\cf0  _cookieKey; \}\par ??\tab \tab \tab \cf4 set\cf0  \{ _cookieKey = \cf4 value\cf0 ; \}\par ??\tab \tab \}\par ??\par ??\tab \tab \cf4 private\cf0  \cf4 string\cf0  _cookie;\par ??\tab \tab \cf4 public\cf0  \cf4 string\cf0  Cookie\par ??\tab \tab \{\par ??\tab \tab \tab \cf4 get\cf0  \{ \cf4 return\cf0  _cookie; \}\par ??\tab \tab \tab \cf4 set\cf0  \{ _cookie = \cf4 value\cf0 ; \}\par ??\tab \tab \}\tab \par ??\tab \tab \cf4 public\cf0  CookieParameter() : \cf4 base\cf0 ()\par ??\tab \tab \{\par ??\par ??\tab \tab \}\par ??\par ??\tab \tab \cf5 ///\cf6  \cf5 &amp;lt;summary&amp;gt;\par ??\cf0 \tab \tab \cf5 ///\cf6  Initializes a new instance of the \cf5 &amp;lt;see cref="UserParameter"/&amp;gt;\cf6  class.\par ??\cf0 \tab \tab \cf5 ///\cf6  \cf5 &amp;lt;/summary&amp;gt;\par ??\cf0 \tab \tab \cf5 ///\cf6  \cf5 &amp;lt;param name="name"&amp;gt;\cf6 The name.\cf5 &amp;lt;/param&amp;gt;\par ??\cf0 \tab \tab \cf5 ///\cf6  \cf5 &amp;lt;param name="value"&amp;gt;\cf6 The value.\cf5 &amp;lt;/param&amp;gt;\par ??\cf0         \cf4 public\cf0  CookieParameter(\cf4 string\cf0  name, \cf4 object\cf0  value) : \cf4 base\cf0 (name)\par ??        \{\par ??\par ??        \}\par ??\par ??\tab \tab \cf5 ///\cf6  \cf5 &amp;lt;summary&amp;gt;\par ??\cf0 \tab \tab \cf5 ///\cf6  Initializes a new instance of the \cf5 &amp;lt;see cref="UserParameter"/&amp;gt;\cf6  class.\par ??\cf0 \tab \tab \cf5 ///\cf6  \cf5 &amp;lt;/summary&amp;gt;\par ??\cf0 \tab \tab \cf5 ///\cf6  \cf5 &amp;lt;param name="name"&amp;gt;\cf6 The name.\cf5 &amp;lt;/param&amp;gt;\par ??\cf0 \tab \tab \cf5 ///\cf6  \cf5 &amp;lt;param name="type"&amp;gt;\cf6 The type.\cf5 &amp;lt;/param&amp;gt;\par ??\cf0 \tab \tab \cf5 ///\cf6  \cf5 &amp;lt;param name="value"&amp;gt;\cf6 The value.\cf5 &amp;lt;/param&amp;gt;\par ??\cf0         \cf4 public\cf0  CookieParameter(\cf4 string\cf0  name, \cf7 TypeCode\cf0  type, \cf4 object\cf0  value) : \cf4 base\cf0 (name, type)\par ??        \{\par ??\tab \tab \tab \par ??        \}\par ??\par ??\tab \tab \cf5 ///\cf6  \cf5 &amp;lt;summary&amp;gt;\par ??\cf0 \tab \tab \cf5 ///\cf6  Initializes a new instance of the \cf5 &amp;lt;see cref="UserParameter"/&amp;gt;\cf6  class.\par ??\cf0 \tab \tab \cf5 ///\cf6  \cf5 &amp;lt;/summary&amp;gt;\par ??\cf0 \tab \tab \cf5 ///\cf6  \cf5 &amp;lt;param name="original"&amp;gt;\cf6 The original.\cf5 &amp;lt;/param&amp;gt;\par ??\cf0 \tab \tab \cf4 protected\cf0  CookieParameter(CookieParameter original)\par ??\tab \tab \tab : \cf4 base\cf0 (original)\par ??        \{\par ??            \par ??        \}\par ??\par ??\tab \tab \cf5 ///\cf6  \cf5 &amp;lt;summary&amp;gt;\par ??\cf0 \tab \tab \cf5 ///\cf6  Updates and returns the value of the \cf5 &amp;lt;see cref="T:System.Web.UI.WebControls.Parameter"&amp;gt;&amp;lt;/see&amp;gt;\cf6  object.\par ??\cf0 \tab \tab \cf5 ///\cf6  \cf5 &amp;lt;/summary&amp;gt;\par ??\cf0 \tab \tab \cf5 ///\cf6  \cf5 &amp;lt;param name="context"&amp;gt;\cf6 The current \cf5 &amp;lt;see cref="T:System.Web.HttpContext"&amp;gt;&amp;lt;/see&amp;gt;\cf6  of the request.\cf5 &amp;lt;/param&amp;gt;\par ??\cf0 \tab \tab \cf5 ///\cf6  \cf5 &amp;lt;param name="control"&amp;gt;\cf6 The \cf5 &amp;lt;see cref="T:System.Web.UI.Control"&amp;gt;&amp;lt;/see&amp;gt;\cf6  the parameter is bound to. If the parameter is not bound to a control, the control parameter is ignored.\cf5 &amp;lt;/param&amp;gt;\par ??\cf0 \tab \tab \cf5 ///\cf6  \cf5 &amp;lt;returns&amp;gt;\par ??\cf0 \tab \tab \cf5 ///\cf6  An object that represents the updated and current value of the parameter.\par ??\cf0 \tab \tab \cf5 ///\cf6  \cf5 &amp;lt;/returns&amp;gt;\par ??\cf0         \cf4 protected\cf0  \cf4 override\cf0  \cf4 object\cf0  Evaluate(HttpContext context, Control control)\par ??        \{\par ??\tab \tab \tab \cf4 if\cf0  ((context != \cf4 null\cf0 ) &amp;amp;&amp;amp; (context.Session != \cf4 null\cf0 ))\par ??\tab \tab \tab \{\par ??\par ??\tab \tab \tab \tab \cf6 //\par ??\cf0 \tab \tab \tab \tab \cf4 return\cf0  CookieManager.Get(Cookie, Key);\par ??\tab \tab \tab \tab \par ??\par ??\tab \tab \tab \}\par ??\par ??\tab \tab \tab \cf4 return\cf0  \cf4 null\cf0 ;\par ??        \tab \par ??        \}\par ??\par ??\par ??\par ??\par ??\par ??\tab \tab \cf5 ///\cf6  \cf5 &amp;lt;summary&amp;gt;\par ??\cf0 \tab \tab \cf5 ///\cf6  Returns a duplicate of the current \cf5 &amp;lt;see cref="T:System.Web.UI.WebControls.Parameter"&amp;gt;&amp;lt;/see&amp;gt;\cf6  instance.\par ??\cf0 \tab \tab \cf5 ///\cf6  \cf5 &amp;lt;/summary&amp;gt;\par ??\cf0 \tab \tab \cf5 ///\cf6  \cf5 &amp;lt;returns&amp;gt;\par ??\cf0 \tab \tab \cf5 ///\cf6  A \cf5 &amp;lt;see cref="T:System.Web.UI.WebControls.Parameter"&amp;gt;&amp;lt;/see&amp;gt;\cf6  that is an exact duplicate of the current one.\par ??\cf0 \tab \tab \cf5 ///\cf6  \cf5 &amp;lt;/returns&amp;gt;\par ??\cf0         \cf4 protected\cf0  \cf4 override\cf0  Parameter Clone()\par ??        \{\par ??\tab \tab \tab \cf4 return\cf0  \cf4 new\cf0  CookieParameter(\cf4 this\cf0 );\par ??        \}\par ??\tab \}}
--&gt; &lt;div style="border-right: #cccccc 1px solid; padding-right: 4px; border-top: #cccccc 1px solid; padding-left: 4px; background: #ffffcc 0% 50%; padding-bottom: 4px; border-left: #cccccc 1px solid; color: black; padding-top: 4px; border-bottom: #cccccc 1px solid; font-family: courier new; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial"&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [ToolboxData(&lt;span style="color: #a31515"&gt;"&amp;lt;{0}:CookieParameter &amp;gt;&amp;lt;/{0}:CookieParameter&amp;gt;"&lt;/span&gt;)] &lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [System.Drawing.ToolboxBitmap(&lt;span style="color: blue"&gt;typeof&lt;/span&gt;(Parameter))] &lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;class&lt;/span&gt; CookieParameter : Parameter &lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;private&lt;/span&gt; &lt;span style="color: blue"&gt;string&lt;/span&gt; _cookieKey; &lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;string&lt;/span&gt; Key &lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;get&lt;/span&gt; { &lt;span style="color: blue"&gt;return&lt;/span&gt; _cookieKey; } &lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;set&lt;/span&gt; { _cookieKey = &lt;span style="color: blue"&gt;value&lt;/span&gt;; } &lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;private&lt;/span&gt; &lt;span style="color: blue"&gt;string&lt;/span&gt; _cookie; &lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;string&lt;/span&gt; Cookie &lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;get&lt;/span&gt; { &lt;span style="color: blue"&gt;return&lt;/span&gt; _cookie; } &lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;set&lt;/span&gt; { _cookie = &lt;span style="color: blue"&gt;value&lt;/span&gt;; } &lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;public&lt;/span&gt; CookieParameter() : &lt;span style="color: blue"&gt;base&lt;/span&gt;() &lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;public&lt;/span&gt; CookieParameter(&lt;span style="color: blue"&gt;string&lt;/span&gt; name, &lt;span style="color: blue"&gt;object&lt;/span&gt; value) : &lt;span style="color: blue"&gt;base&lt;/span&gt;(name) &lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;public&lt;/span&gt; CookieParameter(&lt;span style="color: blue"&gt;string&lt;/span&gt; name, &lt;span style="color: #2b91af"&gt;TypeCode&lt;/span&gt; type, &lt;span style="color: blue"&gt;object&lt;/span&gt; value) : &lt;span style="color: blue"&gt;base&lt;/span&gt;(name, type) &lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;protected&lt;/span&gt; CookieParameter(CookieParameter original) &lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; : &lt;span style="color: blue"&gt;base&lt;/span&gt;(original) &lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;protected&lt;/span&gt; &lt;span style="color: blue"&gt;override&lt;/span&gt; &lt;span style="color: blue"&gt;object&lt;/span&gt; Evaluate(HttpContext context, Control control) &lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;if&lt;/span&gt; ((context != &lt;span style="color: blue"&gt;null&lt;/span&gt;) &amp;amp;&amp;amp; (context.Session != &lt;span style="color: blue"&gt;null&lt;/span&gt;)) &lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;return&lt;/span&gt; context .Request.Cookies[Cookie].Values.Get(Key); &lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;return&lt;/span&gt; &lt;span style="color: blue"&gt;null&lt;/span&gt;; &lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;/p&gt;&lt;br&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;protected&lt;/span&gt; &lt;span style="color: blue"&gt;override&lt;/span&gt; Parameter Clone() &lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;return&lt;/span&gt; &lt;span style="color: blue"&gt;new&lt;/span&gt; CookieParameter(&lt;span style="color: blue"&gt;this&lt;/span&gt;); &lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;/p&gt;&lt;/div&gt;&lt;br&gt;Then in the data source control just do this&lt;br&gt;&lt;!--
{\rtf1\ansi\ansicpg\lang1024\noproof1252\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Courier New;}}{\colortbl;??\red0\green0\blue255;\red255\green255\blue255;\red163\green21\blue21;\red0\green0\blue0;\red255\green0\blue0;}??\fs20 \cf1 &amp;lt;\cf3 asp\cf1 :\cf3 ObjectDataSource\cf0  \par ??    \cf5 ID\cf1 ="OrderItemsDataSource"\cf0  \par ??    \cf5 runat\cf1 ="server"\cf0  \par ??    \cf5 SelectMethod\cf1 ="GetCurrent"\par ??\cf0 \tab \cf5 TypeName\cf1 ="KoComm.Pegasus.Business.DataManagers.Ecommerce.OrderItemManager"\cf0  \par ??\tab \cf5 DataObjectTypeName\cf1 ="KoComm.Pegasus.DataAccessLayer.Entities.OrderItem"\cf0  \par ??\tab \cf1 &amp;gt;\par ??\cf0 \tab \cf1 &amp;lt;\cf3 SelectParameters\cf1 &amp;gt;\par ??\cf0 \tab \tab \cf1 &amp;lt;\cf3 Data\cf1 :\cf3 CookieParameter\cf0  \cf5 Cookie\cf1 ="pegasus"\cf0  \cf5 Name\cf1 ="token"\cf0  \cf5 Type\cf1 ="Object"\cf0  \cf5 Key\cf1 ="token"\cf0  \cf1 &amp;gt;&amp;lt;/\cf3 Data\cf1 :\cf3 CookieParameter\cf1 &amp;gt;\par ??\cf0 \tab \cf1 &amp;lt;/\cf3 SelectParameters\cf1 &amp;gt;\par ??\par ??&amp;lt;/\cf3 asp\cf1 :\cf3 ObjectDataSource\cf1 &amp;gt;}
--&gt; &lt;div style="border-right: #cccccc 1px solid; padding-right: 4px; border-top: #cccccc 1px solid; padding-left: 4px; background: #ffffcc 0% 50%; padding-bottom: 4px; border-left: #cccccc 1px solid; color: black; padding-top: 4px; border-bottom: #cccccc 1px solid; font-family: courier new; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial"&gt; &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;asp&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;ObjectDataSource&lt;/span&gt; &lt;span style="color: red"&gt;ID&lt;/span&gt;&lt;span style="color: blue"&gt;="MyDataSource"&lt;/span&gt; &lt;span style="color: red"&gt;runat&lt;/span&gt;&lt;span style="color: blue"&gt;="server"&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;SelectParameters&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Data&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;CookieParameter&lt;/span&gt; &lt;span style="color: red"&gt;Cookie&lt;/span&gt;&lt;span style="color: blue"&gt;="cookie"&lt;/span&gt; &lt;span style="color: red"&gt;Name&lt;/span&gt;&lt;span style="color: blue"&gt;="myParameter"&lt;/span&gt; &lt;span style="color: red"&gt;Type&lt;/span&gt;&lt;span style="color: blue"&gt;="Object"&lt;/span&gt; &lt;span style="color: red"&gt;Key&lt;/span&gt;&lt;span style="color: blue"&gt;="cookieKey"&lt;/span&gt;&amp;nbsp; &lt;span style="color: blue"&gt;/&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;SelectParameters&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp; &lt;/p&gt; &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;asp&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;ObjectDataSource&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/p&gt;&lt;/div&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=4813294" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/kevinisom/archive/tags/asp.net/default.aspx">asp.net</category><category domain="http://weblogs.asp.net/kevinisom/archive/tags/DataSource/default.aspx">DataSource</category></item><item><title>SubSonic, ObjectDataSource, Paging, and you!</title><link>http://weblogs.asp.net/kevinisom/archive/2007/09/01/subsonic-objectdatasource-paging-and-you.aspx</link><pubDate>Sat, 01 Sep 2007 03:35:32 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:4814094</guid><dc:creator>kevinisom</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/kevinisom/rsscomments.aspx?PostID=4814094</wfw:commentRss><comments>http://weblogs.asp.net/kevinisom/archive/2007/09/01/subsonic-objectdatasource-paging-and-you.aspx#comments</comments><description>&lt;p&gt;&lt;a href="http://www.subsonicproject.com/"&gt;SubSonic&lt;/a&gt; is such a time saver. Fresh out of the box it gives you so much goodness that it makes you wonder how you developed without it. However one feature I find lacking is that it doesn't have a paging method from the get go. However it's easy enough to implement paging with &lt;a href="http://www.subsonicproject.com/"&gt;SubSonic&lt;/a&gt;.  &lt;p&gt;The trick is you have to created two methods to get the paging to work. The drawback to using the &lt;a href="http://msdn2.microsoft.com/dx70zk47.aspx"&gt;ObjectDataSource&lt;/a&gt;&amp;nbsp;for paging is that the &lt;a href="http://msdn2.microsoft.com/4w7ya1ts.aspx"&gt;GridView&lt;/a&gt; doesn't take an output parameter as the record count. So what do you do to take advantage of the &lt;a href="http://www.subsonicproject.com/"&gt;SubSonic&lt;/a&gt; goodness? First create the select method and the select count in the controller class. &lt;div class="csharpcode"&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;[DataObjectMethod( DataObjectMethodType.Select, &lt;span class="kwrd"&gt;false&lt;/span&gt; )]&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; MyCollection FetchAllPaged(&lt;span class="kwrd"&gt;int&lt;/span&gt; start, &lt;span class="kwrd"&gt;int&lt;/span&gt; pageLength)&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;{&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;    &lt;span class="kwrd"&gt;int&lt;/span&gt; startIndex;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;    &lt;span class="kwrd"&gt;if&lt;/span&gt;(start ==0)&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;    {&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;        startIndex = 1;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;    }&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;    &lt;span class="kwrd"&gt;else&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;    {&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;        startIndex = start / pageLength + 1;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;    }&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;    MyCollection coll = &lt;span class="kwrd"&gt;new&lt;/span&gt; MyCollection();&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;    Query qry = &lt;span class="kwrd"&gt;new&lt;/span&gt; Query( My.Schema );&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  15:  &lt;/span&gt;    qry.PageSize = pageLength;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  16:  &lt;/span&gt;    qry.PageIndex = startIndex;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  17:  &lt;/span&gt;    coll.LoadAndCloseReader( qry.ExecuteReader() );&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  18:  &lt;/span&gt;    &lt;span class="kwrd"&gt;return&lt;/span&gt; coll;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  19:  &lt;/span&gt;}&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  20:  &lt;/span&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt; FetchAllCount()&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  21:  &lt;/span&gt;{&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  22:  &lt;/span&gt;    Query qry = &lt;span class="kwrd"&gt;new&lt;/span&gt; Query( My.Schema );&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  23:  &lt;/span&gt;    &lt;span class="kwrd"&gt;return&lt;/span&gt; qry.GetCount( My.Columns.MyId );&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  24:  &lt;/span&gt;}&lt;/pre&gt;&lt;/div&gt;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;
The trick to remember is that the ObjectDataSource passes passes in the count of the items but the paging method exposed by &lt;a href="http://www.subsonicproject.com/"&gt;SubSonic&lt;/a&gt; expects the actual page number. This means that if your PageSize is 10 changing to the second page the start is 20, but SubSonic expects 2.
&lt;div class="csharpcode"&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;asp:GridView&lt;/span&gt; &lt;span class="attr"&gt;ID&lt;/span&gt;&lt;span class="kwrd"&gt;="TheGrid"&lt;/span&gt; &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;="server"&lt;/span&gt; &lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;    &lt;span class="attr"&gt;AllowPaging&lt;/span&gt;&lt;span class="kwrd"&gt;="True"&lt;/span&gt; &lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;    &lt;span class="attr"&gt;DataSourceID&lt;/span&gt;&lt;span class="kwrd"&gt;="MyDataSource"&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;    &lt;span class="attr"&gt;PageSize&lt;/span&gt;&lt;span class="kwrd"&gt;="10"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;asp:ObjectDataSource&lt;/span&gt; &lt;span class="attr"&gt;ID&lt;/span&gt;&lt;span class="kwrd"&gt;="MyDataSource"&lt;/span&gt; &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;="server"&lt;/span&gt; &lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;    &lt;span class="attr"&gt;SelectMethod&lt;/span&gt;&lt;span class="kwrd"&gt;="FetchAllPaged"&lt;/span&gt; &lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;    &lt;span class="attr"&gt;TypeName&lt;/span&gt;&lt;span class="kwrd"&gt;="MyController"&lt;/span&gt; &lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;    &lt;span class="attr"&gt;SelectCountMethod&lt;/span&gt;&lt;span class="kwrd"&gt;="FetchAllCount"&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;    &lt;span class="attr"&gt;StartRowIndexParameterName&lt;/span&gt;&lt;span class="kwrd"&gt;="start"&lt;/span&gt; &lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;    &lt;span class="attr"&gt;MaximumRowsParameterName&lt;/span&gt;&lt;span class="kwrd"&gt;="pageLength"&lt;/span&gt; &lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;    &lt;span class="attr"&gt;EnablePaging&lt;/span&gt;&lt;span class="kwrd"&gt;="True"&lt;/span&gt; &lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=4814094" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/kevinisom/archive/tags/asp.net/default.aspx">asp.net</category><category domain="http://weblogs.asp.net/kevinisom/archive/tags/DataSource/default.aspx">DataSource</category><category domain="http://weblogs.asp.net/kevinisom/archive/tags/Tips/default.aspx">Tips</category><category domain="http://weblogs.asp.net/kevinisom/archive/tags/SubSonic/default.aspx">SubSonic</category></item><item><title>Sorting a generic list</title><link>http://weblogs.asp.net/kevinisom/archive/2007/09/01/sorting-a-generic-list.aspx</link><pubDate>Sat, 01 Sep 2007 03:35:32 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:4813911</guid><dc:creator>kevinisom</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/kevinisom/rsscomments.aspx?PostID=4813911</wfw:commentRss><comments>http://weblogs.asp.net/kevinisom/archive/2007/09/01/sorting-a-generic-list.aspx#comments</comments><description>&lt;p&gt;One of the nice features of&amp;nbsp; &lt;a href="http://msdn2.microsoft.com/en-us/library/6sh2ey19.aspx"&gt;System.Collection.Generics.List&lt;/a&gt; is it is able to sort on the go with a &lt;a href="http://msdn2.microsoft.com/en-us/library/4d7sx9hd.aspx"&gt;IComparable&lt;/a&gt;, and you can do that simply with an &lt;a href="http://msdn2.microsoft.com/en-us/library/0yw3tz5k%28vs.80%29.aspx"&gt;anonomous method&lt;/a&gt;&lt;br&gt;This is simply done like so.&lt;/p&gt; &lt;div class="csharpcode"&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;List&amp;lt;Attribute&amp;gt; attributes = Entity.Get();&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;attributes.Sort&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;(&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;    &lt;span class="kwrd"&gt;delegate&lt;/span&gt;( Attribute firstAttribute, Attribute secondAttribute )&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;    {&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;        &lt;span class="kwrd"&gt;return&lt;/span&gt; firstAttribute.Index.CompareTo( secondAttribute.Index );&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;    }&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;);&lt;/pre&gt;&lt;/div&gt;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=4813911" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/kevinisom/archive/tags/Tips/default.aspx">Tips</category><category domain="http://weblogs.asp.net/kevinisom/archive/tags/Code/default.aspx">Code</category></item></channel></rss>