Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 通过重新排序的列将GridView转换为CSV_C#_Asp.net_Csv_Gridview - Fatal编程技术网

C# 通过重新排序的列将GridView转换为CSV

C# 通过重新排序的列将GridView转换为CSV,c#,asp.net,csv,gridview,C#,Asp.net,Csv,Gridview,我有一个GridView,其中包含从EAV源自动生成的列。默认情况下,列是按字母顺序排列的,但是可以通过一些jQuery魔术重新排列它们。数据需要使用用户定义的列顺序以CSV格式输出 我正在使用的jQuery魔术: (如果解决方案需要,我可以确信使用不同的方法重新排列列) CSV输出如下: System.Text.StringBuilder sb = new System.Text.StringBuilder(); for (int i = 0; i < grdResults.Header

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

我正在使用的jQuery魔术: (如果解决方案需要,我可以确信使用不同的方法重新排列列)

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();
}
System.Text.StringBuilder sb=new System.Text.StringBuilder();
对于(int i=0;i0)
{
Response.Clear();
Response.ClearContent();
Response.ClearHeaders();
Response.AddHeader(“内容处置”,
格式(“附件;文件名=报告{0}.csv”,
DateTime.Now.ToString(“yyyy-MM-dd_HH-MM-ss”);
Response.AddHeader(“内容长度”,
Convert.ToString(sb.ToString().Length));
Response.ContentType=“text/HTML”;
WriteFile(文件名);
Response.End();
}
我这样做是因为在excel中,如果是ANSI或不同的UTF,分符号会很有趣,这允许我控制编码

列始终按默认顺序排列。如何以重新排序的列顺序输出CSV

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

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

更新:谢谢你的帮助,我基本上都能用。然而,分符号
显示为
;所以
79×
就是
79×
。如果我用记事本或记事本++打开它,它是正确的

charCodeAt()将其作为一个字符串。所以
41¢
52、49、162

-为什么excel会添加一个额外的字符

-是否有一个不同的字符码,我可以做一个替换,以便它在excel中正确显示


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

我采用了纳文的解决方案:我不得不稍微考虑一下,以适应我的具体情况,但效果很好

我将行从:

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

因此,我还可以得到表头,并添加了一个特殊的案例来处理这个讨厌的

我将把这个标记为答案,因为它在评论中得到了回答,任何浏览的人都会看到一个绿色的框显示,可以来寻找解决方案


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

您可以使用jquery datatables。它有丰富的api,并提出了导出到excel CSV word的开箱即用和免费
$cols = $row.find('th,td');