<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://msmvps.com/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>Brian H. Madsen - .Net Powered by Caffeine : C#.Net</title><link>http://msmvps.com/blogs/brianmadsen/archive/tags/C_2300_.Net/default.aspx</link><description>Tags: C#.Net</description><dc:language>en</dc:language><generator>CommunityServer 2008.5 SP2 (Build: 40407.4157)</generator><item><title>Perth gets two (sorry, three) brand new MVPs – Congratulations to the both of you!!</title><link>http://msmvps.com/blogs/brianmadsen/archive/2008/10/07/perth-gets-two-brand-new-mvps-congratulations-to-the-both-of-you.aspx</link><pubDate>Mon, 06 Oct 2008 17:36:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1649967</guid><dc:creator>Brian Madsen</dc:creator><slash:comments>4</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/brianmadsen/rsscomments.aspx?PostID=1649967</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/brianmadsen/commentapi.aspx?PostID=1649967</wfw:comment><comments>http://msmvps.com/blogs/brianmadsen/archive/2008/10/07/perth-gets-two-brand-new-mvps-congratulations-to-the-both-of-you.aspx#comments</comments><description>&lt;p&gt;The communities i Perth are thriving &amp;ndash; evidence of this is that we now have &lt;span style="text-decoration:line-through;"&gt;two (yes, 2)&lt;/span&gt; three (i stand corrected, we have&amp;nbsp;3)&amp;nbsp;new MVPs.&lt;/p&gt;
&lt;p&gt;The first is &lt;a target="_blank" href="http://mitch-wheat.blogspot.com"&gt;Mitch Wheat&lt;/a&gt; &amp;ndash; everybody knows Mitch as the leader and organiser of the Perth .Net Community of Practise user group. Mitch has been running the group for quite a while and as i&amp;rsquo;ve said before he does so brilliantly.&lt;/p&gt;
&lt;p&gt;So welcome and congratulations to Mitch.&lt;/p&gt;
&lt;p&gt;Mitch was awarded in the C# group, so we now have another developer based MVP in Perth!&lt;/p&gt;
&lt;p&gt;The second person is &lt;a target="_blank" href="http://sharepoint-sezai-moss-2007.blogspot.com"&gt;Sezai Komur&lt;/a&gt; (apologies to Sezai for the terrible cut/paste job for his blog url) &amp;ndash; whom got awarded in the SharePoint group. &lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve been following his blog for quite a while now and he definitely know what he&amp;rsquo;s talking about.&lt;/p&gt;
&lt;p&gt;I hope to see more from Sezai in the future and want to welcome him into our little cozy family.&lt;/p&gt;
&lt;p&gt;Congratulations Sezai &amp;ndash; SharePoint is THE platform of choice for many these days and i&amp;rsquo;m certain you&amp;rsquo;ll be busy!&lt;/p&gt;
&lt;div style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:e377fa3c-9501-4b49-9202-558b213eea3b" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a rel="tag" href="http://technorati.com/tags/Mitch+Wheat"&gt;Mitch Wheat&lt;/a&gt;,&lt;a rel="tag" href="http://technorati.com/tags/Sezai+Komur"&gt;Sezai Komur&lt;/a&gt;,&lt;a rel="tag" href="http://technorati.com/tags/MVP"&gt;MVP&lt;/a&gt;&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1649967" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/brianmadsen/archive/tags/C_2300_.Net/default.aspx">C#.Net</category><category domain="http://msmvps.com/blogs/brianmadsen/archive/tags/Perth/default.aspx">Perth</category><category domain="http://msmvps.com/blogs/brianmadsen/archive/tags/Cool+Guys/default.aspx">Cool Guys</category><category domain="http://msmvps.com/blogs/brianmadsen/archive/tags/MVP/default.aspx">MVP</category><category domain="http://msmvps.com/blogs/brianmadsen/archive/tags/Geeky+News/default.aspx">Geeky News</category></item><item><title>InnerWorkings steps up and offers free Silverlight training for CSharpZealot.com members</title><link>http://msmvps.com/blogs/brianmadsen/archive/2007/08/14/innerworkings-steps-up-and-offers-free-silverlight-training-for-csharpzealot-com-members.aspx</link><pubDate>Tue, 14 Aug 2007 11:30:39 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1110896</guid><dc:creator>Brian Madsen</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/brianmadsen/rsscomments.aspx?PostID=1110896</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/brianmadsen/commentapi.aspx?PostID=1110896</wfw:comment><comments>http://msmvps.com/blogs/brianmadsen/archive/2007/08/14/innerworkings-steps-up-and-offers-free-silverlight-training-for-csharpzealot-com-members.aspx#comments</comments><description>&lt;p&gt;&lt;a href="http://www.csharpzealot.com" target="_blank"&gt;CSharpZealot.com&lt;/a&gt; - a C#.Net centric community received good news today - namely, &lt;a href="http://www.innerworkings.com" target="_blank"&gt;InnerWorkings&lt;/a&gt; are offering all of its members &lt;strong&gt;&lt;em&gt;FREE&lt;/em&gt;&lt;/strong&gt; Silverlight training.&lt;/p&gt; &lt;p&gt;The story about how this came about is quite funny. But, i&amp;#39;ve been on the Beta test for &lt;a href="http://www.me.dium.com" target="_blank"&gt;me.dium&lt;/a&gt;&amp;nbsp;for a while and as it&amp;#39;s just been released it was also published on &lt;a href="http://www.facebook.com/group.php?gid=2384108272" target="_blank"&gt;Facebook&lt;/a&gt;&amp;nbsp;and here one of the guys on the me.dium team, Tobias Peggs, introduced me to Brian Finnerty, who&amp;#39;s involved with &lt;a href="http://www.innerworkings.com/" target="_blank"&gt;InnerWorkings&lt;/a&gt;. He noticed that I ran the CSharpZealot.com community and wanted to offer our members something special.&lt;/p&gt; &lt;p&gt;Not only have they provided 1hr free Silverlight trianing, but they&amp;#39;ve also extended a discount code which entitles the members to a 20% discount on all training packages/drills in their catalogue. Guys, this is a limited time only offer so better head over, register at &lt;a href="http://www.csharpzealot.com" target="_blank"&gt;CSharpZealot.com&lt;/a&gt;, and check out the promotion they&amp;#39;ve created, just for us!!!&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.innerworkings.com/promotions/664b06ea-357c-4730-8cb0-44376cceb865/csharpzealot-silverlight-promotion" target="_blank"&gt;Click here for more information&lt;/a&gt;.&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;a href="http://www.innerworkings.com/promotions/664b06ea-357c-4730-8cb0-44376cceb865/csharpzealot-silverlight-promotion" target="_blank"&gt;&lt;img height="41" alt="innerworkings_logo" src="http://msmvps.com/blogs/brianmadsen/WindowsLiveWriter/InnerWorkingsstepsupandoffers.commembers_111A6/innerworkings_logo_1.gif" width="196" border="0" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;- Take .NET training that&amp;#39;s 100% practice-based &lt;/p&gt; &lt;p&gt;- Gain skills by solving problems using key .NET techniques &lt;/p&gt; &lt;p&gt;- Work at your own pace in a realistic learning environment &lt;/p&gt; &lt;p&gt;- Get feedback as you learn from our code-checking engine &lt;/p&gt; &lt;p&gt;- Enjoy smart, engaging, and effective .NET learning&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;When companies come out of the woodwork and support the community, you know they are passionate about what they do. Especially in a geek-driven industry as us developers are in. &lt;/p&gt; &lt;p&gt;I want to thank &lt;a href="http://blogs.innerworkings.com/brian-finnerty" target="_blank"&gt;Brian Finnerty&lt;/a&gt; and &lt;a href="http://www.claudioperrone.com/blog" target="_blank"&gt;Claudio Perrone&lt;/a&gt; for taking this step forward and for making a brilliant training experience available to our members!&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1110896" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/brianmadsen/archive/tags/CSharpZealot.com/default.aspx">CSharpZealot.com</category><category domain="http://msmvps.com/blogs/brianmadsen/archive/tags/C_2300_.Net/default.aspx">C#.Net</category><category domain="http://msmvps.com/blogs/brianmadsen/archive/tags/Silverlight/default.aspx">Silverlight</category><category domain="http://msmvps.com/blogs/brianmadsen/archive/tags/.Net+Training/default.aspx">.Net Training</category><category domain="http://msmvps.com/blogs/brianmadsen/archive/tags/InnerWorkings.com/default.aspx">InnerWorkings.com</category></item><item><title>InnerWorkings - .Net training very much hands-on</title><link>http://msmvps.com/blogs/brianmadsen/archive/2007/08/09/innerworkings-net-training-very-much-hands-on.aspx</link><pubDate>Thu, 09 Aug 2007 13:58:30 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1098882</guid><dc:creator>Brian Madsen</dc:creator><slash:comments>5</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/brianmadsen/rsscomments.aspx?PostID=1098882</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/brianmadsen/commentapi.aspx?PostID=1098882</wfw:comment><comments>http://msmvps.com/blogs/brianmadsen/archive/2007/08/09/innerworkings-net-training-very-much-hands-on.aspx#comments</comments><description>&lt;p&gt;I got an email from Brian Finnerty yesterday who runs &lt;a href="http://www.innerworkings.com"&gt;www.innerworkings.com&lt;/a&gt; - a .Net training site with a twist.&lt;/p&gt; &lt;p&gt;I&amp;#39;ve been through quite a few of them over the years..from instructional DVDs, to remote training and onto class-room training and thought at first this was yet another of the same.&lt;/p&gt; &lt;p&gt;But i was rather surprised when i took the trial..&lt;/p&gt; &lt;p&gt;First off, you download an application which contains your &amp;quot;courses&amp;quot; and you can do them at your leisure.&lt;/p&gt; &lt;p&gt;The first thing you get faced with a &amp;quot;Developer Interface&amp;quot;:&lt;/p&gt; &lt;p&gt;&lt;img height="722" alt="developer-interface" src="http://msmvps.com/blogs/brianmadsen/WindowsLiveWriter/InnerWorkings.Nettrainingverymuchhandson_13477/developer-interface_2.gif" width="868" /&gt; &lt;/p&gt; &lt;p&gt;The &amp;quot;Developer Interface&amp;quot; also syncs your results with their server, so you can keep tap on your progress through the labs you take.&lt;/p&gt; &lt;p&gt;When selecting the &amp;quot;Drill&amp;quot; from the list (i have one, a sample - circled with red) it&amp;#39;ll take you to the main interface which you&amp;#39;ll be dealing with.&lt;/p&gt; &lt;p&gt;Each &amp;quot;Drill&amp;quot; has a set of tasks to perform:&lt;/p&gt;&lt;img height="464" alt="list" src="http://msmvps.com/blogs/brianmadsen/WindowsLiveWriter/InnerWorkings.Nettrainingverymuchhandson_13477/list_2.gif" width="457" /&gt;  &lt;p&gt;Once you&amp;#39;ve selected a task, you&amp;#39;ll be forwarded to the scenario which explains what the outcome of the task is:&lt;/p&gt; &lt;p&gt;&lt;img height="658" alt="scenario" src="http://msmvps.com/blogs/brianmadsen/WindowsLiveWriter/InnerWorkings.Nettrainingverymuchhandson_13477/scenario_1.gif" width="663" /&gt; &lt;/p&gt; &lt;p&gt;At the top of the Developer Interface you have three tabs:&lt;/p&gt; &lt;p&gt;&lt;img height="38" alt="tabs" src="http://msmvps.com/blogs/brianmadsen/WindowsLiveWriter/InnerWorkings.Nettrainingverymuchhandson_13477/tabs_1.gif" width="272" /&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;And after you&amp;#39;ve read through the scenario you move onto the challenge which explains what the goal is, the individual steps you have to make in order to complete the task.&lt;/p&gt; &lt;p&gt;The problem statement sums up the issues that this task has in detail.&lt;/p&gt; &lt;p&gt;&lt;img height="575" alt="problem-statement" src="http://msmvps.com/blogs/brianmadsen/WindowsLiveWriter/InnerWorkings.Nettrainingverymuchhandson_13477/problem-statement_1.gif" width="654" /&gt; &lt;/p&gt; &lt;p&gt;After reading through that there is just to open up the code/project and you&amp;#39;re on your way.&lt;/p&gt; &lt;p&gt;It is extremely simple to navigate this Developer Interface and to get started. All is taken care of as it will launch Visual Studio 2005 for you, load the solution and off you go. Each task is commented in each class enough so that it&amp;#39;s not too &amp;quot;easy&amp;quot; to engage with. Methods and Classes are comment clearly where you are expected to edit and you are to leave alone.&lt;/p&gt; &lt;p&gt;Once you&amp;#39;re done you simply go back to the Developer Interface and click on &amp;quot;Judge Project Code&amp;quot; and it&amp;#39;ll scan your solution and find out if you have successfully accomplished the task, or alternatively what you have missed or done inaccurately.&lt;/p&gt; &lt;p&gt;&lt;img height="136" alt="actions" src="http://msmvps.com/blogs/brianmadsen/WindowsLiveWriter/InnerWorkings.Nettrainingverymuchhandson_13477/actions_1.gif" width="610" /&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;When Visual Studio loads it not only loads the solution, but it also configures your environment, tabs etc so that everything is at hand - including a &amp;quot;userful links&amp;quot; window which will take you to MSDN. Absolutely Brilliant!!!&lt;/p&gt; &lt;p&gt;I can highly recommend taking a look at this - &lt;a href="http://www.innerworkings.com"&gt;www.innerworkings.com&lt;/a&gt; ..simply brilliant! i&amp;#39;m hooked that&amp;#39;s for sure. the Drills aren&amp;#39;t just a &amp;quot;copy/paste&amp;quot;, but leaves you with enough clues and help to &amp;quot;figure&amp;quot; things out yourself.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1098882" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/brianmadsen/archive/tags/C_2300_.Net/default.aspx">C#.Net</category><category domain="http://msmvps.com/blogs/brianmadsen/archive/tags/Handy+Tools/default.aspx">Handy Tools</category><category domain="http://msmvps.com/blogs/brianmadsen/archive/tags/.Net+Training/default.aspx">.Net Training</category></item><item><title>Compact code, using C# shorthand and coding habits</title><link>http://msmvps.com/blogs/brianmadsen/archive/2007/07/04/compact-code-using-c-shorthand-and-coding-habits.aspx</link><pubDate>Tue, 03 Jul 2007 23:13:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:999648</guid><dc:creator>Brian Madsen</dc:creator><slash:comments>12</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/brianmadsen/rsscomments.aspx?PostID=999648</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/brianmadsen/commentapi.aspx?PostID=999648</wfw:comment><comments>http://msmvps.com/blogs/brianmadsen/archive/2007/07/04/compact-code-using-c-shorthand-and-coding-habits.aspx#comments</comments><description>&lt;p&gt;I&amp;#39;ve been reprimanded for writing code that&amp;#39;s too complex...well, not exactly reprimanded, but told to please make my code less complicated.&lt;/p&gt;
&lt;p&gt;One of the things i do often is use shorthand..for those that doesn&amp;#39;t know what shorthand is, its when your use &amp;quot;logical&amp;quot; operators like &amp;quot;? :&amp;quot; and &amp;quot;??&amp;quot; in your code.&lt;/p&gt;
&lt;p&gt;ex.&lt;/p&gt;
&lt;blockquote&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;bool&lt;/span&gt; result = (&lt;span class="kwrd"&gt;object&lt;/span&gt;.type == businessObjectType.Status)
                       ? &lt;span class="kwrd"&gt;true&lt;/span&gt;
                       : &lt;span class="kwrd"&gt;false&lt;/span&gt;;&lt;/pre&gt;&lt;/blockquote&gt;&lt;pre class="csharpcode"&gt;instead of:&lt;/pre&gt;
&lt;blockquote&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;bool&lt;/span&gt; result;

&lt;span class="kwrd"&gt;if&lt;/span&gt; (&lt;span class="kwrd"&gt;object&lt;/span&gt;.Type == businessObjectType.Status)
{
    result = &lt;span class="kwrd"&gt;true&lt;/span&gt;;
}
&lt;span class="kwrd"&gt;else&lt;/span&gt;
{
   result = &lt;span class="kwrd"&gt;false&lt;/span&gt;;
}&lt;/pre&gt;&lt;/blockquote&gt;&lt;pre class="csharpcode"&gt;The same goes for not always using { } when i don&amp;#39;t see the need.&lt;/pre&gt;&lt;pre class="csharpcode"&gt;ex.&lt;/pre&gt;
&lt;blockquote&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;if&lt;/span&gt; (&lt;span class="kwrd"&gt;object&lt;/span&gt;.FieldValue &amp;gt; 10)
   &lt;span class="kwrd"&gt;if&lt;/span&gt; (otherObject.FieldValue == &lt;span class="kwrd"&gt;object&lt;/span&gt;.FieldValue)
       // &lt;span class="kwrd"&gt;do&lt;/span&gt; something&lt;/pre&gt;&lt;/blockquote&gt;
&lt;p&gt;To me, shorthand code is extremely easy to use. I even use it nested at times when returning an object or value if there&amp;#39;s multiple checks to do and the logic can return multiple objects or values.&lt;/p&gt;
&lt;p&gt;My bad habits are obviously not in check with good coding practises, but i&amp;#39;ve been using this type of code for a LOONG time..the coding style is hard to changed but since it&amp;#39;s requested i suppose i&amp;#39;ll have to try.&lt;/p&gt;
&lt;p&gt;What do people think about it?&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=999648" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/brianmadsen/archive/tags/C_2300_.Net/default.aspx">C#.Net</category></item><item><title>Curtin University - Distributed Applications</title><link>http://msmvps.com/blogs/brianmadsen/archive/2007/07/01/curtin-university-distributed-applications.aspx</link><pubDate>Sat, 30 Jun 2007 15:00:02 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:994853</guid><dc:creator>Brian Madsen</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/brianmadsen/rsscomments.aspx?PostID=994853</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/brianmadsen/commentapi.aspx?PostID=994853</wfw:comment><comments>http://msmvps.com/blogs/brianmadsen/archive/2007/07/01/curtin-university-distributed-applications.aspx#comments</comments><description>&lt;p&gt;Today we had the final session on the Distributed Applications workshop, which was held by &lt;a href="http://community.softteq.com/blogs/nick" target="_blank"&gt;Nick Randolph&lt;/a&gt; and myself at Curtin University.&lt;/p&gt; &lt;p&gt;Regardless of the fact that our first day (tuesday) was a technological disaster, today was pretty great - the VMWare images were set up just right and we could concentrate on taking the students through our material.&lt;/p&gt; &lt;p&gt;We had a good turnout and the students where very enthusiastic about the workshop and the feedback we&amp;#39;ve gotten has been great.&lt;/p&gt; &lt;p&gt;Its good to see Curtin taking this initiative, being completely aware that what is being taught is not necessarily what the industry is using today. So hats off for Curtin for this.&lt;/p&gt; &lt;p&gt;Even though it was&amp;nbsp;a saturday, and i&amp;#39;m sure many can envision doing something a little more exciting than sitting in a class room, it went really really well.&lt;/p&gt; &lt;p&gt;We didn&amp;#39;t go into any very advanced topics but I feel we covered enough to get them started.&lt;/p&gt; &lt;p&gt;I wish the students all the best and hope they get a taste for the life of a geek.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=994853" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/brianmadsen/archive/tags/Personal/default.aspx">Personal</category><category domain="http://msmvps.com/blogs/brianmadsen/archive/tags/C_2300_.Net/default.aspx">C#.Net</category><category domain="http://msmvps.com/blogs/brianmadsen/archive/tags/Architecture/default.aspx">Architecture</category><category domain="http://msmvps.com/blogs/brianmadsen/archive/tags/Perth/default.aspx">Perth</category></item><item><title>Secret heroes...JP on DNR TV</title><link>http://msmvps.com/blogs/brianmadsen/archive/2007/06/24/secret-heroes-jp-on-dnr-tv.aspx</link><pubDate>Sun, 24 Jun 2007 00:48:52 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:983553</guid><dc:creator>Brian Madsen</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/brianmadsen/rsscomments.aspx?PostID=983553</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/brianmadsen/commentapi.aspx?PostID=983553</wfw:comment><comments>http://msmvps.com/blogs/brianmadsen/archive/2007/06/24/secret-heroes-jp-on-dnr-tv.aspx#comments</comments><description>&lt;p&gt;Well, i confess i&amp;#39;m a geek..readily at that..my cubicle at work has pictures of my kids, wife, dog, cat, Bill and Steve and several mutilations from my colleagues which includes a few odd creations with my face photoshopped onto other pictures..hmm..&lt;/p&gt; &lt;p&gt;I live and breathe code..i left management to start coding again as i wasn&amp;#39;t feeling happy at all. Hands on again and i&amp;#39;m happy as a midget in a female gelly wrestling match.&lt;/p&gt; &lt;p&gt;I also listen to tons of podcasts (5 slots in my 6 slot CD changer in the car contains podcasts) and watch/listen to quite a few screencasts as well.&lt;/p&gt; &lt;p&gt;The last, which feature one of my secret heroes - &lt;a href="http://www.jpboodhoo.com/blog/" target="_blank"&gt;J. P. Boodhoo&lt;/a&gt;&amp;nbsp;from &lt;a href="http://www.dnrtv.com" target="_blank"&gt;DNR TV&lt;/a&gt;&amp;nbsp;and titled &amp;quot;Demystifying Design Patterns Part 4&amp;quot; showed off some of the code-skill this guy actually has - lets not forget that JP also uses &lt;a href="http://www.jetbrains.com/resharper/" target="_blank"&gt;ReSharper&lt;/a&gt; and is a C# coder as well..brilliant!&lt;/p&gt; &lt;p&gt;It&amp;#39;s worth having a listen/watch show #71 from DNRTV and i think it&amp;#39;s one of the best in a long while.&lt;/p&gt; &lt;p&gt;So, geek it out a bit and succumb to the natural drive of all geeks to spend time we know we&amp;#39;ll never get back again..&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=983553" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/brianmadsen/archive/tags/C_2300_.Net/default.aspx">C#.Net</category><category domain="http://msmvps.com/blogs/brianmadsen/archive/tags/Code+Gurus/default.aspx">Code Gurus</category></item><item><title>Charlie Calvert's Community Blog : Anders Hejlsberg Talks about LINQ at Mix</title><link>http://msmvps.com/blogs/brianmadsen/archive/2007/05/03/charlie-calvert-s-community-blog-anders-hejlsberg-talks-about-linq-at-mix.aspx</link><pubDate>Thu, 03 May 2007 01:03:46 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:888326</guid><dc:creator>Brian Madsen</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/brianmadsen/rsscomments.aspx?PostID=888326</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/brianmadsen/commentapi.aspx?PostID=888326</wfw:comment><comments>http://msmvps.com/blogs/brianmadsen/archive/2007/05/03/charlie-calvert-s-community-blog-anders-hejlsberg-talks-about-linq-at-mix.aspx#comments</comments><description>&lt;p&gt;One of my own &amp;quot;secret&amp;quot; heroes, Anders Hejlsberg talks about LINQ with Charlie Calvert. For some reason, i always enjoy his enthusiasm. He&amp;#39;s very energetic in the way he talks and its obvious that he&amp;#39;s passionate about what he does.&lt;/p&gt; &lt;p&gt;There&amp;#39;s a link on Charlie&amp;#39;s blog for the video - it&amp;#39;s worth downloading and having a listen.&lt;/p&gt; &lt;p&gt;Anders is not only Danish (as i am) but he&amp;#39;s put Denmark on the atlas with the large amount of achievements he&amp;#39;s accomplished over the years.&lt;/p&gt; &lt;p&gt;Anders is also the chief architect of the C# language - how cool is that! So naturally i&amp;#39;m biased here but what he&amp;#39;s done so far with the language is simply brilliant.&lt;/p&gt; &lt;p&gt;I love hearing his accent...makes me homesick!&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/charlie/archive/2007/05/02/anders-hejlsberg-talks-about-linq-at-mix.aspx"&gt;Link to Charlie Calvert&amp;#39;s Community Blog : Anders Hejlsberg Talks about LINQ at Mix&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=888326" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/brianmadsen/archive/tags/Blog+Fun/default.aspx">Blog Fun</category><category domain="http://msmvps.com/blogs/brianmadsen/archive/tags/C_2300_.Net/default.aspx">C#.Net</category></item><item><title>Perth Central Tafe Presentation - Professional .Net Development</title><link>http://msmvps.com/blogs/brianmadsen/archive/2007/04/18/perth-central-tafe-presentation-professional-net-development.aspx</link><pubDate>Wed, 18 Apr 2007 14:13:25 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:829197</guid><dc:creator>Brian Madsen</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/brianmadsen/rsscomments.aspx?PostID=829197</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/brianmadsen/commentapi.aspx?PostID=829197</wfw:comment><comments>http://msmvps.com/blogs/brianmadsen/archive/2007/04/18/perth-central-tafe-presentation-professional-net-development.aspx#comments</comments><description>&lt;p&gt;Today I had the longest presentation i've yet to do - nearly 4hrs long - for Perth Central Tafe, a tertiary educational institution.&lt;/p&gt; &lt;p&gt;I broke the presentation down into 4 main groups:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;.Net Framework - Overview of a development platform  &lt;li&gt;ASP.Net - Working with the web  &lt;li&gt;ADO.Net - Data manipulation and beyond  &lt;li&gt;Tools of the trade - Visual Studio 2005, Expression Web and SQL Server 2005 Express&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Here's a few screenshots - i used Office Powerpoint 2007 and the themes built it comes with per default..Actually quite happy with Powerpoint 2007 compared to earlier versions..&lt;/p&gt; &lt;p&gt;&lt;a href="http://csharpzealot.com/cs_images/PerthCentralTafePresentat.NetDevelopment_13765/pic16.png"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="480" src="http://csharpzealot.com/cs_images/PerthCentralTafePresentat.NetDevelopment_13765/pic1_thumb4.png" width="640" border="0"&gt;&lt;/a&gt;&amp;nbsp;&lt;br&gt;First slide..&lt;/p&gt; &lt;p&gt;&lt;a href="http://csharpzealot.com/cs_images/PerthCentralTafePresentat.NetDevelopment_13765/pic22.png"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="478" src="http://csharpzealot.com/cs_images/PerthCentralTafePresentat.NetDevelopment_13765/pic2_thumb.png" width="640" border="0"&gt;&lt;/a&gt; &lt;br&gt;history of ASP.Net&lt;br&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://csharpzealot.com/cs_images/PerthCentralTafePresentat.NetDevelopment_13765/pic32.png"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="480" src="http://csharpzealot.com/cs_images/PerthCentralTafePresentat.NetDevelopment_13765/pic3_thumb.png" width="637" border="0"&gt;&lt;/a&gt;&amp;nbsp;&lt;br&gt;ADO.Net architecture&lt;br&gt;&lt;/p&gt; &lt;p&gt;It was quite a success, but 4hrs is definitely a bit too long for only 1 presenter. I did give plenty of breaks, but for some reason each of my own "breaks" was taken up with answering questions...Still it was good to see the enthusiasm and how the interest spread quickly.&lt;/p&gt; &lt;p&gt;We also went over time by roughly 40 minutes as more questions came in - this time for how to implement interfaces and how to bind a custom collection to a GridView.&lt;/p&gt; &lt;p&gt;All in all, it was great - the organise, Helen Burgess covered her ankle brilliantly by providing me with plenty of coffee.&lt;/p&gt; &lt;p&gt;So, thanks for the introduction goes to Helen and to Perth Central Tafe for having me present.&lt;/p&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=829197" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/brianmadsen/archive/tags/.Net+Framework/default.aspx">.Net Framework</category><category domain="http://msmvps.com/blogs/brianmadsen/archive/tags/ASP.Net/default.aspx">ASP.Net</category><category domain="http://msmvps.com/blogs/brianmadsen/archive/tags/Personal/default.aspx">Personal</category><category domain="http://msmvps.com/blogs/brianmadsen/archive/tags/Aussie+Development/default.aspx">Aussie Development</category><category domain="http://msmvps.com/blogs/brianmadsen/archive/tags/C_2300_.Net/default.aspx">C#.Net</category></item><item><title>Is this normal, or am i being anal?</title><link>http://msmvps.com/blogs/brianmadsen/archive/2007/03/27/is-this-normal-or-am-i-being-anal.aspx</link><pubDate>Tue, 27 Mar 2007 05:12:39 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:713757</guid><dc:creator>Brian Madsen</dc:creator><slash:comments>7</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/brianmadsen/rsscomments.aspx?PostID=713757</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/brianmadsen/commentapi.aspx?PostID=713757</wfw:comment><comments>http://msmvps.com/blogs/brianmadsen/archive/2007/03/27/is-this-normal-or-am-i-being-anal.aspx#comments</comments><description>&lt;p&gt;One of the tools i use is ReSharper - i love this tool and cannot...live...without...it..&lt;/p&gt; &lt;p&gt;A feature i really like is the code analysis bar on the right hand side of the code window.&lt;/p&gt; &lt;p&gt;&lt;a href="http://msmvps.com/blogs/brianmadsen/WindowsLiveWriter/Isthisnormaloramibeinganal_B9B6/code_analysis_resharper%5B5%5D.png"&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px;" height="105" src="http://msmvps.com/blogs/brianmadsen/WindowsLiveWriter/Isthisnormaloramibeinganal_B9B6/code_analysis_resharper_thumb%5B1%5D.png" width="22" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;I especially love seeing the little square go green - and stay that way.&lt;/p&gt; &lt;p&gt;Of course, this has its drawbacks, especially when working in a team environment since whenever i see this:&lt;/p&gt; &lt;p&gt;&lt;a href="http://msmvps.com/blogs/brianmadsen/WindowsLiveWriter/Isthisnormaloramibeinganal_B9B6/code_analysis_resharper_ouch%5B3%5D.png"&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px;" height="93" src="http://msmvps.com/blogs/brianmadsen/WindowsLiveWriter/Isthisnormaloramibeinganal_B9B6/code_analysis_resharper_ouch_thumb%5B1%5D.png" width="19" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;I rush over and fiddle with the code till it turns green.&lt;/p&gt; &lt;p&gt;It does really matter what it is since the warnings can be quite varied..i just cant help myself..&lt;/p&gt; &lt;p&gt;sometimes when i'm waiting for a file to be checked in, or a build to complete on the server...or just passing a few moments "thinking" of some problem or possible solution...i flick over to a file that i know has a warning in it and start going through a few warnings.&lt;/p&gt; &lt;p&gt;I mean, there's really nothing wrong with using .ToString()...but sometimes it's redundant to do so...and i remove it...&lt;/p&gt; &lt;p&gt;so, am i being anal or is this normal?&lt;/p&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=713757" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/brianmadsen/archive/tags/.Net+Framework/default.aspx">.Net Framework</category><category domain="http://msmvps.com/blogs/brianmadsen/archive/tags/Aussie+Development/default.aspx">Aussie Development</category><category domain="http://msmvps.com/blogs/brianmadsen/archive/tags/C_2300_.Net/default.aspx">C#.Net</category><category domain="http://msmvps.com/blogs/brianmadsen/archive/tags/Personal+Development/default.aspx">Personal Development</category><category domain="http://msmvps.com/blogs/brianmadsen/archive/tags/Handy+Tools/default.aspx">Handy Tools</category></item><item><title>C# Code tips #4, Interfaces</title><link>http://msmvps.com/blogs/brianmadsen/archive/2007/02/13/c-code-tips-4-interfaces.aspx</link><pubDate>Tue, 13 Feb 2007 14:57:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:574397</guid><dc:creator>Brian Madsen</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/brianmadsen/rsscomments.aspx?PostID=574397</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/brianmadsen/commentapi.aspx?PostID=574397</wfw:comment><comments>http://msmvps.com/blogs/brianmadsen/archive/2007/02/13/c-code-tips-4-interfaces.aspx#comments</comments><description>&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;DIV class=smallfont style="MARGIN:5px 20px 2px;"&gt;One of the most important aspects of Object-Oriented Development is interfaces. By now, most developers would have touched on them from one time or another, but strangely enough, not many use them that often on a daily basis. So why is that? is it a lack of understanding how interfaces work? or is it simply because it does give you additional work, at least early on, that we don't bother with them?&lt;/DIV&gt;
&lt;DIV class=smallfont style="MARGIN:5px 20px 2px;"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV class=smallfont style="MARGIN:5px 20px 2px;"&gt;It is a shame, because it's a very powerful way of allowing one object to be accessed by another. It also gives you the option (shouldn't really say option because i think it's almost a requirement to doing well-managed and segregated code) of seperating your &lt;A href="http://en.wikipedia.org/wiki/User_Interface" target=_blank&gt;UI logic&lt;/A&gt; from your &lt;A href="http://en.wikipedia.org/wiki/Business_Logic" target=_blank&gt;Business Logic&lt;/A&gt;.&lt;/DIV&gt;
&lt;DIV class=smallfont style="MARGIN:5px 20px 2px;"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV class=smallfont style="MARGIN:5px 20px 2px;"&gt;Here i'll show an example on how to utilise interfaces. mind you, for prosperity's sake it wont be a complete solution, but it should give you an idea on how to implement them.&lt;/DIV&gt;
&lt;DIV class=smallfont style="MARGIN:5px 20px 2px;"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV class=smallfont style="MARGIN:5px 20px 2px;"&gt;This example, which is very simple, displays the content of an XML file, bound to a DataGrid - but it does show how to create a re-usable control.&lt;/DIV&gt;
&lt;DIV class=smallfont style="MARGIN:5px 20px 2px;"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV class=smallfont style="MARGIN:5px 20px 2px;"&gt;I've create a solution with the following projects in it:&lt;/DIV&gt;
&lt;DIV class=smallfont style="MARGIN:5px 20px 2px;"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV class=smallfont style="MARGIN:5px 20px 2px;"&gt;- Interfaces (simple aspx web site)&lt;/DIV&gt;
&lt;DIV class=smallfont style="MARGIN:5px 20px 2px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Books.xml&lt;/DIV&gt;
&lt;DIV class=smallfont style="MARGIN:5px 20px 2px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Default.aspx&lt;BR&gt;- Controls (Class Library)&lt;/DIV&gt;
&lt;DIV class=smallfont style="MARGIN:5px 20px 2px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DataGridPanelControl.cs&lt;/DIV&gt;
&lt;DIV class=smallfont style="MARGIN:5px 20px 2px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; IDataGridPanelControl.cs&lt;/DIV&gt;
&lt;DIV class=smallfont style="MARGIN:5px 20px 2px;"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV class=smallfont style="MARGIN:5px 20px 2px;"&gt;First, we build our Control, which is a simple class that contains a Panel and a DataGrid&lt;/DIV&gt;
&lt;DIV class=smallfont style="MARGIN:5px 20px 2px;"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV class=smallfont style="MARGIN:5px 20px 2px;"&gt;Code: DataGridPanelControl.cs&lt;/DIV&gt;
&lt;DIV style="MARGIN:5px 20px 20px;"&gt;&lt;PRE class=alt2 style="BORDER-RIGHT:1px inset;PADDING-RIGHT:6px;BORDER-TOP:1px inset;PADDING-LEFT:6px;PADDING-BOTTOM:6px;MARGIN:0px;OVERFLOW:auto;BORDER-LEFT:1px inset;WIDTH:696px;PADDING-TOP:6px;BORDER-BOTTOM:1px inset;HEIGHT:233px;TEXT-ALIGN:left;"&gt;&lt;PRE&gt;using System;
using System.ComponentModel;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Xml;

namespace Controls
{
    public class DataGridPanelControl : IDataGridPanelControl
    {
        #region Private member variables and objects
        private Panel m_gridContainer;
        private DataGrid m_dataGrid;
        #endregion
                
        public void Initialise(XmlDataSource xmlDataSource)
        { 
            // instantiate all objects required
            m_gridContainer = new Panel();
            m_dataGrid = new DataGrid();

            // create datagrid columns
            this.CreateDataGridColumns();

            // lets not auto-generate columns for the sake of argument
            m_dataGrid.AutoGenerateColumns = false;
            m_dataGrid.DataSource = xmlDataSource;
           
            // add GridView control to the panels
            // control collection.
            m_gridContainer.Controls.Add( m_dataGrid );
        }
        
        public Control GridPanel
        {
            get { return m_gridContainer; }
        }

        public void BindDataGridView()
        {
            m_dataGrid.DataBind();
        }

        private void CreateDataGridColumns()
        {
            BoundColumn businessColumn = new BoundColumn();
            businessColumn.DataField = "genre";
            businessColumn.HeaderText = "Genre";

            m_dataGrid.Columns.Add(businessColumn);

            BoundColumn isbnColumn = new BoundColumn();
            isbnColumn.DataField = "ISBN";
            isbnColumn.HeaderText = "ISBN";

            m_dataGrid.Columns.Add(isbnColumn);

            BoundColumn titleColumn = new BoundColumn();
            titleColumn.DataField = "Title";
            titleColumn.HeaderText = "Title";

            m_dataGrid.Columns.Add(titleColumn);

            BoundColumn priceColumn = new BoundColumn();
            priceColumn.DataField = "Price";
            priceColumn.HeaderText = "Price";

            m_dataGrid.Columns.Add(priceColumn);

        }
    }
}
&lt;/PRE&gt;&lt;/PRE&gt;&lt;/DIV&gt;
&lt;DIV style="MARGIN:5px 20px 20px;"&gt;Secondly, we need our interface.&amp;nbsp;&lt;/DIV&gt;
&lt;DIV class=smallfont style="MARGIN:5px 20px 2px;"&gt;Code: IDataGridPanelControl.cs&lt;/DIV&gt;
&lt;DIV style="MARGIN:5px 20px 20px;"&gt;&lt;PRE class=alt2 style="BORDER-RIGHT:1px inset;PADDING-RIGHT:6px;BORDER-TOP:1px inset;PADDING-LEFT:6px;PADDING-BOTTOM:6px;MARGIN:0px;OVERFLOW:auto;BORDER-LEFT:1px inset;WIDTH:696px;PADDING-TOP:6px;BORDER-BOTTOM:1px inset;HEIGHT:233px;TEXT-ALIGN:left;"&gt;&lt;PRE&gt;using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Text;
using System.Web.UI;
using System.Xml;
using System.Web.UI.WebControls;


namespace Controls
{
    public interface IDataGridPanelControl
    {
        void Initialise(XmlDataSource xmlDataSource);
        void BindDataGridView();
        Control GridPanel { get;}
    }
}
&lt;/PRE&gt;&lt;/PRE&gt;&lt;/DIV&gt;
&lt;DIV style="MARGIN:5px 20px 20px;"&gt;And to finish it all off, we just need to call the interface in our aspx.cs page. In this page you'll see a reference to a &lt;STRONG&gt;controlPlaceHolder&lt;/STRONG&gt; which is a control i added in &lt;EM&gt;Design View&lt;/EM&gt; - a Placeholder control. and the &lt;STRONG&gt;xmlBooks &lt;/STRONG&gt;- a XmlDataSource control is also added in the &lt;EM&gt;Design View&lt;/EM&gt; of the Default.aspx page.&lt;/DIV&gt;
&lt;DIV class=smallfont style="MARGIN:5px 20px 2px;"&gt;Code: IDataGridPanelControl.cs&lt;/DIV&gt;
&lt;DIV style="MARGIN:5px 20px 20px;"&gt;&lt;PRE class=alt2 style="BORDER-RIGHT:1px inset;PADDING-RIGHT:6px;BORDER-TOP:1px inset;PADDING-LEFT:6px;PADDING-BOTTOM:6px;MARGIN:0px;OVERFLOW:auto;BORDER-LEFT:1px inset;WIDTH:696px;PADDING-TOP:6px;BORDER-BOTTOM:1px inset;HEIGHT:233px;TEXT-ALIGN:left;"&gt;&lt;PRE&gt;using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

using Controls;

public partial class _Default : System.Web.UI.Page
{
    #region Private member objects and variables
    private IDataGridPanelControl m_dataGridPanelControl;
    #endregion
    protected void Page_Load(object sender, EventArgs e)
    {
        // initialise all objects
        m_dataGridPanelControl = new DataGridPanelControl();
        m_dataGridPanelControl.Initialise(this.xmlBooks);
                
        controlPlaceHolder.Controls.Add(m_dataGridPanelControl.GridPanel);

        m_dataGridPanelControl.BindDataGridView();
    }
}

&lt;/PRE&gt;&lt;/PRE&gt;&lt;/DIV&gt;
&lt;DIV style="MARGIN:5px 20px 20px;"&gt;That's how simple it is. a re-usable (well, pretty much useless datagrid - but it gets the point across) control.. &lt;/DIV&gt;
&lt;DIV style="MARGIN:5px 20px 20px;"&gt;and the XML file (Books.xml) contains this.&lt;/DIV&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&amp;lt;?xml version="1.0" encoding="utf-8" ?&amp;gt;&lt;BR&gt;&amp;lt;Books&amp;gt;&lt;BR&gt;&amp;lt;book genre="Business" ISBN="BU1032" Title="The Busy Executive's Database Guide" Price="19.99" /&amp;gt;&lt;BR&gt;&amp;lt;book genre="Business" ISBN="BU1031" Title="The Busy Executive's KPI Reports Guide" Price="19.99" /&amp;gt;&lt;BR&gt;&amp;lt;book genre="History" ISBN="HI001" Title="The Rise and Fall of the VW Beetle" Price="25.00" /&amp;gt;&lt;BR&gt;&amp;lt;book genre="SCI-FI" ISBN="SF3263" Title="Monsters From Below" Price="9.95" /&amp;gt;&lt;BR&gt;&amp;lt;book genre="Kids" ISBN="KD7567" Title="Sally The Apple Girl" Price="5.85" /&amp;gt;&lt;BR&gt;&amp;lt;book genre="IT" ISBN="IT0001" Title="How To Waste Time - And Get Paid For It" Price="7.95" /&amp;gt;&lt;BR&gt;&amp;lt;/Books&amp;gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;p&gt;&lt;img src="http://msmvps.com/ink/28.ashx?633069547252027500" /&gt;&lt;/p&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=574397" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/brianmadsen/archive/tags/ASP.Net/default.aspx">ASP.Net</category><category domain="http://msmvps.com/blogs/brianmadsen/archive/tags/ASP.Net+-+Intermediate/default.aspx">ASP.Net - Intermediate</category><category domain="http://msmvps.com/blogs/brianmadsen/archive/tags/C_2300_.Net/default.aspx">C#.Net</category></item><item><title>ToolStripMenuItem, Event and Delegate problem - help</title><link>http://msmvps.com/blogs/brianmadsen/archive/2007/01/31/toolstripmenuitem-event-and-delegate-problem-help.aspx</link><pubDate>Wed, 31 Jan 2007 08:34:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:530789</guid><dc:creator>Brian Madsen</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/brianmadsen/rsscomments.aspx?PostID=530789</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/brianmadsen/commentapi.aspx?PostID=530789</wfw:comment><comments>http://msmvps.com/blogs/brianmadsen/archive/2007/01/31/toolstripmenuitem-event-and-delegate-problem-help.aspx#comments</comments><description>A small problem has stopped me from progressing on the project i'm currently working on. The problem shows its face when i try to subscribe to an event/delegate from a ToolStripMenuItem. I have a DataGridView which contain (among others) a custom column...(&lt;a href="http://msmvps.com/blogs/brianmadsen/archive/2007/01/31/toolstripmenuitem-event-and-delegate-problem-help.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://msmvps.com/aggbug.aspx?PostID=530789" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/brianmadsen/archive/tags/C_2300_.Net/default.aspx">C#.Net</category></item><item><title>C# Code tips #3, Strings</title><link>http://msmvps.com/blogs/brianmadsen/archive/2007/01/15/c-code-tips-3-strings.aspx</link><pubDate>Mon, 15 Jan 2007 11:52:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:494983</guid><dc:creator>Brian Madsen</dc:creator><slash:comments>4</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/brianmadsen/rsscomments.aspx?PostID=494983</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/brianmadsen/commentapi.aspx?PostID=494983</wfw:comment><comments>http://msmvps.com/blogs/brianmadsen/archive/2007/01/15/c-code-tips-3-strings.aspx#comments</comments><description>As most of us has figured out, string comparison is a performance bottleneck - so why do we do it? Well, data is most often in a humanly friendly format (eg. we can read it), and secondly we need to manipulate data to display to an end-user - both cases which require string comparison and/or creation.&lt;BR&gt;&lt;BR&gt;lets take this example, comparing two strings, say email addresses, which is passed in from a registration form:&lt;BR&gt;&lt;BR&gt;
&lt;DIV style="MARGIN:5px 20px 20px;"&gt;
&lt;DIV class=smallfont style="MARGIN-BOTTOM:2px;"&gt;Code:&lt;/DIV&gt;&lt;PRE class=alt2 style="BORDER-RIGHT:1px inset;PADDING-RIGHT:6px;BORDER-TOP:1px inset;PADDING-LEFT:6px;PADDING-BOTTOM:6px;MARGIN:0px;OVERFLOW:auto;BORDER-LEFT:1px inset;WIDTH:640px;PADDING-TOP:6px;BORDER-BOTTOM:1px inset;HEIGHT:82px;TEXT-ALIGN:left;"&gt;private bool CompareEmailAddresses(string email1, string email2)
{
   return (email1 == email2);
}&lt;/PRE&gt;&lt;/DIV&gt;or, alternatively, we want to ensure that two usernames are compare, with a business rule dictating that both strings the same case (here lower case).&lt;BR&gt;&lt;BR&gt;
&lt;DIV style="MARGIN:5px 20px 20px;"&gt;
&lt;DIV class=smallfont style="MARGIN-BOTTOM:2px;"&gt;Code:&lt;/DIV&gt;&lt;PRE class=alt2 style="BORDER-RIGHT:1px inset;PADDING-RIGHT:6px;BORDER-TOP:1px inset;PADDING-LEFT:6px;PADDING-BOTTOM:6px;MARGIN:0px;OVERFLOW:auto;BORDER-LEFT:1px inset;WIDTH:640px;PADDING-TOP:6px;BORDER-BOTTOM:1px inset;HEIGHT:82px;TEXT-ALIGN:left;"&gt;private bool CompareUsernames(string username1, string username2)
{
   return (username1.ToLower() == username2.ToLower());
}&lt;/PRE&gt;&lt;/DIV&gt;well - both sets of code does what it's meant to do - namely, compare two strings and returning a true/false.&lt;BR&gt;&lt;BR&gt;But is it effective?&lt;BR&gt;&lt;BR&gt;no - not really, for instance, using either ToUpper() or ToLower() actually doesn't change the current string, but actually returns a completely new string in the case requested. Logically that would not be effective in any way.&lt;BR&gt;&lt;BR&gt;How do we know this - well i use a handy tool called FxCop (&lt;A href="http://www.gotdotnet.com/Team/FxCop/" target=_blank&gt;&lt;FONT color=#22229c&gt;http://www.gotdotnet.com/Team/FxCop/&lt;/FONT&gt;&lt;/A&gt;), which will actually give you the following piece of information for the last string comparison method:&lt;BR&gt;&lt;BR&gt;
&lt;DIV style="MARGIN:5px 20px 20px;"&gt;
&lt;DIV class=smallfont style="MARGIN-BOTTOM:2px;"&gt;Quote:&lt;/DIV&gt;
&lt;TABLE class="" cellSpacing=0 cellPadding=6&gt;

&lt;TR&gt;
&lt;TD class=alt2 style="BORDER-RIGHT:1px inset;BORDER-TOP:1px inset;BORDER-LEFT:1px inset;BORDER-BOTTOM:1px inset;" class="alt2"&gt;"StringCompareTest.CompareUsername(String, String):Boolean calls String.op_Equality(String, String):Boolean after converting "stack1", a local to upper or lowercase. If possible, eliminate the string creation and call the overload of String.Compare that performs a case-insensitive comparison." &lt;/TD&gt;&lt;/TR&gt;&lt;/TABLE&gt;&lt;/DIV&gt;so how does that look:&lt;BR&gt;&lt;BR&gt;
&lt;DIV style="MARGIN:5px 20px 20px;"&gt;
&lt;DIV class=smallfont style="MARGIN-BOTTOM:2px;"&gt;Code:&lt;/DIV&gt;&lt;PRE class=alt2 style="BORDER-RIGHT:1px inset;PADDING-RIGHT:6px;BORDER-TOP:1px inset;PADDING-LEFT:6px;PADDING-BOTTOM:6px;MARGIN:0px;OVERFLOW:auto;BORDER-LEFT:1px inset;WIDTH:640px;PADDING-TOP:6px;BORDER-BOTTOM:1px inset;HEIGHT:82px;TEXT-ALIGN:left;"&gt;private bool CompareUsernames(string username1, string username2)
{
   return (string.Compare(username1, username2, false, System.Globalization.CultureInfo.CurrentCulture) == 0);
}&lt;/PRE&gt;&lt;/DIV&gt;There's also other tools available out there today which will help you write effective code and/or performance tune you code. One such tool is NProf (&lt;A href="http://www.mertner.com/confluence/display/NProf/Home" target=_blank&gt;&lt;FONT color=#22229c&gt;http://www.mertner.com/confluence/display/NProf/Home&lt;/FONT&gt;&lt;/A&gt;) which is a .Net profiler.&lt;BR&gt;&lt;BR&gt;Another snippet which is quite common is to check to see if your string is empty:&lt;BR&gt;&lt;BR&gt;
&lt;DIV style="MARGIN:5px 20px 20px;"&gt;
&lt;DIV class=smallfont style="MARGIN-BOTTOM:2px;"&gt;Code:&lt;/DIV&gt;&lt;PRE class=alt2 style="BORDER-RIGHT:1px inset;PADDING-RIGHT:6px;BORDER-TOP:1px inset;PADDING-LEFT:6px;PADDING-BOTTOM:6px;MARGIN:0px;OVERFLOW:auto;BORDER-LEFT:1px inset;WIDTH:640px;PADDING-TOP:6px;BORDER-BOTTOM:1px inset;HEIGHT:34px;TEXT-ALIGN:left;"&gt;if (username1.Length != 0) {}&lt;/PRE&gt;&lt;/DIV&gt;or &lt;BR&gt;&lt;BR&gt;
&lt;DIV style="MARGIN:5px 20px 20px;"&gt;
&lt;DIV class=smallfont style="MARGIN-BOTTOM:2px;"&gt;Code:&lt;/DIV&gt;&lt;PRE class=alt2 style="BORDER-RIGHT:1px inset;PADDING-RIGHT:6px;BORDER-TOP:1px inset;PADDING-LEFT:6px;PADDING-BOTTOM:6px;MARGIN:0px;OVERFLOW:auto;BORDER-LEFT:1px inset;WIDTH:640px;PADDING-TOP:6px;BORDER-BOTTOM:1px inset;HEIGHT:34px;TEXT-ALIGN:left;"&gt;if (username1 != "") {}&lt;/PRE&gt;&lt;/DIV&gt;i've learned not to use either of those - granted i've probably been a culprit before.&lt;BR&gt;&lt;BR&gt;personally i prefer to use:&lt;BR&gt;&lt;BR&gt;
&lt;DIV style="MARGIN:5px 20px 20px;"&gt;
&lt;DIV class=smallfont style="MARGIN-BOTTOM:2px;"&gt;Code:&lt;/DIV&gt;&lt;PRE class=alt2 style="BORDER-RIGHT:1px inset;PADDING-RIGHT:6px;BORDER-TOP:1px inset;PADDING-LEFT:6px;PADDING-BOTTOM:6px;MARGIN:0px;OVERFLOW:auto;BORDER-LEFT:1px inset;WIDTH:640px;PADDING-TOP:6px;BORDER-BOTTOM:1px inset;HEIGHT:34px;TEXT-ALIGN:left;"&gt;if (string.IsNullOrEmpty(username1)) {}&lt;/PRE&gt;&lt;/DIV&gt;or&lt;BR&gt;&lt;BR&gt;
&lt;DIV style="MARGIN:5px 20px 20px;"&gt;
&lt;DIV class=smallfont style="MARGIN-BOTTOM:2px;"&gt;Code:&lt;/DIV&gt;&lt;PRE class=alt2 style="BORDER-RIGHT:1px inset;PADDING-RIGHT:6px;BORDER-TOP:1px inset;PADDING-LEFT:6px;PADDING-BOTTOM:6px;MARGIN:0px;OVERFLOW:auto;BORDER-LEFT:1px inset;WIDTH:640px;PADDING-TOP:6px;BORDER-BOTTOM:1px inset;HEIGHT:34px;TEXT-ALIGN:left;"&gt;if (username != string.Empty) {}&lt;/PRE&gt;&lt;/DIV&gt;
&lt;DIV&gt;Anyways, google is your friend as there's tons of tidbits out there which explains the ins and outs of performance tuning code and help you get your code habits on the right track...&lt;/DIV&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=494983" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/brianmadsen/archive/tags/.Net+Framework/default.aspx">.Net Framework</category><category domain="http://msmvps.com/blogs/brianmadsen/archive/tags/C_2300_.Net/default.aspx">C#.Net</category></item><item><title>C# Code tips...</title><link>http://msmvps.com/blogs/brianmadsen/archive/2007/01/12/c-code-tips.aspx</link><pubDate>Thu, 11 Jan 2007 21:38:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:484852</guid><dc:creator>Brian Madsen</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/brianmadsen/rsscomments.aspx?PostID=484852</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/brianmadsen/commentapi.aspx?PostID=484852</wfw:comment><comments>http://msmvps.com/blogs/brianmadsen/archive/2007/01/12/c-code-tips.aspx#comments</comments><description>&lt;DIV id=post_message_81911&gt;it is very common, when coding, that you have to change values of a variable or display one image instead of another.&lt;BR&gt;&lt;BR&gt;mostly that's done is that you use "if" statements. &lt;BR&gt;&lt;BR&gt;
&lt;DIV style="MARGIN:5px 20px 20px;"&gt;
&lt;DIV class=smallfont style="MARGIN-BOTTOM:2px;"&gt;Code:&lt;/DIV&gt;&lt;PRE class=alt2 style="BORDER-RIGHT:1px inset;PADDING-RIGHT:6px;BORDER-TOP:1px inset;PADDING-LEFT:6px;PADDING-BOTTOM:6px;MARGIN:0px;OVERFLOW:auto;BORDER-LEFT:1px inset;WIDTH:640px;PADDING-TOP:6px;BORDER-BOTTOM:1px inset;HEIGHT:146px;TEXT-ALIGN:left;"&gt;if (!foo)
{
   bar = fizzle;
}
else
{
   bar = shizzle;
}&lt;/PRE&gt;&lt;/DIV&gt;Now overall that's not bad, but it is a bit redundant. One way to make your codebase smaller (and in my opinion, more elegant) is to relinguish the C# coders delight in using { } brackets.&lt;BR&gt;&lt;BR&gt;
&lt;DIV style="MARGIN:5px 20px 20px;"&gt;
&lt;DIV class=smallfont style="MARGIN-BOTTOM:2px;"&gt;Code:&lt;/DIV&gt;&lt;PRE class=alt2 style="BORDER-RIGHT:1px inset;PADDING-RIGHT:6px;BORDER-TOP:1px inset;PADDING-LEFT:6px;PADDING-BOTTOM:6px;MARGIN:0px;OVERFLOW:auto;BORDER-LEFT:1px inset;WIDTH:640px;PADDING-TOP:6px;BORDER-BOTTOM:1px inset;HEIGHT:82px;TEXT-ALIGN:left;"&gt;if (!foo)
   bar = fizzle;
else
   bar = shizzle;&lt;/PRE&gt;&lt;/DIV&gt;For single line variable/object etc value assignments that's fine. But it can even be done a lot more clever. Of course, the excample i use here is VERY basic, with foo is a boolean and bar, fizzle, shizzle being of ex. integer data types.&lt;BR&gt;&lt;BR&gt;My own coding pattern does look a bit different&lt;BR&gt;&lt;BR&gt;
&lt;DIV style="MARGIN:5px 20px 20px;"&gt;
&lt;DIV class=smallfont style="MARGIN-BOTTOM:2px;"&gt;Code:&lt;/DIV&gt;&lt;PRE class=alt2 style="BORDER-RIGHT:1px inset;PADDING-RIGHT:6px;BORDER-TOP:1px inset;PADDING-LEFT:6px;PADDING-BOTTOM:6px;MARGIN:0px;OVERFLOW:auto;BORDER-LEFT:1px inset;WIDTH:640px;PADDING-TOP:6px;BORDER-BOTTOM:1px inset;HEIGHT:34px;TEXT-ALIGN:left;"&gt;bar = (!foo) ? fizzle : shizzle;&lt;/PRE&gt;&lt;/DIV&gt;a lot easier to read and you get rid of the nasty "if" statements. What about other things? well, yes - that can be done too.&lt;BR&gt;&lt;BR&gt;ex. we need to display an image dependant on a value of something else.&lt;BR&gt;&lt;BR&gt;
&lt;DIV style="MARGIN:5px 20px 20px;"&gt;
&lt;DIV class=smallfont style="MARGIN-BOTTOM:2px;"&gt;Code:&lt;/DIV&gt;&lt;PRE class=alt2 style="BORDER-RIGHT:1px inset;PADDING-RIGHT:6px;BORDER-TOP:1px inset;PADDING-LEFT:6px;PADDING-BOTTOM:6px;MARGIN:0px;OVERFLOW:auto;BORDER-LEFT:1px inset;WIDTH:640px;PADDING-TOP:6px;BORDER-BOTTOM:1px inset;HEIGHT:226px;TEXT-ALIGN:left;"&gt;private CustomerStatus m_custStatus;
 
public enum CustomerStatus
{
   Active,
   Inactive
}
 
public CustomerStatus Status
{
   set { this.m_custStatus = value; }
   get { return this.m_custStatus; }
}&lt;/PRE&gt;&lt;/DIV&gt;Here i'm using a simple enumeration (CustomerStatus) and in my "class" i've exposed the enumeration as a property "public CustomerStatus Status", allowing the developer to choose a pre-determined range of values as it's value, by exposing the enumeration publicly.&lt;BR&gt;&lt;BR&gt;
&lt;DIV style="MARGIN:5px 20px 20px;"&gt;
&lt;DIV class=smallfont style="MARGIN-BOTTOM:2px;"&gt;Code:&lt;/DIV&gt;&lt;PRE class=alt2 style="BORDER-RIGHT:1px inset;PADDING-RIGHT:6px;BORDER-TOP:1px inset;PADDING-LEFT:6px;PADDING-BOTTOM:6px;MARGIN:0px;OVERFLOW:auto;BORDER-LEFT:1px inset;WIDTH:640px;PADDING-TOP:6px;BORDER-BOTTOM:1px inset;HEIGHT:178px;TEXT-ALIGN:left;"&gt;private Image GetCustomerStatus()
{
  Image custImage;
 
  custImage = (this.m_custStatus == CustomerStatus.Active) ?
      (Image)Properties.Resources.ResourceManager.GetObject("active") :
      (Image)Properties.Resources.ResourceManager.GetObject("inactive");
 
   return custImage;
}&lt;/PRE&gt;&lt;/DIV&gt;Very simple example but it shows how your code-life can become just a little bit easier.&lt;BR&gt;&lt;BR&gt;now i didn't wrap that in a try/catch block, nor did i do any validation if the resource i was looking for was actually there. it's a moot point to show that for this example.&lt;BR&gt;&lt;BR&gt;Lastly, i've found using Resources very handy - especially in Windows Forms applications and VS 2005's intellisense helps tremendously as it will actually list the resources without you having to call the GetObject() method.&lt;/DIV&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=484852" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/brianmadsen/archive/tags/C_2300_.Net/default.aspx">C#.Net</category></item></channel></rss>