[英]C# Exporting DataGridView to CSV file
從下面的圖片中可以看到,將其轉換為有效的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);
}
任何幫助,不勝感激。
這已經在這里解決了 。 LINQ解決方案完全可以滿足您的需求。
var sb = new StringBuilder();
var headers = dgvCsv1.Columns.Cast<DataGridViewColumn>();
sb.AppendLine(string.Join(",", headers.Select(column => "\"" + column.HeaderText + "\"").ToArray()));
foreach (DataGridViewRow row in dgvCsv1.Rows)
{
var cells = row.Cells.Cast<DataGridViewCell>();
sb.AppendLine(string.Join(",", cells.Select(cell => "\"" + cell.Value + "\"").ToArray()));
}
因此,最終代碼如下所示:
private void btnSave_Click(object sender, EventArgs e)
{
var sb = new StringBuilder();
var headers = dgvCsv1.Columns.Cast<DataGridViewColumn>();
sb.AppendLine(string.Join(",", headers.Select(column => "\"" + column.HeaderText + "\"").ToArray()));
foreach (DataGridViewRow row in dgvCsv1.Rows)
{
var cells = row.Cells.Cast<DataGridViewCell>();
sb.AppendLine(string.Join(",", cells.Select(cell => "\"" + cell.Value + "\"").ToArray()));
}
textBoxExport.Text = sb.ToString();
System.IO.File.WriteAllText(lblFilePath.Text, textBoxExport.Text);
}
您已經具有ColumnCount,
的列數ColumnCount,
因此,在遍歷各列時,需要進行簡單的檢查以查看currentColumn
是否“小於” ColumnCount
-1。 如果currentColumn
小於ColumnCount
-1,那么你需要添加“逗號” ,
。 如果currentColumn
不小於ColumnCount
,那么這僅意味着一件事……這是最后一列,您無需添加逗號就可以添加新行。
if (currentCol < ColumnCount - 1) {
textBoxExport.Text += ",";
}
else {
textBoxExport.Text += Environment.NewLine;
}
這需要與遍歷行分開。 在遍歷行之前,遍歷網格的列並獲取每個列的Name
屬性。 這將是CSV文件中的第一行。 您可以使用與上述相同的策略來避免最后一個逗號。
for (int currentCol = 0; currentCol < ColumnCount; currentCol++) {
textBoxExport.Text += dgvCsv1.Columns[currentCol].Name;
if (currentCol < ColumnCount - 1) {
textBoxExport.Text += ",";
}
else {
textBoxExport.Text += Environment.NewLine;
}
}
最后,不清楚為什么要使用TextBox
存儲CSV字符串。 我建議使用StringBuilder.
以下是上述內容的示例。
private void btnSave_Click(object sender, EventArgs e) {
StringBuilder sb = new StringBuilder();
int RowCount = dgvCsv1.RowCount;
int ColumnCount = dgvCsv1.ColumnCount;
// get column headers
for (int currentCol = 0; currentCol < ColumnCount; currentCol++) {
sb.Append(dgvCsv1.Columns[currentCol].Name);
if (currentCol < ColumnCount - 1) {
sb.Append(",");
}
else {
sb.AppendLine();
}
}
// get the rows data
for (int currentRow = 0; currentRow < RowCount; currentRow++) {
if (!dgvCsv1.Rows[currentRow].IsNewRow) {
for (int currentCol = 0; currentCol < ColumnCount; currentCol++) {
if (dgvCsv1.Rows[currentRow].Cells[currentCol].Value != null) {
sb.Append(dgvCsv1.Rows[currentRow].Cells[currentCol].Value.ToString());
}
if (currentCol < ColumnCount - 1) {
sb.Append(",");
}
else {
sb.AppendLine();
}
}
}
}
textBoxExport.Text = sb.ToString();
System.IO.File.WriteAllText(@"D:\Test\DGV_CSV_EXPORT.csv", sb.ToString());
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.