Условное форматирование по значению ячейки

Я исследовал Условное форматирование для GridViews повсюду, но я новичок в 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 и красным, если

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

3 ответов


попробуйте заменить 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


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

поскольку ваши отрицательные числа отформатированы так ($1,000.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;

у вас есть недопустимые символы в ваших значениях. Снимите их, и вы хорошо идти

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

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

Edit: либо обновите мои изменения выше, либо используйте double.Parse ()

Edit:

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

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

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