Предположим, у вас есть GridView с несколькими столбцами, например:
| Фу | Бар | Итого |
и вы используете таблицу стилей, чтобы сделать чередующиеся строки разными цветами, например, голубым и белым.
Есть ли хороший способ сделать столбец другим цветом? Например, я могу захотеть, чтобы столбец «Итого» чередовался со средним и светло-красным цветом, чтобы привлечь внимание к нему в большой сетке.
Кстати, я знаю, что вы можете программно изменить цвет ячейки. Однако я хотел бы придерживаться CSS, если это возможно, чтобы все мои стилистики были в одном месте. Я также не вижу простого способа узнать, нахожусь ли я в чередующейся строке, когда нахожусь внутри обработчика событий.





Если вы используете jQuery, вы можете сделать это довольно легко.
$("table#myTable col:odd").css("background-color:#ffe");
селектор :odd недоступен в большинстве современных браузеров, но jQuery предоставляет его нам сегодня.
Для строк это можно сделать с помощью встроенного элемента AlternatingRowStyle.
Обновлено: нашел хороший ресурс для разных способов сделать это: http://css-discuss.incutio.com/?page=StylingColumns
В дополнение к Предложение бена, у Мэтта Берсета также есть неплохая демонстрация того, как сделать подсветку столбцов при наведении курсора, используя GridViewControlExtender, что очень приятно:
Также есть масса других вещей о том, как улучшить ваш GridView на его сайте:
http://mattberseth.com/blog/gridview/
Во многих примерах используются биты ASP.NET Ajax и Ajax Control Toolkit, но их несложно перенести на облегченные эквиваленты jQuery.
здесь идет по 2 касательным ...
P.S. «также не вижу простого способа узнать, нахожусь ли я в чередующейся строке, когда нахожусь внутри обработчика событий».
Row.RowState == RowState.Alternating
Кроме того, вы всегда можете установить CssClass в соответствующие ячейки в ASP.NET, а затем определить этот класс в своем CSS.
Я нашел это при поиске того же вопроса относительно ListView WPF GridView. Здесь ответ - использовать StyleSelector нравится этот, описанный Беа Коста:
public class ListViewItemStyleSelector : StyleSelector
{
private int i = 0;
public override Style SelectStyle(object item, DependencyObject container)
{
// makes sure the first item always gets the first style, even when restyling
ItemsControl ic = ItemsControl.ItemsControlFromItemContainer(container);
if (item == ic.Items[0])
{
i = 0;
}
string styleKey;
if (i % 2 == 0)
{
styleKey = “ListViewItemStyle1″;
}
else
{
styleKey = “ListViewItemStyle2″;
}
i++;
return (Style)(ic.FindResource(styleKey));
}
}
Есть несколько гнид, которые нужно выбрать, чтобы заставить это работать действительно хорошо, и все они описаны в ее сообщении в блоге.
Единственное, что не может помочь, это то, что это работает только для строк. Столбцы, кажется, всегда должны использовать CellTemplate / Style.