ASP.NET gridview динамическое изменение фона ячейки - PullRequest
0 голосов
/ 18 сентября 2010

У меня есть griview, который привязан к sqldatasource и динамически изменяется. Как изменить цвет фона ячейки в зависимости от значения? например, 0-0,5 зеленый, 0,5-1 красный, что-то вроде этого.

   <asp:GridView ID="grid1" runat="server" AutoGenerateColumns="False" 
        DataSourceID="SqlDataSource3">

Ответы [ 2 ]

3 голосов
/ 18 сентября 2010

Вы, вероятно, хотите использовать событие RowDataBound GridView, что-то вроде этого:

<asp:GridView ID="grid1" runat="server" AutoGenerateColumns="False" 
     DataSourceID="SqlDataSource3" OnRowDataBound="ChangeRowColor">

protected void ChangeRowColor(object sender, GridViewRowEventArgs e)
{
   if( ((DataRow)e.Row.DataItem)[1] == .5)
   {
     e.Row.Cell[1].BackColor = Colors.Green;
   }
}

В моем примере я предполагаю, что данные, используемые для заполнения сетки, являются DataRows (то есть из таблицы данных), но по сути идея состоит в том, чтобы привести DataItem текущей строки к объекту любого типа, к которому привязан тип, проверить значение нужного вам свойства и затем установить BackColor соответствующей ячейки.

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

1 голос
/ 18 сентября 2010

Одним из решений является создание серверного метода, который вы можете вызывать во время привязки данных, который будет возвращать имя класса CSS.

Свяжите атрибут класса css с вызовом этого метода и передайте соответствующий элемент данных.

Это пример концепции, вам придется адаптировать ее для ваших нужд.

... Css file

.NegativeMoneyText
{
    color: #FF0000;
}

... Aspx file

<asp:Label ID="lblPaid" runat="server" CssClass='<%# getMoneyCssClass(Eval("PAID_AMOUNT").ToString()) %>' Text='<%# formatMoney(Eval("PAID_AMOUNT").ToString()) %>'></asp:Label>

... Код позади

public string getMoneyCssClass(string amount)
{
    if (!string.IsNullOrEmpty(amount))
    {
        double val = double.Parse(amount);
        if (val < 0)
            return "NegativeMoneyTextCss";
    }
    return return "PositiveMoneyTextCss";
}
...