GridView 到具有重新排序的列的 CSV

GridView to CSV with re-ordered columns

我有一个 GridView,其中包含从 EAV 源自动生成的列。默认情况下,列按字母顺序排列,但可以使用一些 jQuery 魔法重新排列。需要使用用户定义的列顺序以 CSV 格式输出数据。

jQuery 我正在使用的魔法:https://github.com/akottr/dragtable (如果解决方案需要,我可以说服使用不同的方法来重新排列列)

CSV输出如下:

System.Text.StringBuilder sb = new System.Text.StringBuilder();
for (int i = 0; i < grdResults.HeaderRow.Cells.Count; i++){
    sb.Append(grdView.HeaderRow.Cells[i].Text.Replace(',', ';') + ',');
}
//append new line
sb.Append("\r\n");
for (int i = 0; i < grdView.Rows.Count; i++){
   for (int j = 0; j < grdView.Rows[i].Cells.Count; j++){
     sb.Append(HttpUtility.HtmlDecode(Rows[i].Cells[j].Text.Replace(',', ';'))+ ',');
   }
   sb.Append("\r\n");
}

FileStream fs = new FileStream(FileName, FileMode.OpenOrCreate,
                               FileAccess.ReadWrite);
fs.Close();
StreamWriter sw = new StreamWriter(FileName, false, 
                                    System.Text.Encoding.UTF8);
sw.Write(sb.ToString());
sw.Close();

if (sb.Length > 0)
{
    Response.Clear();
    Response.ClearContent();
    Response.ClearHeaders();
    Response.AddHeader("Content-Disposition", 
                    string.Format("attachment;filename=Report{0}.csv",
                    DateTime.Now.ToString("yyyy-MM-dd_HH-mm-ss")));
    Response.AddHeader("Content-Length",
                      Convert.ToString(sb.ToString().Length));
    Response.ContentType = "text/HTML";
    Response.WriteFile(FileName);
    Response.End();
}

我这样做是因为分符号在 excel 中很有趣,如果它是 ANSI 或不同的 UTF,这允许我控制编码。

列始终采用默认顺序。如何使用重新排序的列顺序输出 CSV?

-解决方案可以使用 javascript/jQuery,或使用 C# 后端的服务器端,并且可能需要重新处理现有组件。

-可接受的解决方案还必须允许分号在导出后正确显示在 excel 中。

更新:感谢您的帮助,我基本上可以正常工作了。然而,分符号 ¢ 显示为 ¢;所以 79¢79¢。如果我用记事本或记事本++打开它是正确的。

String.charCodeAt() 是 162。所以 41¢52, 49, 162

-为什么 excel 多加一个字符?

-是否有不同的字符代码我可以进行替换以便它在 excel 中正确显示?

UPDATE2: 当出现狂野的 ¢ 时,我只是将其转换为美元并使用 $ 代替。对于经理来说,这似乎是一个令人满意的解决方案。

我采用了 naveen 的解决方案:http://jsfiddle.net/terryyounghk/KPEGU 我不得不稍微调整一下以适应我的具体情况,但效果很好。

我更改了行:

$cols = $row.find('td')

至:

$cols = $row.find('th,td');

所以我也可以获得 table headers,并添加了一个特例来处理那个讨厌的 ¢.

我只是将其标记为答案,因为它已在评论中得到回答,任何浏览的人都会看到一个绿色框,可以来寻找解决方案。

如果有人有可以在 excel 输出中保留 ¢ 的解决方案,我会将其标记为答案。