Если значение dataGridView не равно нулю, то XX не работает должным образом - PullRequest
0 голосов
/ 22 февраля 2019

Внутри нажатия кнопки у меня есть этот код, который вставляет текст из выпадающего списка в столбец C:

private void updateExcel_Click(object sender, EventArgs e)
{      
    for (int i = 0; i < dataGridView1.Rows.Count; i++)
    {
        for (int j = 0; j < dataGridView1.Columns.Count; j++)
        {
             if  (dataGridView1.Rows[i].Cells[j].Value != null)
             {
                for (int ii = 0; ii < dataGridView1.RowCount - 1; ii++)
                {
                    dataGridView1[2, ii].Value = ConsigneeCombo.Text;
                }
                break;
             }
        }
    }
}

При запуске он должен помещать значение только в строки со значением в столбце Aстрока, но она повторяет значение, вставленное во все строки.

1 Ответ

0 голосов
/ 23 февраля 2019

Размещенный цикл и логика не выглядят корректно в отношении того, что вы должны делать….

”, это должно только поместить значение в строки со значением в столбцеА строки ”….

В настоящее время код использует один цикл for для циклического перебора всех« строк »в сетке ...

for (int i = 0; i < dataGridView1.Rows.Count; i++)

Затем еще один for цикл для прохождения всех «столбцов» в сетке…

 for (int j = 0; j < dataGridView1.Columns.Count; j++)

Это будет проходить через ВСЕ ячейки в сетке… ЕСЛИ одна из ячеек в сеткеНЕ является нулевым…

 if  (dataGridView1.Rows[i].Cells[j].Value != null)

Затем (ОПЯТЬ?) переберите ВСЕ «строки» и установите значение третьего столбца в этой строке равным значению, содержащемуся в поле со списком….?

Это не похоже на то, что вы хотите.Оператор «break» просто пропускает столбцы «после» того, как «первое» значение найдено.Эта логика не приведет к достижению того, о чем вы просите.

Поэтому, чтобы упростить

, «следует помещать значение только в строки со значением в столбце A строки»

Это означает, что нам нужно только пройти по всем строкам.Нет необходимости циклически проходить по столбцам, и нам нужно сделать этот цикл только один раз.Логика ...

Перебрать все строки в каждой строке, если в столбце A (0) есть «значение», а затем добавить текст поля со списком в столбец C (2).Эта логика может выглядеть примерно так:

private void updateExcel_Click(object sender, EventArgs e) {
  for (int i = 0; i < dataGridView1.RowCount; i++) {
    if (!dataGridView1.Rows[i].IsNewRow &&
        dataGridView1.Rows[i].Cells[0].Value != null &&
        dataGridView1.Rows[i].Cells[0].Value.ToString() != "") {
      dataGridView1[2, i].Value = ConsigneeCombo.Text;
    }
  }
}

Это добавит текст поля со списком только в третий столбец, если значение в первом столбце НЕ пустое.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...