<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:copyright="http://blogs.law.harvard.edu/tech/rss" xmlns:image="http://purl.org/rss/1.0/modules/image/">
    <channel>
        <title>C#</title>
        <link>http://geekswithblogs.net/mucman/category/6398.aspx</link>
        <description>C#</description>
        <language>en-CA</language>
        <copyright>Scott Muc</copyright>
        <managingEditor>scottmuc@gmail.com</managingEditor>
        <generator>Subtext Version 0.0.0.0</generator>
        <item>
            <title>Golf Trip Foursome Picker Math Problem</title>
            <link>http://geekswithblogs.net/mucman/archive/2007/06/17/113278.aspx</link>
            <description>&lt;p&gt;&lt;img width="200" height="133" src="http://www.nichd.nih.gov/research/supported/images/CB106394.jpg" style="float: left; margin-right: 10px;" alt="" /&gt; Every year I go out on a golf trip with 10-16 guys. One of the biggest problems with the event is making sure everyone golfs with everyone, and that no-one seems to golf with the same person too often. My math skills are sorely lacking right now and could use some help to write a little application that takes a pool of players, a count of how many rounds are to be played, and output the assigned groups for each round. &lt;/p&gt;
&lt;p&gt; Right now I don't even know where to begin. I think the first crack at the problem should have the &lt;span style="font-weight: bold;"&gt;number of golfers % 4 equal to zero&lt;/span&gt; as a start. Then eventually refine it for when we have to deal with a threesome or perhaps more than one threesome. &lt;/p&gt;
&lt;p&gt; I would love to gather as much feedback as possible. It doesn't have to solve my problem but at least a nudge in the right direction would be great. I promise to post my code when this gets finished. &lt;/p&gt;
&lt;p&gt; I'm going write my first version that simply does random picks from a pool without replacement for each round and see that stats of that method. &lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=113278"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=113278" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/mucman/aggbug/113278.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Scott Muc</dc:creator>
            <guid>http://geekswithblogs.net/mucman/archive/2007/06/17/113278.aspx</guid>
            <pubDate>Mon, 18 Jun 2007 03:48:23 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/mucman/comments/113278.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/mucman/archive/2007/06/17/113278.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/mucman/comments/commentRss/113278.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/mucman/services/trackbacks/113278.aspx</trackback:ping>
        </item>
        <item>
            <title>string.ToTitleCase()</title>
            <link>http://geekswithblogs.net/mucman/archive/2007/03/26/109892.aspx</link>
            <description>&lt;p&gt; Strange how the string class almost has everything you need. I came across the need to Title Case some text, because I couldn't guarantee the text that I receive is properly formatted. I automatically assumed I could simply use .ToTitleCase() on my string. Woops, compilation error! &lt;/p&gt;
&lt;p&gt; Luckily a search found a quick and easy solution, and I wrote the beginnings of my StringHelper class. It's first method? The .ToTitleCase() method. &lt;/p&gt;
&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;
&lt;div class="csharpcode"&gt;
&lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; static &lt;span class="kwrd"&gt;class&lt;/span&gt; StringHelper&lt;/pre&gt;
&lt;pre&gt;{&lt;/pre&gt;
&lt;pre class="alt"&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static string&lt;/span&gt; ToTitleCase(&lt;span class="kwrd"&gt;string&lt;/span&gt; text)&lt;/pre&gt;
&lt;pre&gt;    {&lt;/pre&gt;
&lt;pre class="alt"&gt;        &lt;span class="kwrd"&gt;return&lt;/span&gt; StringHelper.ToTitleCase(text, CultureInfo.InvariantCulture);&lt;/pre&gt;
&lt;pre&gt;    }&lt;/pre&gt;
&lt;pre class="alt"&gt;    &lt;/pre&gt;
&lt;pre&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; string ToTitleCase(&lt;span class="kwrd"&gt;string&lt;/span&gt; text, CultureInfo cultureInfo)&lt;/pre&gt;
&lt;pre class="alt"&gt;    {&lt;/pre&gt;
&lt;pre&gt;        &lt;span class="kwrd"&gt;if&lt;/span&gt; (&lt;span class="kwrd"&gt;string&lt;/span&gt;.IsNullOrEmpty(text)) &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt;.Empty;&lt;/pre&gt;
&lt;pre class="alt"&gt;    &lt;/pre&gt;
&lt;pre&gt;        TextInfo textInfo = cultureInfo.TextInfo;&lt;/pre&gt;
&lt;pre class="alt"&gt;        &lt;span class="kwrd"&gt;return&lt;/span&gt; textInfo.ToTitleCase(text.ToLower());&lt;/pre&gt;
&lt;pre&gt;    }&lt;/pre&gt;
&lt;pre class="alt"&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt; Some credit goes to &lt;a href="http://west-wind.com/weblog/posts/361.aspx"&gt;this post&lt;/a&gt; for letting me know the all upper case issue. &lt;/p&gt;
&lt;p&gt; Yeah, I know this has been discussed eons ago. This is mostly for my own reference. &lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=109892"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=109892" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/mucman/aggbug/109892.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Scott Muc</dc:creator>
            <guid>http://geekswithblogs.net/mucman/archive/2007/03/26/109892.aspx</guid>
            <pubDate>Mon, 26 Mar 2007 17:58:00 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/mucman/comments/109892.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/mucman/archive/2007/03/26/109892.aspx#feedback</comments>
            <slash:comments>4</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/mucman/comments/commentRss/109892.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/mucman/services/trackbacks/109892.aspx</trackback:ping>
        </item>
        <item>
            <title>A Refactoring Tale</title>
            <link>http://geekswithblogs.net/mucman/archive/2007/03/22/109562.aspx</link>
            <description>
&lt;p&gt;
I'm a firm believer that using the &lt;a href="http://scottwater.com/blog/archive/quick-tips-for-asp-net-part-one/"&gt;
Repeater&lt;/a&gt; control is the best compromise in flexibility and ease of use for displaying
collections of data. Much of my databinding code looks like the following real world example:
&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;CodeBehind&lt;/strong&gt;&lt;/p&gt;

&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;
&lt;div class="csharpcode"&gt;
&lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;void&lt;/span&gt; Page_Load(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, EventArgs e)&lt;/pre&gt;
&lt;pre&gt;{&lt;/pre&gt;
&lt;pre class="alt"&gt;    &lt;span class="kwrd"&gt;if&lt;/span&gt; (!Page.IsPostBack)&lt;/pre&gt;
&lt;pre&gt;    {&lt;/pre&gt;
&lt;pre class="alt"&gt;        Collection&amp;lt;Venue&amp;gt;  venues = ConcertDataService.GetVenues();&lt;/pre&gt;
&lt;pre&gt;        &lt;/pre&gt;
&lt;pre class="alt"&gt;        rptVenues.DataSource = venues;&lt;/pre&gt;
&lt;pre&gt;        rptVenues.DataBind();&lt;/pre&gt;
&lt;pre class="alt"&gt;    }&lt;/pre&gt;
&lt;pre&gt;}&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;.aspx or .ascx&lt;/strong&gt;&lt;/p&gt;

&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;
&lt;div class="csharpcode"&gt;
&lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;asp:Repeater&lt;/span&gt; &lt;span class="attr"&gt;id&lt;/span&gt;&lt;span class="kwrd"&gt;="rptVenues"&lt;/span&gt; &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;="server"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;HeaderTemplate&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;div&lt;/span&gt; &lt;span class="attr"&gt;class&lt;/span&gt;&lt;span class="kwrd"&gt;="venues"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;HeaderTemplate&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;ItemTemplate&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;div&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;            &lt;span class="asp"&gt;&amp;lt;%&lt;/span&gt;# ((Venue) Container.DataItem).Name &lt;span class="asp"&gt;%&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;            &lt;span class="asp"&gt;&amp;lt;%&lt;/span&gt;# ((Venue) Container.DataItem).Address.City &lt;span class="asp"&gt;%&amp;gt;&lt;/span&gt;, &lt;span class="asp"&gt;&amp;lt;%&lt;/span&gt;# ((Venue) Container.DataItem).Address.Province &lt;span class="asp"&gt;%&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;        &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;div&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;ItemTemplate&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;FooterTemplate&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;div&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;FooterTemplate&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;asp:Repeater&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
Today I &lt;a href="http://en.wikipedia.org/wiki/Refactoring"&gt;refactored&lt;/a&gt;
some code so I could get rid of the Addresses table in
the database. To make a long story short, the Address table wasn't working
the way I anticipated. Triggers are required to create and delete address
tuples, and the whole design had lots of &lt;a href="http://www.codinghorror.com/blog/archives/000589.html"&gt;
code smells&lt;/a&gt;. I merged the columns of the address table into the Venues table and eleminated 3 stored procedures,
2 triggers, and 1 join inside a view. I got rid of the Address class and
attempted to re-compile my code. As expected, my code broke at all Venue
code where I was using the Address class. I simply converted the Address
properties into properties of the Venue class. It didn't take long to update
the code so that I am using &lt;code&gt;Venue.City&lt;/code&gt; instead of &lt;code&gt;Venue.Address.City&lt;/code&gt;.
&lt;/p&gt;
&lt;p&gt;
All good, right? I deploy my binaries to my development site and I start
getting exceptions on certain pages. Invalid properties?! Oh, but of
course. Compiling the codebehind doesn't ensure that the .aspx pages are
not broken. The fix is trivial, but compile time discovery of these errors
would be nice. The following databind code shows the difference:
&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;.aspx or .ascx&lt;/strong&gt;&lt;/p&gt;
&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;
&lt;div class="csharpcode"&gt;
&lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;asp:Repeater&lt;/span&gt; &lt;span class="attr"&gt;id&lt;/span&gt;&lt;span class="kwrd"&gt;="rptVenues"&lt;/span&gt; &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;="server"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;HeaderTemplate&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;div&lt;/span&gt; &lt;span class="attr"&gt;class&lt;/span&gt;&lt;span class="kwrd"&gt;="venues"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;HeaderTemplate&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;ItemTemplate&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;div&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;            &lt;span class="asp"&gt;&amp;lt;%&lt;/span&gt;# ((Venue) Container.DataItem).Name &lt;span class="asp"&gt;%&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;            &lt;span class="asp"&gt;&amp;lt;%&lt;/span&gt;# ((Venue) Container.DataItem).City &lt;span class="asp"&gt;%&amp;gt;&lt;/span&gt;, &lt;span class="asp"&gt;&amp;lt;%&lt;/span&gt;# ((Venue) Container.DataItem).Province &lt;span class="asp"&gt;%&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;        &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;div&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;ItemTemplate&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;FooterTemplate&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;div&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;FooterTemplate&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;asp:Repeater&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;
Luckily I am working on a fairly small project so I only had a half a
dozen .aspx and .ascx files to update (and &lt;a href="http://www.textpad.com/"&gt;TextPad's&lt;/a&gt; "Find in Files" feature
really did most of the work).
&lt;/p&gt;
&lt;p&gt;
On the way home on the bus I thought about the work I had to go through
to perform this refactoring. Is explicit property calls in the .aspx a
good idea? Second, I wouldn't have had this problem if I kept the Address
class hidden and used Venue properties in the first place. Let's ignore
the fact that I implemented the class incorrectly ;-).
&lt;/p&gt;
&lt;p&gt;
Would using Web/User controls inside the Repeater be a better way
of implementing this behaviour? If I had done it that way, the
compiler would have caught the missing properties. Here's my alternate
implementation:
&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CodeBehind&lt;/strong&gt;&lt;/p&gt;
&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;
&lt;div class="csharpcode"&gt;
&lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;void&lt;/span&gt; Page_Init(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, EventArgs e)&lt;/pre&gt;
&lt;pre&gt;{&lt;/pre&gt;
&lt;pre class="alt"&gt;    rptVenues.ItemDataBound += &lt;span class="kwrd"&gt;new&lt;/span&gt; RepeaterItemEventHandler(rptVenues_ItemDataBound);&lt;/pre&gt;
&lt;pre&gt;}&lt;/pre&gt;
&lt;pre class="alt"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="kwrd"&gt;void&lt;/span&gt; Page_Load(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, EventArgs e)&lt;/pre&gt;
&lt;pre class="alt"&gt;{&lt;/pre&gt;
&lt;pre&gt;    &lt;span class="kwrd"&gt;if&lt;/span&gt; (!Page.IsPostBack)&lt;/pre&gt;
&lt;pre class="alt"&gt;    {&lt;/pre&gt;
&lt;pre&gt;        Collection&amp;lt;Venue&amp;gt;  venues = ConcertDataService.GetVenues();&lt;/pre&gt;
&lt;pre class="alt"&gt;        &lt;/pre&gt;
&lt;pre&gt;        rptVenues.DataSource = venues;&lt;/pre&gt;
&lt;pre class="alt"&gt;        rptVenues.DataBind();&lt;/pre&gt;
&lt;pre&gt;    }&lt;/pre&gt;
&lt;pre class="alt"&gt;}&lt;/pre&gt;
&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;void&lt;/span&gt; rptVenues_ItemDataBound(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, RepeaterItemEventArgs e)&lt;/pre&gt;
&lt;pre&gt;{&lt;/pre&gt;
&lt;pre class="alt"&gt;    &lt;span class="kwrd"&gt;if&lt;/span&gt; (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) &lt;/pre&gt;
&lt;pre&gt;    {&lt;/pre&gt;
&lt;pre class="alt"&gt;        Venue venue = (Venue) e.Item.DataItem;&lt;/pre&gt;
&lt;pre&gt;        &lt;/pre&gt;
&lt;pre class="alt"&gt;        Literal litName = (Literal) e.Item.FindControl(&lt;span class="str"&gt;"litName"&lt;/span&gt;);&lt;/pre&gt;
&lt;pre&gt;        Literal litCity = (Literal) e.Item.FindControl(&lt;span class="str"&gt;"litCity"&lt;/span&gt;);&lt;/pre&gt;
&lt;pre class="alt"&gt;        Literal litProvince = (Literal) e.Item.FindControl(&lt;span class="str"&gt;"litProvince"&lt;/span&gt;);&lt;/pre&gt;
&lt;pre&gt;        &lt;/pre&gt;
&lt;pre class="alt"&gt;        litCity.Text = venue.City; &lt;span class="rem"&gt;// used to be venue.Address.City&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;        litProvince.Text = venue.Province &lt;span class="rem"&gt;// used to be venue.Address.Province&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;    }&lt;/pre&gt;
&lt;pre&gt;}&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;.aspx or .ascx&lt;/strong&gt;&lt;/p&gt;

&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;
&lt;div class="csharpcode"&gt;
&lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;asp:Repeater&lt;/span&gt; &lt;span class="attr"&gt;id&lt;/span&gt;&lt;span class="kwrd"&gt;="rptVenues"&lt;/span&gt; &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;="server"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;HeaderTemplate&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;div&lt;/span&gt; &lt;span class="attr"&gt;class&lt;/span&gt;&lt;span class="kwrd"&gt;="venues"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;HeaderTemplate&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;ItemTemplate&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;div&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;asp:Literal&lt;/span&gt; &lt;span class="attr"&gt;id&lt;/span&gt;&lt;span class="kwrd"&gt;="litName"&lt;/span&gt; &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;="server"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;asp:Literal&lt;/span&gt; &lt;span class="attr"&gt;id&lt;/span&gt;&lt;span class="kwrd"&gt;="litCity"&lt;/span&gt; &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;="server"&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;asp:Literal&lt;/span&gt; &lt;span class="attr"&gt;id&lt;/span&gt;&lt;span class="kwrd"&gt;="litProvince"&lt;/span&gt; &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;="server"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;        &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;div&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;ItemTemplate&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;FooterTemplate&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;div&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;FooterTemplate&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;asp:Repeater&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;
What's changed is that I now have code in the ItemDataBound event handler
for the repeater. It's a lot of extra code, but it does allow a lot of
room for future changes without much front end adjustment. Recompiling will
find errors in the class structure which I really love.
&lt;/p&gt;
&lt;p&gt;
It's sort of a toss up for me. I love the quick and simple data binding
in the ItemTemplate of the Repeater, but after refactoring a bunch
of aspx files today I might turn a new leaf. Has anyone else dealt with
this sort of issue? What are your thoughts?
&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=109562"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=109562" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/mucman/aggbug/109562.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Scott Muc</dc:creator>
            <guid>http://geekswithblogs.net/mucman/archive/2007/03/22/109562.aspx</guid>
            <pubDate>Fri, 23 Mar 2007 00:10:00 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/mucman/comments/109562.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/mucman/archive/2007/03/22/109562.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/mucman/comments/commentRss/109562.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/mucman/services/trackbacks/109562.aspx</trackback:ping>
        </item>
    </channel>
</rss>