@RommB

Как выделить цветом те элементы первой матрицы, которые больше за соответствующие элементы второй матрицы c#?

Добрый вечер, работаю с windows forms(начинающий в этом деле ) и у меня возникла такая проблема, человек открывает свои две матрицы и при нажатии на кнопку task должны выделиться элементы первой матрицы которые больше за соответствующие элементы второй матрицы. Как это сделать ?

Вот мой код:
private void task1_Click(object sender, EventArgs e)
        {
            int n1, n2;
            for (int j = 0; j < dataGridView1.ColumnCount; j++)
            {
                var needToSelect = true;
                for (int i = 0; i < dataGridView1.ColumnCount; i++)
                {
                    if (int.TryParse(dataGridView1[j, i].Value.ToString(), out n1) && int.TryParse(dataGridView2[j, i].Value.ToString(), out n2))
                    {
                        if (n1 > n2)
                            needToSelect = false;
                            break;
                    }                 
                }
                if (needToSelect)
                {
                    dataGridView1.Columns[j].DefaultCellStyle.BackColor = Color.Chartreuse;
                }
                else
                {
                    dataGridView1.Columns[j].DefaultCellStyle.BackColor = Color.White;
                }
                task2.Enabled = true;
            }
        }
  • Вопрос задан
  • 178 просмотров
Пригласить эксперта
Ответы на вопрос 1
FoggyFinder
@FoggyFinder
Нужно применять стиль не ко всему столбцу, а к каждой ячейке по отдельности.

Просто замените

dataGridView1.Columns[j].DefaultCellStyle.BackColor = Color.Chartreuse;


на

dataGridView1[j, i].Style.BackColor = Color.Chartreuse;


для ветки else - аналогично.

По остальному:

* Посмотрите границы циклов, оба раза используете количество столбцов - границы для второго должны определятся количеством строк

Обновлено (исправлена опечатка)

Должно получится примерно так

private void task1_Click(object sender, EventArgs e)
{
    int n1, n2;
    for (int j = 0; j < dataGridView1.ColumnCount; j++)
    {
        for (int i = 0; i < dataGridView1.RowCount; i++)
        {
            if (int.TryParse(dataGridView1[j, i].Value.ToString(), out n1) 
                && int.TryParse(dataGridView2[j, i].Value.ToString(), out n2))
            {
                if (n1 > n2)
                {
                    dataGridView1[j, i].Style.BackColor = Color.Chartreuse;
                }
                else
                {
                    dataGridView1[j, i].Style.BackColor = Color.White;
                }
            }
        }
    }

    task2.Enabled = true;
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы