Преобразование содержимого табличного объекта DataGridView в CSV в C#
Доброго времени суток! Сегодня в статье мы рассмотрим с Вами как экспортировать данные
из таблицы DataGridView в формат CSV.
Элемент DataGridView в C# — это элемент пользовательского интерфейса, который предоставляет настраиваемую таблицу для отображения данных.
Код примера:
// это extension-метод, т.е. метод расширение, который мы можем вызывать на объекте класса DataGridView через точку
public static void WriteToCSVFile(this DataGridView gridView, char seperator, string filename, Encoding encoding)
{
using (var writer = new StreamWriter(filename, false, encoding))
{
for (int i = 0; i < gridView.Columns.Count; i++)
{
// пропускаем колонки таблицы, которые скрыты
if (!gridView.Columns[i].Visible) continue;
// записываем заголовок таблицы в файл
writer.Write(gridView.Columns[i].HeaderText);
// пока не достигли последней колонки в строке
if (i < gridView.Columns.Count - 1)
{
// вставляем разделитель
writer.Write(seperator);
}
}
// добавляем перевод строки
writer.Write(Environment.NewLine);
// проходимся по каждой строчке
foreach (DataGridViewRow dr in gridView.Rows)
{
for (int i = 0; i < gridView.Columns.Count; i++)
{
// пропускаем колонки таблицы, которые скрыты
if (!gridView.Columns[i].Visible) continue;
// записываем значение ячейки строки в файл
writer.Write(dr.Cells[i].Value);
// пока не достигли последней колонки в строке
if (i < gridView.Columns.Count - 1)
{
// вставляем разделитель
writer.Write(seperator);
}
}
// добавляем перевод строки
writer.Write(Environment.NewLine);
}
writer.Flush();
}
}
Используем так:
// запускаем задачу в отдельном потоке, так как операция экспорта может занять
// длительное время
Task.Run(() =>
{
// вызываем метод-расширение через точку на объекте QueryResultDataGridView
// кодировка файла будет Win-1251
QueryResultDataGridView.WriteToCSVFile(';', "export.csv", Encoding.GetEncoding(1251));
DialogResult dialogResult = MessageBox.Show(
"Экспорт завершен! Вы хотите открыть файл в редакторе?",
Text, MessageBoxButtons.YesNo, MessageBoxIcon.Information
);
// если ок, открываем в редакторе данного типа файлов в Вашей ОС по умолчанию
if (dialogResult == DialogResult.Yes)
{
Process.Start("export.csv");
}
});
Таким образом, с помощью метода расширения WriteToCSVFile из DataGridView можно экспортировать в CSV относительно большие файлы, насчитывающие от нескольких сотен до несколько сотен тысяч строк.