2009-03-13 6 views
0

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

ОБНОВЛЕНО:

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

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

+0

Непонятно, где (то есть, в каком случае обработчик и какой этап процесса привязки данных сетки) вы хотите получить указанный цвет? – Cerebrus

ответ

1

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

(Обратите внимание на верхний регистр «контейнер»).

0

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

0

Каким образом GridView меняет цвет - каждую другую строку или в кусках X? Или он задан еще более «случайным» способом?

Если это любая другая строка, вы можете просто проверить, является ли строка «нормальной» строкой или «чередующейся» строкой.

Я не могу вспомнить, как это написано в точности, и я только нашел этот пример VB, но это может иметь некоторую помощь:

If e.Row.RowState = DataControlRowState.Normal Then 
//do stuff 
ElseIf e.Row.RowState = DataControlRowState.Alternate Then 
//do other stuff 

где е GridView объект. Однако это не проверяет фактический цвет строки. Я полагаю, вы должны быть в состоянии сделать что-то вроде:

if(System.Drawing.Color.Red == e.Row.BackColor) 

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

+0

+0

Тогда вам не нужно знать цвет, только тип строки (Normal, Alaternating). Если это нормально, вы знаете, что цвет # E9CE90, иначе это # ​​F6EED5. Мой пример VB должен помочь вам на вашем пути. –

+0

Да, но в <%# %> ?? –

1

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

<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(); 
    } 
} 
1
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"); 
     } 
    } 
Смежные вопросы