【发布时间】:2019-06-06 11:33:09
【问题描述】:
我想删除 StringBuilder 对象的最后(空)行
编辑:空行来自“AllowUserToAddRows”我怎么能跳过它?
- c# 表单应用程序
- form2 上的 dataGridView1
- 我想导出为 CSV(用分号分隔)[顺便说一句。这只是一列]
- 有可能会再次将之前创建的 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 对象作为 String 是: {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 列,为什么还要为单元格使用
string.Join? -
@dymanoid 看起来像是 this answer 的复制和粘贴
-
请注意
Substring不会修改字符串 - 试试s = s.Substring(0, s.Length - 5); -
@dymanoid 是的,这很重要;如问题中所述,将来@A Friend 可能会更多列,是的,它源自该答案
-
一开始不添加空行不是更容易吗?
标签: c# datagridview export-to-csv stringbuilder