Winforms ReportViewer 并在导出后打开

mse*_*dio 3 visual-studio-2010 winforms c#-4.0 report-viewer2010

在 ReportViewer 中使用默认导出按钮时,是否可以简单地提示用户打开导出的报告?我查看了 ReportExport 事件,尽管这会在导出发生之前触发。我唯一能想到的就是取消 ReportExport 并创建我自己的导出功能,尽管我希望我不需要这样做。导出发生后是否有任何我错过的事件?

mse*_*dio 5

我为此找到了解决方案。@KreepN,我在各种讨论板上看到了与您的在线类似的解决方案,但是,我找到了另一个更适合我所寻找的解决方案。这提供了所有用于导出的默认功能。这是我所做的:

首先,在创建表单时订阅 ReportExport 事件。

this.reportViewer1.ReportExport += new ExportEventHandler(this.ReportViewer1_ReportExport);
Run Code Online (Sandbox Code Playgroud)

这是我的 ReportExport 事件处理方法:

private void ReportViewer1_ReportExport(object sender, ReportExportEventArgs e)
{
    e.Cancel = true;

    string extension = this.GetRenderingExtension(e.Extension);

    SaveFileDialog saveFileDialog = new SaveFileDialog()
    {
        Title = "Save As",
        CheckPathExists = true,
        InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments),
        Filter = e.Extension.LocalizedName + " (*" + extension + ")|*" + extension + "|All files(*.*)|*.*",
        FilterIndex = 0
    };

    if (saveFileDialog.ShowDialog(this) == DialogResult.OK)
    {
        this.reportViewer1.ExportDialog(e.Extension, e.DeviceInfo, saveFileDialog.FileName);

        // Here's where I call my method to prompt user to open the file.
        RadExportHelper.OpenFileWithPrompt(saveFileDialog.FileName);                
    }
}
Run Code Online (Sandbox Code Playgroud)

RenderingExtension 类不会公开公开导出的实际文件扩展名,因此我创建了此方法:

private string GetRenderingExtension(RenderingExtension extension)
{
    switch (extension.Name)
    {
        case "PDF":
            return ".pdf";
        case "CSV":
            return ".csv";
        case "EXCEL":
            return ".xls";
        case "MHTML":
            return ".mhtml";
        case "IMAGE":
            return ".tif";
        case "XML":
            return ".xml";
        case "WORD":
            return ".doc";
        case "HTML4.0":
            return ".html";
        case "NULL":
            throw new NotImplementedException("Extension not implemented.");
    }

    throw new NotImplementedException("Extension not implemented.");
}
Run Code Online (Sandbox Code Playgroud)

最后,这是我的辅助方法来提示用户并在他们选择时打开文件:

public static void OpenFileWithPrompt(string file)
{
    if (RadMessageBox.Show(
        Resources.RadHelper_OpenExportedDataMessage,
        Resources.RadHelper_OpenExportedDataTitle,
        MessageBoxButtons.YesNo,
        RadMessageIcon.Question,
        MessageBoxDefaultButton.Button1) == DialogResult.Yes)
    {
        Process.Start(file);
    }
}
Run Code Online (Sandbox Code Playgroud)