2013-04-04 2 views
2

У меня есть простой для каждого цикла контроль текста в 10-й ячейке моего gridview, а затем установка цвета этой ячейки на зеленый или красный, зависящий от текста.Невозможно установить цвет ячейки в gridview

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

Heres мой код:

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) 
    { 
     GridView vg = GridView1; 

     foreach (GridViewRow row in vg.Rows) 
     { 
      if (e.Row.RowType == DataControlRowType.DataRow) 
      { 
       if (e.Row.Cells[10].Text == "Order has been dispatched.") 
       { 
        e.Row.Cells[10].BackColor = Color.LawnGreen; 
       } 

       if (e.Row.Cells[10].Text == "Order is being processed.") 
       { 
        e.Row.Cells[10].BackColor = Color.Red; 
       } 

      } 
     } 

    } 
+1

Возможно, RowType не то, что вы ожидаете, или в текстовом значении есть пробел. Вы проходили этот код во время отладки? –

+0

Отлаживайте свой код шаг за шагом и смотрите, что там происходит. – KF2

+0

Да, я согласен с приведенными выше комментариями, может быть, ваш тип строки для первой строки настроен по-другому и является совершенно другим типом, чем «DataRow». Например, как «EmptyDataRow». Я думаю, это зависит от того, как вы это связываете. – Jordan

ответ

2

Я не знаю, если это поможет. Возможно нет. Но у вас избыточный код. Измените свой код на следующие и убедитесь, что обработчик события вызывается для каждой строки. Я не думаю, что вы должны убедиться, что GridViewRow.RowType - это DataRow, так как вы получите это событие только в DataRow.

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    if (e.Row.Cells[10].Text == "Order has been dispatched.") 
     e.Row.Cells[10].BackColor = Color.LawnGreen; 
    if (e.Row.Cells[10].Text == "Order is being processed.") 
     e.Row.Cells[10].BackColor = Color.Red; 
} 
Смежные вопросы