views:

358

answers:

2

Hey guys I'm trying to do something really simple.. I'm checking a data column in my datarow if it's > 0 I want the item back color in the datalist to be green if its < 0 remain transparent...

if (e.Item.ItemType == ListItemType.Item ||
         e.Item.ItemType == ListItemType.AlternatingItem)
    {
        DataRowView drv = (DataRowView)(e.Item.DataItem);
        int rating = int.Parse(drv.Row["rating"].ToString());

        if (rating > 0)
        {
            e.Item.BackColor = System.Drawing.Color.Green;
        }

    }

I've stepped through with debugger and it's hitting all the conditions the color just isn't changing.. I know it has to be something simple I just can't see it.

+1  A: 

Where are the putting this code? It needs to be on the OnRowDataBound() event. It looks like you might be putting the above in OnItemDataBound().

David Neale
Hey David I'm using a DataList, I think you're thinking of a gridview? Thanks for your attempt though!
Jreeter
Ah sorry, missed that bit! Glad it's working now.
David Neale
+1  A: 

You need to use the e.Item.FindControl to instantiate an instance of the control you want to change the background color of.

if (e.Item.ItemType == ListItemType.Item ||
     e.Item.ItemType == ListItemType.AlternatingItem)
    {
        DataRowView drv = (DataRowView)(e.Item.DataItem);
        int rating = int.Parse(drv.Row["rating"].ToString());

        if (rating > 0)
        {
            Label lbl = (Label)e.Item.FindControl("yourLabelIDHere");
            lbl.BackColor = System.Drawing.Color.Green;

        }
    }
TheGeekYouNeed
I want to change the row color of the datalist..
Jreeter
You will need to surround your ItemTemplate contents with a DIV and add a runat="server" to the DIV, and make sure there is an ID.Then, on ItemDatabound, when your condition is met, div.Attributes.Add("style","background-color: Green;");
TheGeekYouNeed