Нет последнего введенного значения, взятого из dataGridView

FileStream fs = new FileStream(@"file.txt", FileMode.Create);
StreamWriter streamwriter = new StreamWriter(fs);

try
{
    for (int j = 0; j < dataGridView1.Rows.Count -1 ; j++)
    {
        for (i = 0; i < dataGridView1.Rows[j].Cells.Count; i++)
        {
            streamwriter.Write(dataGridView1.Rows[j].Cells[i].Value + "#");
        }

        streamwriter.WriteLine("\n");
    }

    streamwriter.Close();
    fs.Close();
    MessageBox.Show("File saved successfully!");
}
catch
{
    MessageBox.Show("File save failed!");
}

Эта функция должна передавать значения из DataGridViewв файл, но последнее значение не записывается постоянно. Я понял, что он удаляет последний введенный мной элемент

Должно получиться так:

Name1#Lastname1#Number1#Home1#

Это реальный результат:

Name2#Lastname2#Number2##

2 ответа

Решение

Опубликованный код будет работать "ЕСЛИ" DataGridView’s свойство AllowUsersToAddRows установлен на true. Если установлено значение false, то опубликованный код пропустит последнюю строку в сетке.

Кроме того, в зависимости от сеток DataSource, сам источник данных может не разрешать новые строки или быть структурированным для добавления новых строк. В этом случае AllowUsersToAddRows свойство становится неактуальным, однако в любом случае… опубликованный код все равно пропустит последнюю строку.

Поскольку код технически правильный, "ЕСЛИ" сетка AllowUsersToAddRows свойство установлено на true. И, похоже, ваш вопрос касается "отсутствующей" последней строки... Я предполагаю, что либо сетки AllowUsersToAddRows свойство установлено на false или источник данных не позволяет добавлять новые строки.

Чтобы избежать этой проблемы… я предлагаю дополнительно проверить эту "новую" строку в цикле строк. Если вы проверите "новую" строку в цикле строк, тогда не будет иметь значения, если сетки AllowUsersToAddRows собственность true или же false. Также используя foreach перебор строк и ячеек может упростить задачу и может выглядеть примерно так…

foreach (DataGridViewRow row in dataGridView1.Rows) {
  if (!row.IsNewRow) {
    foreach (DataGridViewCell cell in row.Cells) {
      streamwriter.Write(cell.Value + "#");
    }
    streamwriter.WriteLine("");
  }
}

Проблема в том, что ваш цикл повторяется по строкам, сейчас ваше состояние

j < dataGridView1.Rows.Count -1

Это означает, что если количество строк равно 10, ваш цикл будет проходить по индексам от 0 до 8 и пропускать индекс 9.

Вам следует изменить свое состояние на

j < dataGridView1.Rows.Count

Другие вопросы по тегам