Используйте событие CellFormatting
вашего DataGridView, чтобы установить BackColor
и настраиваемый текст, который вы хотите отобразить.
Вы будете выполнять форматирование, когда событие запускается для ячейки встолбец, который отображает счет на этой неделе.Попытайтесь преобразовать это значение и значение из оценки за последнюю неделю (в другом столбце в той же строке) в int
s, а затем сравните.Если разница не равна нулю, используйте свойства CellStyle
и Value
события, чтобы настроить внешний вид ячейки.
Примерно так:
private void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e) {
if (e.ColumnIndex == 1) {
string lastScoreString = dataGridView1.Rows[e.RowIndex].Cells[0].Value as string;
int lastScore;
if (int.TryParse(lastScoreString, out lastScore)) {
string thisScoreString = dataGridView1.Rows[e.RowIndex].Cells[1].Value as string;
int thisScore;
if (int.TryParse(thisScoreString, out thisScore)) {
var scoreDifference = thisScore - lastScore;
var formattedScoreText = string.Format("{0} {1}", thisScore, scoreDifference.ToString("+#;-#;0"));
if (scoreDifference > 0) {
e.CellStyle.BackColor = Color.Green;
e.CellStyle.ForeColor = Color.White; // <-- Me expressing my artistic self.
e.Value = formattedScoreText;
} else if (scoreDifference < 0) {
e.CellStyle.BackColor = Color.Red;
e.Value = formattedScoreText;
}
}
} else {
//TODO Can't parse this week score.
}
} else {
//TODO Can't parse last week score.
}
}
[Код предполагает, что отображается оценка за последнюю неделюв первом столбце (позиция индекса 0), а оценка на этой неделе во втором столбце]