GridView到CSV,带有重新排序的列

时间:2015-01-22 01:13:22

标签: c# asp.net csv gridview

我有一个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();
}

我是这样做的,因为如果是ANSI或不同的UTF,分符号在excel中出来很有趣,这让我可以控制编码。

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

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

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

更新:感谢您的帮助,我得到了大部分工作。然而,分号¢Â¢形式出现;所以79¢79¢。如果我在记事本或记事本++中打开它是正确的。

String.charCodeAt()将其作为162.因此41¢52, 49, 162

- 为什么要添加额外的角色?

- 有一个不同的charcode我可以做替换,所以它在excel中正确显示?

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

1 个答案:

答案 0 :(得分:0)

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

我换了一行:

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

为:

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

所以我也可以获得表头,并添加了一个特殊的案例来处理那个讨厌的¢

我只是将此标记为答案,因为评论中已经回答了这一点,任何浏览的人都会看到一个绿色的框显示,并且可以来寻找解决方案。

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