【发布时间】:2019-04-18 17:27:03
【问题描述】:
从我附在下面的图片中可以看出,我在将其转换为有效的 csv 文件时遇到了一些问题。我快到了,但无法弄清楚我需要的最后一点。我需要将列标题带入文本框,并且还需要删除每行末尾的“,”。顺便说一句,我正在转换顶级 DGV。
这是我的代码 -
private void btnSave_Click(object sender, EventArgs e)
{
int countRow = dgvCsv1.RowCount;
int cellCount = dgvCsv1.Rows[0].Cells.Count;
for (int rowIndex = 0; rowIndex <= countRow -1; rowIndex++)
{
for (int cellIndex = 0; cellIndex <= cellCount - 1; cellIndex++)
{
textBoxExport.Text = textBoxExport.Text + dgvCsv1.Rows[rowIndex].Cells[cellIndex].Value.ToString() + ",";
}
textBoxExport.Text = textBoxExport.Text + "\r\n";
}
System.IO.File.WriteAllText(lblFilePath.Text, textBoxExport.Text);
}
非常感谢任何帮助。
【问题讨论】:
-
如果您有一个字符串集合,您可以使用
string.Join()在字符串之间放置逗号(因此一种解决方案是将每一行构建为List<string>然后Join它们。另一个方法是创建一个布尔值(比如var firstItem=true;),然后将逗号放在除第一个之外的每个项目之前。 -
对 cellIndex
-
使用 CSV 需要担心的一件事是包含逗号的字段数据。一些解析器将忽略嵌入在引号中的字符串中的逗号。您可能会考虑将所有字符串放在双引号内,或者测试一个字段是否包含逗号,如果是,则将其括在引号中。这取决于文件使用者设置的规则。
-
我建议阅读这里的问题以获得更好的选择。 stackoverflow.com/questions/1941392/… 正如 FlyDog 所说,如果您的任何表格中有逗号/引号,则可能会导致您出现问题。如果用户没有更改您的列,您可以遍历所有行并格式化每个新行 var newLine = string.Format("{0},{1},{2},{3}", dgvCsv1.Rows [0],dgvCsv1.Rows[1],dgvCsv1.Rows[2],dgvCsv1.Rows[3]);
标签: c# winforms csv datagridview export-to-csv