Условное форматирование по значению ячейки - PullRequest
9 голосов
/ 18 апреля 2011

Я исследовал условное форматирование для GridView повсюду, но я новичок в ASP.Net и испытываю трудности.Этот код, который я нашел, имеет для меня наибольшее значение:

protected void GridviewRowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        int CellValue = Convert.ToInt32(e.Row.Cells[2].Text);
        if (CellValue >= 0)
        {
            e.Row.Cells[2].BackColor = System.Drawing.Color.Green;
        }
        if (CellValue < 0)
        {
            e.Row.Cells[2].BackColor = System.Drawing.Color.Red;
        }
    }
}

GridView невероятно прост: строка заголовка и три столбца с одной строкой под заголовком с суммой валюты в каждомколонка.Мне просто нужна ячейка данных во второй строке, третий столбец должен быть зеленым, если> = 0, и красным, если <0. </p>

Я получаю неправильный формат в строке int CellValue =.

Ответы [ 3 ]

3 голосов
/ 19 апреля 2011

Попробуйте заменить строку int CellValue = на одну

int CellValue = Convert.ToInt32(DataBinder.Eval(e.Row.DataItem, "Difference"));

Ref: http://www.johnchapman.name/asp-net-c-change-gridview-cell-background-color-based-on-value/

http://msdn.microsoft.com/en-us/library/4hx47hfe.aspx

1 голос
/ 18 апреля 2011

Я бы использовал int.TryParse вместо Convert.ToInt32 и убедился, что ваш текст на самом деле числовой. Если это выглядит правильно, вероятным кандидатом является то, что текст содержит пробелы.

Поскольку ваши отрицательные числа отформатированы примерно так ($ 1000,00). Проверьте строку на наличие скобок, и вы можете отформатировать цвет на основе этого

if (e.Row.Cells[2].Text.Contains(")")) {
  e.Row.Cells[2].BackColor = System.Drawing.Color.Red;
} else {
  e.Row.Cells[2].BackColor = System.Drawing.Color.Green;
}

или еще лучше

e.Row.Cells[2].BackColor = e.Row.Cells[2].Text.Contains(")") ? System.Drawing.Color.Red : System.Drawing.Color.Green;
0 голосов
/ 18 апреля 2011

В ваших значениях указаны недопустимые символы. Раздень их, и ты готов идти

int CellValue = Convert.ToInt32(e.Row.Cells[2].Text.Replace("$","").Replace(",","").Replace(".",""));

Возможно, есть лучший способ, но попробуйте сейчас

Редактировать: либо обновить мои изменения выше, либо использовать double.Parse ()

Edit:

int CellValue = (e.Row.Cells[2].Text.IndexOf('(') > -1) ? 0 : -1;

Лучше, если вы использовали bool

bool CellValue = e.Row.Cells[2].Text.IndexOf('(') > -1;
...