Если значение ячейки DataGridView больше, чем в другой ячейке

#c#

#c#

Вопрос:

Привет, я хочу сравнить две ячейки, обе со значением числа. Если ячейка1 больше ячейки2, цвет ячейки должен быть зеленым.

Вот мой код: при форматировании ячеек в datagridview

 foreach (DataGridViewRow row in this.dataGridView1.Rows)
        {
            if (row.Cells[3].Value.ToString() >  (row.Cells[4].Value.ToString()))
            {
                row.Cells[3].BackColor = Color.PaleGreen;
            }
  

Но я получаю две ошибки: в первой строке оператор ‘>’ не может быть применен к операндам типа ‘string’ и ‘string’ и во второй строке System.Windows.Формы.DataGridViewCell’ не содержит определения для ‘BackColor’ и никакого метода расширения ‘BackColor’, принимающего первый аргумент типа ‘System.Windows.Формы.DataGridViewCell’ может быть найден

Ответ №1:

Обе эти ошибки допустимы. Вы преобразуете значения ячеек в строки, но если вы хотите сравнивать как числа, вам нужно сделать их числами. Кроме того, BackColor находится в свойстве style ячейки. Итак, ваш код должен выглядеть примерно так:

 foreach (DataGridViewRow row in this.dataGridView1.Rows)
{
    double value1;
    double value2;
    if(!double.TryParse(row.Cells[3].Value.ToString(), out value1) || !double.TryParse(row.Cells[4].Value.ToString(), out value2))
    {
        // throw exception or other handling here for unexcepted values in cells
    }
    else if (value1 >  value2)
    {
        row.Cells[3].Style.BackColor = Color.PaleGreen;
    }
  

Комментарии:

1. ошибка В качестве оператора могут использоваться только выражения присваивания, вызова, увеличения, уменьшения и нового объекта

2. Я получаю эту ошибку в этой строке: else (value1> value2);

3. У вас не должно быть точки с запятой (;) в конце этой строки. Если вы удалите; в конце и сделаете его else if , это сработает. Обновленный пример кода для добавления else if

4. Эта строка должна быть: else if (value1 > value2)

5. Спасибо, чувак! Работа!

Ответ №2:

Вам нужно преобразовать строку в int, double, long, decimal или любое другое число.

В настоящее время вы пытаетесь сравнить 2 строки вместе, как если бы они были числами.

Использование .Значение без .toString() должен работать, если j правильно запомнил