views:

3107

answers:

5

How can styles be applied to CheckBoxList ListItems. Unlike other controls, such as the Repeater where you can specify , you can't seem to specify a style for each individual control.

Is there some sort of work around?

+6  A: 

It seems the best way to do this is to create a new CssClass. ASP.NET translates CheckBoxList into a table structure.

Using something like

Style.css

.chkboxlist td 
{
    font-size:x-large;
}

Page.aspx

<asp:CheckBoxList ID="chkboxlist1" runat="server" CssClass="chkboxlist" />

will do the trick

Andrew Burgess
This of course affects all the listitems, to affect a single listitem you need to add attributes to the listitem as it is created.
Cyberherbalist
Thanks for the tip! I was going more for something like how a repeater can apply a style to each item, but this is certainly helpful :)
Andrew Burgess
Yeah, that was in my answer (with code), too.
Cyberherbalist
+4  A: 

You can add Attributes to ListItems programmatically as follows.

Say you've got a CheckBoxList and you are adding ListItems. You can add Attributes along the way.

ListItem li = new ListItem("Richard Byrd", "11");
li.Selected = false;
li.Attributes.Add("Style", "color: red;");
CheckBoxList1.Items.Add(li);

This will make the color of the listitem text red. Experiment and have fun.

Cyberherbalist
+1  A: 

In addition to Andrew's answer...

Depending on what other attributes you put on a CheckBoxList or RadioButtonList or whatever, ASP.Net will render the output using different structures. For example, if you set RepeatLayout="Flow", it won't render as a TABLE, so you have to be careful of what descendant selectors you use in your CSS file.

In most cases, you can can just do a "View Source" on your rendered page, maybe on a couple of different browsers, and figure out what ASP.Net is doing. There is a danger, though, that new versions of the server controls or different browsers will render them differently.

If you want to style a particular list item or set of list items differently without adding in attributes in the code-behind, you can use CSS attribute selectors. The only drawback to that is that they aren't supported in IE6. jQuery fully supports CSS 3 style attribute selectors, so you could probably also use it for wider browser support.

CMPalmer
A: 

The link was really helpfull, Thanks a lot

A: 

@Cyberherbalist The solution presented by you works well. Thanks

But when the page loads after a subsequent postback (because of some other event) it looses the color, even though I have specified EnableViewState for the control and for its parents.

Am I missing something or is there any trick.