C# 如何使用mvc导出到网格中显示的csv文件#

C# 如何使用mvc导出到网格中显示的csv文件#,c#,model-view-controller,C#,Model View Controller,我有一个由文件列和标题组成的网格,如下所示: List<string> eventResult = (from c in DB.Events where (c.m_turbine_id == turbineid.turbineID) && (c.m_time_stamp >= frmDate && c.m_time_stamp <= toDate)

我有一个由文件列和标题组成的网格,如下所示:

   List<string> eventResult = (from c in DB.Events
                                    where (c.m_turbine_id == turbineid.turbineID) && (c.m_time_stamp >= frmDate && c.m_time_stamp <= toDate)

                                    select new EventLogPartialViewModel
                                    {
                                        Timestamp = c.m_time_stamp,
                                        Description = c.m_event_log_description,
                                        WindSpeed = c.m_wind_speed,
                                        RPM = c.m_rpm,
                                        Power = c.m_power
                                    }).ToList().Select(x =>
                  x.Timestamp.ToString("dd/MM/yyyy H:mm:ss") + "," +
                  x.Description + "," +
                  x.WindSpeed + "," +
                  x.RPM + "," +
                  x.Power)

             .ToList();
我在此导出:

 return this.File(csvBytes, "text/csv",".csv");

当我打开文件时,标题丢失,我的所有数据都在一行中,不像网格一样,你已经在上一个
select
语句中用逗号连接了字段,所以final
Join
应该是新行

string sss = string.Join(Environment.NewLine, eventResult.ToArray());
通常我用于生成csv文件,因为我不想验证或转义输入字符串中的双引号和逗号。这些是非常常见的字符,可能会破坏文件

包含标题的完整代码为:

string header = "Timestamp,Description,WindSpeed,RPM,Power";
string rows = string.Join(Environment.NewLine, eventResult.ToArray());
byte[] csvBytes = ASCIIEncoding.ASCII.GetBytes(header + Environment.NewLine + rows);
return File(csvBytes, "text/csv", ".csv");

您已经在上一个
select
语句中用逗号连接了字段,所以最后的
Join
应该是新行

string sss = string.Join(Environment.NewLine, eventResult.ToArray());
通常我用于生成csv文件,因为我不想验证或转义输入字符串中的双引号和逗号。这些是非常常见的字符,可能会破坏文件

包含标题的完整代码为:

string header = "Timestamp,Description,WindSpeed,RPM,Power";
string rows = string.Join(Environment.NewLine, eventResult.ToArray());
byte[] csvBytes = ASCIIEncoding.ASCII.GetBytes(header + Environment.NewLine + rows);
return File(csvBytes, "text/csv", ".csv");

如果某些数据中可能有,最好对数据使用双引号。如果某些数据中可能有,最好对数据使用双引号。太完美了!但是我怎样才能在上面添加标题的名称,比如时间戳、描述等等?如果标题可以硬编码为“col1、col2、col2等”,那么它就是ascienceoding.ASCII.GetBytes(header+environment.NewLine+sss);但是,如果您想动态更新标题,可以使用System.ReflectionLike这样做吗?string sss=string.Join(“TimeStamp,Description+WindSpeed+RPM+Power”+Environment.NewLine,eventResult.ToArray());但这并没有让headerNice知道您添加了一些关于逃逸字符以避免中断的内容+1美元。此外,正如您所知,一些事情可能会破坏CSV文件…回车或换行符在字符串中,游离的逗号和引号,空字符潜入,等等,完美!但是我怎样才能在上面添加标题的名称,比如时间戳、描述等等?如果标题可以硬编码为“col1、col2、col2等”,那么它就是ascienceoding.ASCII.GetBytes(header+environment.NewLine+sss);但是,如果您想动态更新标题,可以使用System.ReflectionLike这样做吗?string sss=string.Join(“TimeStamp,Description+WindSpeed+RPM+Power”+Environment.NewLine,eventResult.ToArray());但这并没有让headerNice知道您添加了一些关于逃逸字符以避免中断的内容+1美元。此外,正如您所知,一些事情可能会损坏CSV文件…回车或换行符在字符串中,游离的逗号和引号,空字符潜入,等等