У меня есть ситуация, когда мне нужно знать текущий цвет чередующейся строки в TemplateField GridView.
ОБНОВЛЕНО:
Как получить это значение цвета в файле <%# ??? %>.
(Или обходной путь, где я получаю номер строки).
У меня есть ситуация, когда мне нужно знать текущий цвет чередующейся строки в TemplateField GridView.
ОБНОВЛЕНО:
Как получить это значение цвета в файле <%# ??? %>.
(Или обходной путь, где я получаю номер строки).
Создайте эту функцию на странице кода программной части (или в разделе страницы .aspx):
protected string GetColor(object container)
{
int ordinal = 0;
try
{
ordinal = int.Parse(DataBinder.Eval(container, "DataItemIndex").ToString());
}
catch (Exception)
{
ordinal = int.Parse(DataBinder.Eval(container, "ItemIndex").ToString());
}
return (ordinal % 2) == 0 ? "Row" : "Alternate Row";
}
Затем в вашей разметке вы бы назвали это так:
<%# GetOrdinal(Container) %>
(Обратите внимание на заглавную букву «Контейнер»).
Чтобы получить цвета внутри тега ‹% %> в самом поле шаблона, вы можете использовать этот код...
<asp:TemplateField>
<ItemTemplate>
<%# ((GridViewRow)Container).RowState == DataControlRowState.Alternate ? ((GridView)((GridViewRow)Container).Parent.Parent).AlternatingRowStyle.BackColor : ((GridView)((GridViewRow)Container).Parent.Parent).RowStyle.BackColor%>
</ItemTemplate>
</asp:TemplateField>
Вы также можете сделать это в событии RowDataBound GridView. В команде RowDataBound вы можете запросить e.Row.RowState, чтобы узнать, в каком типе строки вы находитесь. Значения включают DataControlRowState.Alternate и DataControlRowState.Normal. Вы можете использовать отправителя для захвата цвета на основе этого типа строки...
protected void MyGridView_RowDataBound(object sender, GridViewRowEventArgs e)
{
// set first cell in the row to color just for demonstration purpose.
if (e.Row.RowType == DataControlRowType.DataRow && e.Row.RowState == DataControlRowState.Alternate)
{
e.Row.Cells[0].Text = ((GridView)sender).AlternatingRowStyle.BackColor.ToString();
}
}
Это может быть странным обходным путем, но вы всегда можете проверить, является ли строка, которую вы проверяете, четной или нечетной строкой. Если это четное число, скорее всего, используется цвет, заданный в шаблоне AlternatingRow. Если он четный, он должен использовать обычный шаблон Row.
Как GridView меняет цвет — каждую вторую строку или фрагментами X? Или он установлен каким-то более «случайным» образом?
Если это каждая вторая строка, вы можете просто проверить, является ли строка «нормальной» строкой или «чередующейся» строкой.
Я не могу вспомнить, как именно это написано, и я нашел только этот пример VB, но он может быть чем-то полезен:
If e.Row.RowState = DataControlRowState.Normal Then
//do stuff
ElseIf e.Row.RowState = DataControlRowState.Alternate Then
//do other stuff
Где e — объект GridView. Однако это не проверяет фактический цвет строки. Я полагаю, вы должны быть в состоянии сделать что-то вроде:
if(System.Drawing.Color.Red == e.Row.BackColor)
Если можно, пожалуйста, подробнее о том, как задается цвет в каждой строке.