Удалить последнюю (пустую) запись из объекта StringBuilder при экспорте в CSV - PullRequest
0 голосов
/ 11 января 2019

Я хочу удалить последнюю (пустую) строку объекта StringBuilder

РЕДАКТИРОВАТЬ: пустая строка из "AllowUserToAddRows", как я могу пропустить это?

  • c # Заявление на получение формы
  • dataGridView1 в форме 2
  • Я хочу экспортировать в CSV (через точку с запятой) [кстати. это всего лишь один столбец]
  • Может случиться, что ранее созданный CSV снова будет проанализирован в dataGridView

Я использую измененное решение отсюда: Экспорт таблицы данных в CSV-файл

мой код

void SaveDataGridViewToCSV(string filename)
{
    var sb = new StringBuilder();

    var headers = dataGridView1.Columns.Cast<DataGridViewColumn>();
    sb.AppendLine(string.Join(";", headers.Select(column => "" + column.HeaderText + ";").ToArray()));

    foreach (DataGridViewRow row in dataGridView1.Rows)
    {
        var cells = row.Cells.Cast<DataGridViewCell>();
        sb.AppendLine(string.Join(";", cells.Select(cell => "" + cell.Value + ";").ToArray()));
    }

    try
    {
        File.WriteAllText(filename, sb.ToString());
    }
    catch (Exception exceptionObject)
    {
        MessageBox.Show(exceptionObject.ToString());
    }
}

sb.ToString выглядит следующим образом {Coumn;90;90;626;626;;}

«Настоящий» объект StringBuilder в виде строки: {Coumn;\r\n90;\r\n90;\r\n626;\r\n626;\r\n;}

Я хочу удалить пустую последнюю строку.

Я попытался разобрать string Builder в строку, а затем удалить последнюю точку с запятой но безуспешно (у меня проблема с концом строки.)

string s = sb.ToString();
while (s.EndsWith(";\r\n;") == true)
{
    s.Substring(0, s.Length - 5);
}

Я пытался удалить последний элемент массива, но StingBuilder не массив

Я застрял.

1 Ответ

0 голосов
/ 11 января 2019

Как я выяснил, пустой набор всегда экспортируется в CSV. Именно благодаря возможности пользователь может вводить данные в dataGridView, и всегда есть пустая активная строка.

если я отключаю dataGridView1.AllowUserToAddRows, пустая строка для ввода пользователя не входит в набор данных stringbuilder.

   void SaveDataGridViewToCSV(string filename)
    {
        var sb = new StringBuilder();

        //SOLUTION disable AllowUserInput to avoid empty set saved to CSV
        dataGridView1.AllowUserToAddRows = false;

        var headers = dataGridView1.Columns.Cast<DataGridViewColumn>();
        sb.AppendLine(string.Join(";", headers.Select(column => "" + column.HeaderText + ";").ToArray()));

        foreach (DataGridViewRow row in dataGridView1.Rows)
        {
            var cells = row.Cells.Cast<DataGridViewCell>();
            sb.AppendLine(string.Join(";", cells.Select(cell => "" + cell.Value + ";").ToArray()));
        }

        try
        {
            File.WriteAllText(filename, sb.ToString());
        }
        catch (Exception exceptionObject)
        {
            MessageBox.Show(exceptionObject.ToString());
        }
    }

спасибо за помощь!

...