导出为CSV时,从StringBuilder对象中删除最后一个(空)条目

时间:2019-01-11 14:17:47

标签: c# datagridview export-to-csv stringbuilder

我要删除StringBuilder对象的最后一行(空)

编辑:空行来自“ AllowUserToAddRows”,我如何跳过它?

  • c#表单应用程序
  • form2上的dataGridView1
  • 我要导出为CSV(用分号分隔)[btw。只有一栏]
  • 可能会发生,先前创建的CSV再次被解析到dataGridView

我在这里使用了更改的解决方案: Exporting datagridview to csv file

我的代码

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;}

我要删除最后一行空白。

我试图将stringbuilder解析为一个字符串,然后删除最后一个分号 但没有成功(我对“行尾”有疑问。)

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

我试图删除数组的最后一个元素,但StingBuilder不是数组

我被困住了。

1 个答案:

答案 0 :(得分:0)

我发现空集总是导出到csv。 这是因为用户可以将数据输入到dataGridView,并且始终有一个空的活动行。

如果我禁用dataGridView1.AllowUserToAddRows,则userinput的空行不在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());
        }
    }

感谢帮助!