Как правильно записать данные из dataGridView в файл
у меня проблема. Есть 2 формы, на первой заполняются данные о студенте, на второй находится datagridView с 10 столбцами, которые были созданы заранее. При заполнении всех данных они переносятся в класс с полями, которые принимают эти данные, после чего во второй форме идет обращение к ним, чтобы заполнить таблицу. Все работает исправно за исключением сохранения данных dataGridView в файл, поскольку после этой процедуры файл создается, но с пустым содержанием. Код сохранения прилагаю ниже.
private void button1_Click(object sender, EventArgs e)
{
SaveFileDialog saveFileDialog1 = new SaveFileDialog();
Stream MyStream;
saveFileDialog1.Filter = "Text (*.txt)|*.txt|All Files(*.*)|*.*";
saveFileDialog1.FilterIndex = 2;
saveFileDialog1.RestoreDirectory = true;
if (saveFileDialog.ShowDialog() == DialogResult.OK)
{
if ((MyStream = saveFileDialog.OpenFile()) != null)
{
StreamWriter sw = new StreamWriter(MyStream);
try
{
for (int i = 0; i < dataGridView1.RowCount - 1; i++)
{
for (int j = 0; j < dataGridView1.ColumnCount - 1; j++)
{
sw.Write(dataGridView1.Rows[i].Cells[j].Value.ToString() + " ");
}
sw.WriteLine();
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка!", MessageBoxButtons.OK, MessageBoxIcon.Stop);
}
finally
{
sw.Close();
}
MyStream.Close();
}
}
}
Ответы (1 шт):
Как я понял, у вас уже есть saveFileDialog1, и вы его создали в дизайнере формы. Пусть он будет.
Можно конечно и свой создавать, но таким образом вы будете создавать каждый раз новый диалог, а в варинте с дизайнером - переиспользовать уже созданный. Это быстрее и экономнее по ресурсам.
Вот это вынесите в дизайнер формы
saveFileDialog1.Filter = "Text (*.txt)|*.txt|All Files(*.*)|*.*";
saveFileDialog1.FilterIndex = 2;
saveFileDialog1.RestoreDirectory = true;
И попробуйте так
private void button1_Click(object sender, EventArgs e)
{
if (saveFileDialog1.ShowDialog() == DialogResult.OK)
{
using (StreamWriter sw = new StreamWriter(saveFileDialog1.FileName))
{
try
{
for (int i = 0; i < dataGridView1.RowCount; i++)
{
for (int j = 0; j < dataGridView1.ColumnCount; j++)
{
sw.Write(dataGridView1.Rows[i].Cells[j].Value.ToString());
if (j < dataGridView1.ColumnCount - 1) sw.Write(" "); // не пишем пробел после последней колонки
}
sw.WriteLine();
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка!", MessageBoxButtons.OK, MessageBoxIcon.Stop);
}
}
}
}
Если StreamWriter умеет открывать файл на запись по имени, вам незачем открывать дополнительный Stream.


