Получить текущий цвет строки в TemplateField? - PullRequest
0 голосов
/ 13 марта 2009

У меня есть ситуация, когда мне нужно знать текущий цвет чередующейся строки в TemplateField GridView.

ОБНОВЛЕНИЕ:

Как получить это значение цвета в <%# ??? %>.

(или обходной путь, где я получаю номер строки).

Ответы [ 5 ]

1 голос
/ 26 февраля 2011
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        e.Row.Attributes.Add("style", "cursor:help;");
        if (e.Row.RowType == DataControlRowType.DataRow && e.Row.RowState == DataControlRowState.Alternate)
        { 
            if (e.Row.RowType == DataControlRowType.DataRow)
            {                
                e.Row.Attributes.Add("onmouseover", "this.style.backgroundColor='orange'");
                e.Row.Attributes.Add("onmouseout", "this.style.backgroundColor='#E56E94'");
                e.Row.BackColor = Color.FromName("#E56E94");                
           }           
        }
        else
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                e.Row.Attributes.Add("onmouseover", "this.style.backgroundColor='orange'");
                e.Row.Attributes.Add("onmouseout", "this.style.backgroundColor='gray'");
                e.Row.BackColor = Color.FromName("gray");                
            }
            //e.Row.Cells[0].BackColor = Color.FromName("gray");
            //e.Row.Cells[1].BackColor = Color.FromName("gray");
            //e.Row.Cells[2].BackColor = Color.FromName("gray");
            //e.Row.Cells[3].BackColor = Color.FromName("gray");
            //e.Row.Cells[4].BackColor = Color.FromName("gray");
            //e.Row.BorderWidth = 2;
            //e.Row.BorderColor = Color.FromName("#43C6DB");
        }
    }
1 голос
/ 13 марта 2009

Создайте эту функцию на странице вашего кода (или в разделе на странице .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) %>

(обратите внимание на заглавную "Контейнер").

1 голос
/ 13 марта 2009

Чтобы получить цвета внутри тега <%%> в самом поле шаблона, вы можете использовать этот код ...

<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();
    }
}
0 голосов
/ 13 марта 2009

Как 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)

Если вы можете, пожалуйста, более подробно о том, как цвет устанавливается в каждой строке.

0 голосов
/ 13 марта 2009

Это может быть странный обходной путь, но вы всегда можете проверить, является ли строка, которую вы проверяете, нечетной или четной строкой. Если это четное число, скорее всего, оно использует цвет, установленный в шаблоне AlternatingRow. Если он четный, он должен использовать обычный шаблон Row.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...