Нет последнего введенного значения, взятого из 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