C#ReportViewer-xls的不同布局

C#ReportViewer-xls的不同布局,c#,reportviewer,C#,Reportviewer,我想知道是否可以为“导出als xls”使用不同的布局。这是因为看起来不错的东西(如可视raport、pdf和word)有时与excel中的实际情况大不相同。我试着翻阅了文档,但没有结果。有什么想法吗?我同意出口。正如Excel或Word所做的一样,它们只不过是具有明确位置的“对象”,而且没有任何实际的操作。实际上,我在导出操作上编写了自己的钩子,以便从报表上下文中获取数据,并以我想要的格式直接转储数据 现在请注意。。。我这里有一段来自主报表管理器的代码。我的所有报告都是从中派生出来的,因此我不

我想知道是否可以为“导出als xls”使用不同的布局。这是因为看起来不错的东西(如可视raport、pdf和word)有时与excel中的实际情况大不相同。我试着翻阅了文档,但没有结果。有什么想法吗?

我同意出口。正如Excel或Word所做的一样,它们只不过是具有明确位置的“对象”,而且没有任何实际的操作。实际上,我在导出操作上编写了自己的钩子,以便从报表上下文中获取数据,并以我想要的格式直接转储数据

现在请注意。。。我这里有一段来自主报表管理器的代码。我的所有报告都是从中派生出来的,因此我不必反复编写相同的报告预览框架。在我的类中,我有一个虚拟方法GenerateData(),每个子类报表都执行自己的任务来查询数据库,准备数据表,然后将数据表添加到主报表上的“数据集”,并让报表继续

export选项也是一个虚拟函数,每个子类报表都知道自己的数据表是什么,并且可能对导出的列有一些限制,然后调用tabletosv()方法进行最终导出

希望这能为您的需求提供一些想法

// hook for when exporting is done.
reportViewer.ReportExport += reportViewer_ReportExport;


void reportViewer_ReportExport(object sender, ReportExportEventArgs e)
{
    // Prepare an Export path for the user's desktop
    exportPath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop)
            + "\\SomeExportPath\\";

    // In case multiple exports, time-stamp the file name too
    timeMark = DateTime.Now.ToString("yyyyMMddTHHmmss");

    if (sender != null )
    {
        switch( e.Extension.Name )
        {
            case "Excel":
                ExportForExcel();
                e.Cancel = true;
                Messagebox( "Exported Excel(CSV) to your desktop in the \r\n"
                        + "folder 'SomeExportPath\\SomeFile.csv'" ); 
                break;
        }
    }
}

protected virtual void ExportForExcel()
{}

protected void TableToCSV( DataTable dt, string FinalFileName )
{
    StringBuilder sb = new StringBuilder(); 
    IEnumerable<string> columnNames = dt.Columns.Cast<DataColumn>().Select(column => column.ColumnName);
    sb.AppendLine(string.Join(",", columnNames));

    foreach (DataRow row in dt.Rows)
    {
        IEnumerable<string> fields = row.ItemArray.Select(field => 
          string.Concat("\"", field.ToString().Replace("\"", "\"\""), "\""));
        sb.AppendLine(string.Join(",", fields));
    }
    File.WriteAllText(exportPath + FinalFileName + ".csv", sb.ToString());

}
//导出完成时的钩子。
reportViewer.ReportExport+=reportViewer\u ReportExport;
void reportViewer_ReportExport(对象发送方,ReportExportEventArgs e)
{
//准备用户桌面的导出路径
exportPath=Environment.GetFolderPath(Environment.SpecialFolder.Desktop)
+“\\SomeExportPath\\”;
//在多次导出的情况下,还要在文件名上加上时间戳
timeMark=DateTime.Now.ToString(“yyyyMMddTHHmmss”);
if(发送方!=null)
{
开关(例如Extension.Name)
{
案例“Excel”:
ExportForExcel();
e、 取消=真;
Messagebox(“已将Excel(CSV)导出到中的桌面\r\n”
+“文件夹'SomeExportPath\\SomeFile.csv'”;
打破
}
}
}
受保护的虚拟void ExportForExcel()
{}
受保护的void tabletosv(DataTable dt,string FinalFileName)
{
StringBuilder sb=新的StringBuilder();
IEnumerable columnNames=dt.Columns.Cast().Select(column=>column.ColumnName);
sb.AppendLine(string.Join(“,”,columnNames));
foreach(数据行中的数据行)
{
IEnumerable fields=row.ItemArray.Select(field=>
string.Concat(“\”,field.ToString().Replace(“\”,“\”),“\”);
sb.AppendLine(string.Join(“,”字段));
}
writealText(exportPath+FinalFileName+“.csv”,sb.ToString());
}