C#ReportViewer-xls的不同布局

本文关键字:布局 C#ReportViewer-xls | 更新日期: 2023-09-27 18:20:08

我想知道是否可以对"export-als-xls"使用不同的布局。原因是,看起来不错的东西(即可见的raport、pdf和word)有时与excel中的实用内容非常不同。我试着翻阅了一下文件,但没有用。有什么想法吗?

C#ReportViewer-xls的不同布局

我同意导出。因为Excel或Word只做位置明确的"对象",没有什么实际的操作。实际上,我在导出操作上编写了自己的挂钩,只是从报告上下文中获取数据,并以我想要的格式直接转储它。

现在注意。。。我这里有一段来自主报表管理器的代码。我所有的报告都是从中派生出来的,所以我不必一遍又一遍地编写相同的报告预览框架。在我的类中,我有一个虚拟方法GenerateData(),每个子类报表都做自己的事情来查询数据库,准备数据表,然后将数据表添加到主报表上的"DataSet"中,让报表继续运行。

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

希望这能给你一些满足你需求的想法。

// 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());
}