Условное форматирование по значению ячейки
Я исследовал Условное форматирование для 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/
Я бы использовал 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;