Member 14192879 Ответов: 1

Цвет на gridview в зависимости от состояния


Я хочу изменить передний цвет строки, в которой строка содержит конкретное слово "MG". Я использовал приведенный ниже код, но он не работает в веб-приложении.

Что я уже пробовал:

    protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
    {
       if (e.Row.RowType == DataControlRowType.DataRow)
       {
           if (e.Row.Cells[0].Text.ToString().Contains("MG"))
           {
                   e.Row.ForeColor = System.Drawing.Color.Blue;
                   e.Row.Style["text-align"] = "Left";
           }
           else
           {
                   e.Row.ForeColor = System.Drawing.Color.Black;
                   e.Row.Style["text-align"] = "Left";
           }
      }
}

ZurdoDev

Отладьте его и посмотрите, попадает ли он даже в ваш код так, как вы хотите.

Member 14192879

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

ZurdoDev

Это означает, что e.row.cells[0] - это не то, что вы думаете. Поэтому поставьте там точку останова, а затем вы можете изучить, что это такое, и исправить ее.

Gerry Schmitz

Какого он цвета? Что происходит, когда вы меняете "черный" на "не черный"?

Kornfeld Eliyahu Peter

Проверьте, действительно ли вы получаете правильный код HTLM на стороне клиента... (вероятно, нет)
Я бы также посоветовал использовать имена классов вместо встроенного стиля...

1 Ответов

Рейтинг:
8

Vincent Maverick Durano

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


Это ожидаемое поведение с тех пор e.Row.Cells[0] ссылаться BoundField столбцы. При использовании TemplateFields, вам нужно использовать FindControl [^] метод. Например:

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
       if (e.Row.RowType == DataControlRowType.DataRow)
       {
           //if you have a Label control within TemplateField Column
           string labelValue = ((Label)e.Row.FindControl("YourLabelControlID")).Text;
           if (labelValue.Contains("MG"))
           {
                   e.Row.ForeColor = System.Drawing.Color.Blue;
                   e.Row.Style["text-align"] = "Left";
           }
           else
           {
                   e.Row.ForeColor = System.Drawing.Color.Black;
                   e.Row.Style["text-align"] = "Left";
           }
      }
}


Member 14192879

большое спасибо. теперь это работает хорошо