Gary Synan

Think Outside the Dot Net Repeater

Est. Reading Time: 2 minutes

In Dot Net, as with most web development, there seems to be several ways to accomplish the same task. Some may be better based upon maintainability, clarity, etc. In some cases it’s just preference.

I had such a case recently when I was tasked with making a field in a repeater red if a quantity value was negative.  I know, the obvious way would be to use the ‘findControl’ method within the ‘OnItemDataBound’ event, checking the quantity for a less than zero condition and then setting the color property on the field in question to red.

I wondered if I could walk on the wild side and accomplish the same thing by supplying the color to the repeater with the data from the DB and not invoking the ‘OnItemDataBound’ event at all.  Take a look at the snippet of code below to see how the repeater was defined for this task.  Note the column ‘OrderNo’ – this is the column to make red if the quantity is negative. The quantity is not to be displayed in the repeater.

. . . <ItemTemplate> <tr> <td><span style=”color:<%#Container.dataItem(“color”) %>”><%#Container.DataItem(“OrderNo”)%></span></td> <td><%#Container.DataItem(“SalesPersonName”)%></td> <td><%#Container.DataItem(“CustomerNo”)%></td> <td><%#Container.DataItem(“CustomerName”)%></td> . . .

All I have to do now is supply the color that I want the field to be as a column named ‘color’.    Now let’s take a look at the select statement to do that:

SELECT o.OrderNo, ISNULL(o.SalesPersonName, ””) SalesPersonName, ISNULL(o.CustomerNo,””) CustomerNo, o.CustomerName, (select case when min(oi.Quantity) < 0 then ”red” else ”black” end from OrderItems oi where oi.OrderNo = o.orderno) as color FROM Orders o

And Voila!!  The repeater field obtains its color from the data selected from the DB.  Now I know this is not as radical as stopping the oil leak at the Gulf Coast  (or event the one in my leaf blower for that matter), but a different twist none the less.

Now, pardon me while I go work on my leaf blower -

One Comment

  1. Posted June 1, 2010 at 12:59 pm | Permalink

    Great post. This is a fantastic way to conditionally format repeaters. It works just as well for gridviews too. And there’s no reason to stop at field colors. You can stick all sorts of HTML into your SQL selects. I think those of us who came to web development from database development would always rather keep the logic — even the formatting logic — in the stored procs.