我要删除StringBuilder对象的最后一行(空)
编辑:空行来自“ AllowUserToAddRows”,我如何跳过它?
我在这里使用了更改的解决方案: 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不是数组
我被困住了。
答案 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());
}
}
感谢帮助!