2011-01-19 5 views
0

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

У меня есть столбец с именем clnumber, что имеет, номер 1,2,3

Я хочу, чтобы каждая строка имеет различный цвет в зависимости от того, какого числа в этом столбце DataRow

ЭТО код, я использовал

$(document).ready(function() { 

    $("#<%=GridView1.UniqueID%> tr").each(function() { 

     var number = $(this).children('td:eq(6)').text(); 

     if (number == 'OK') { 
      $(this).children('td').css({ "background-color": "lightgreen" }); 

     } 
    }) 
}); 
+0

один вопиющий вопрос с этим фрагментом JQuery является то, что «Gridview1» на самом деле не относятся ни к чему. Теперь «# Gridview1» или «.Gridview1» может работать. См. Мое новое сообщение ниже с помощью решения jQuery для решения этой проблемы. – Didaxis

ответ

2

Предоставленный вы дали свой GridView CSS-класс под названием «myGridView» вы можете сделать следующее:

$(document).ready(function() { 

    $('.myGridView tr').each(function() { 

     var number = $(this).children('td:eq(1)').text(); 

     if (number == '1') { 
      $(this).children('td').css('background', 'red'); 
     } 
    }) 
}); 

где 'td: eq (1)' относится ко второй ячейке в строке. Это, конечно, будет зависеть от того, какая ячейка в вашей строке содержит это магическое число.

Я уверен, что это не самое элегантное использование JQuery, но вы могли бы реорганизовать его, как вы хотите

+0

для somereason это не работает, если это будет .gridview1, если мое имя gridview - gridview1, и имеет ли значение значение, если у меня уже есть таблица стилей. – MyHeadHurts

+0

Если у вас уже есть таблица стилей, это может иметь значение, хотя маловероятно, так как то, что я разместил здесь, будет отображать встроенный css (через атрибут style тега ячейки), который должен иметь приоритет над вашей таблицей стилей. Также обратите внимание, что я предположил, что gridview в моем примере имеет класс css с именем myGridView. Если вы пытаетесь использовать ID сетки, я подозреваю, что это не сработает, поскольку ASP.NET будет отображать другой идентификатор в выходном файле HTML. Предоставление вида сетки имя класса CSS преодолеет эту проблему. – Didaxis

+0

он отлично работал благодаря единственной проблеме, когда я возвращаю или обновляю панель, в которой находится сетка, возвращается в нормальное состояние: / – MyHeadHurts

1

Основываясь на количестве как?
Первый ряд белый, второй серый?

if(rownumber%2 == 0) //white 
else //grey 

или наоборот на самом деле.

+0

, который будет делать это автоматически для каждой строки в сетке? – MyHeadHurts

+0

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

+0

Да. любое число, равномерно разделенное на два, будет белым, остальные будут серыми. –

1

Если число, которое диктует, какой цвет следует использовать, фактически генерируется в результате вывода HTML, почему бы не использовать javascript?

+0

thats то, что многие люди говорили в Интернете, но я не знаком с javascript, некоторые сказали, что даже jquery была возможностью – MyHeadHurts

+0

Да, jQuery - это то, что я буду использовать. Ссылка jQuery в HEAD страницы с использованием тега SCRIPT, а затем просто перебирайте каждую строку, изучите каждую строку и конкретную ячейку, которая содержит это число в этой строке, и напишите небольшую функцию, которая установит цвет фона для строки с помощью CSS. Извините, но это гораздо более простой подход, чем возиться с обработчиками событий для сетки данных, чтобы снять что-то, что является чисто макетом/проблемой CSS. – Didaxis

+0

Я попытался использовать код jquery, который я выложу выше, и это не сработало – MyHeadHurts

1

Вы можете использовать подобным образом:

/// <summary> 
    /// Updates the row fore colour to show the line type 
    /// </summary> 
    /// <param name="sender">object</param> 
    /// <param name="e">args</param> 
    protected void gvLineValues_RowDataBound(object sender, GridViewRowEventArgs e) 
    { 
     try 
     { 
      //Format the row 
      this.FormatRow(e); 
     } 
     catch (Exception ex) 
     { 
      ErrorLogging.LogError(ex); 
     } 
    } 

    /// <summary> 
     /// Formats a gridview row 
     /// </summary> 
     /// <param name="e">Gridview event args</param> 
     private void FormatRow(GridViewRowEventArgs e) 
     { 
      try 
      { 
       //Change the forecolor of the row 
       if (e.Row.RowType == DataControlRowType.DataRow) 
       { 
        OrderLine oOrderLine = e.Row.DataItem as OrderLine; 

        if (oOrderLine != null) 
        { 
         e.Row.ForeColor = oOrderLine.ForeColour; 


           //Check the line is over budget 
           if (oOrderLine.OverBudget) 
           { 
            e.Row.BackColor = ColourManager.OverBudgetItemBackColour; 
            e.Row.ToolTip = String.Format("Item over {0} and awaiting your approval", GlobalizationManager.Budget); 
           } 
           else 
           { 
            e.Row.BackColor = ColourManager.WithinBudgetItemBackColour; 
            e.Row.ToolTip = "Item awaiting your approval"; 
           } 
          } 
         } 

         //Change the back colour of the row if its a deleted row 
         if (oOrderLine.Deleted) 
         { 
          e.Row.Font.Strikeout = true; 
          e.Row.ToolTip = "This line has been deleted"; 
         } 
        } 
       } 
      } 
      catch (Exception) 
      { 
       throw; 
      } 
     } 

вы могли бы сделать что-то вроде

switch (DataItem.ColorNumber) 
{ 
case 1: 

e.row.backcolor = Color.blue; 

break; 

case 2: 

e.row.backcolor = Color.red; 

break; 

case 3: 

e.row.backcolor = Color.white; 

break; 

} 
+0

Спасибо за вашу помощь, вероятно, это метод, который я использовал, если только я не могу это сделать с помощью javascript – MyHeadHurts

Смежные вопросы