- Удалить последний разделитель (запятую)
У вас уже есть количество столбцов ColumnCount,
, поэтому при циклическом просмотре столбцов необходима простая проверка, чтобы определить, является ли currentColumn
«меньше» ColumnCount
-1.Если currentColumn
меньше ColumnCount
-1, то вам нужно добавить «запятую» ,
.Если currentColumn
НЕ «меньше» ColumnCount
, то это может означать только одно: это последний столбец, и вместо добавления запятой вы хотите добавить новую строку.
if (currentCol < ColumnCount - 1) {
textBoxExport.Text += ",";
}
else {
textBoxExport.Text += Environment.NewLine;
}
Заголовки столбцов в CSV-файле
Это необходимо отделить от циклического перемещения по строкам.Перед циклическим просмотром строк просмотрите столбцы сетки и получите свойство каждого столбца Name
.Это будет первая строка в файле CSV.Вы можете использовать ту же стратегию, что и выше, чтобы избежать последней запятой.
for (int currentCol = 0; currentCol < ColumnCount; currentCol++) {
textBoxExport.Text += dgvCsv1.Columns[currentCol].Name;
if (currentCol < ColumnCount - 1) {
textBoxExport.Text += ",";
}
else {
textBoxExport.Text += Environment.NewLine;
}
}
Наконец, неясно, почему вы используете TextBox
для хранения строки CSV.Я рекомендую использовать StringBuilder.
Ниже приведен пример того, что описано выше.
private void btnSave_Click(object sender, EventArgs e) {
StringBuilder sb = new StringBuilder();
int RowCount = dgvCsv1.RowCount;
int ColumnCount = dgvCsv1.ColumnCount;
// get column headers
for (int currentCol = 0; currentCol < ColumnCount; currentCol++) {
sb.Append(dgvCsv1.Columns[currentCol].Name);
if (currentCol < ColumnCount - 1) {
sb.Append(",");
}
else {
sb.AppendLine();
}
}
// get the rows data
for (int currentRow = 0; currentRow < RowCount; currentRow++) {
if (!dgvCsv1.Rows[currentRow].IsNewRow) {
for (int currentCol = 0; currentCol < ColumnCount; currentCol++) {
if (dgvCsv1.Rows[currentRow].Cells[currentCol].Value != null) {
sb.Append(dgvCsv1.Rows[currentRow].Cells[currentCol].Value.ToString());
}
if (currentCol < ColumnCount - 1) {
sb.Append(",");
}
else {
sb.AppendLine();
}
}
}
}
textBoxExport.Text = sb.ToString();
System.IO.File.WriteAllText(@"D:\Test\DGV_CSV_EXPORT.csv", sb.ToString());
}