looks like it’s not possible to have optgroups in an ASP.NET Dropdownlist without subclassing. Today I found a very useful snippet on stackoverflow that allows to group items on client side and I want to share it with the world:

server:

private void AddItemToList(DropDownList list, string title, string value, string group = string.Empty) {
   ListItem item = new ListItem(title, value);
   if (!String.IsNullOrEmpty(group))
   {
       item.Attributes["data-category"] = group;
   }
   list.Items.Add(item);
}

 client:

var groups = {};
$("select option[data-category]").each(function () {
     groups[$.trim($(this).attr("data-category"))] = true;
});
$.each(groups, function (c) {
     $("select option[data-category='"+c+"']").wrapAll('<optgroup label="' + c + '">');
});

Hope it helps!