在ReportViewer中使用默认导出按钮时,是否有一种方法可以简单地提示用户打开导出的报告?我查看了ReportExport事件,尽管在导出之前会触发此事件。我唯一能想到的就是取消ReportExport并创建自己的导出功能,但我希望我不需要这样做。在导出后有没有任何事件会导致我失踪?Winforms ReportViewer和导出后打开
2
A
回答
4
我找到了解决方案。 @KreepN,我在各种讨论板上看到过类似的在线解决方案,但是,我发现了另一种解决方案,可以更好地满足我的需求。这提供了导出的所有默认功能。以下是我所做的:
首先,在创建表单时订阅ReportExport事件。
this.reportViewer1.ReportExport += new ExportEventHandler(this.ReportViewer1_ReportExport);
这里是我的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);
}
}
的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.");
}
最后,这里是我的帮助程序方法来提示用户,如果他们选择打开文件:
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);
}
}
1
根据各种帖子和资源{1,2,3},您要完成的不是Visual Studio中ReportViewer控件的内置功能。
如果此功能是必不可少的,您可以始终在报表查看器上禁用导出按钮,并添加一个按钮或其他控件来处理导出。下面是一个类的调用,我在一个程序中使用它来自动生成一个excel文件,当你运行一个报告时,你只需要通过点击按钮来订阅这个方法:
备注:custNmbr是一个变量,用于在为其运行的客户之后命名报告。如果你愿意,你可以删除它(因为它是我的报告参数),或者通过自己的代码使其动态化,以确保文件不会互相覆盖。
public static void reportWriter(ReportViewer reportViewer1, string custNmbr)
{
Warning[] warnings;
string[] streamids;
string mimeType;
string encoding;
string filenameExtension;
string Dpath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + custNmbr + ".xls";
byte[] bytes = reportViewer1.LocalReport.Render(
"Excel", null, out mimeType, out encoding, out filenameExtension,
out streamids, out warnings);
using (FileStream fs = new FileStream(Dpath, FileMode.Create))
{
fs.Write(bytes, 0, bytes.Length);
}
}
由于Dpath将是这个新导出文件的位置,你可以简单地添加对Excel互操作的引用,并调用Excel /通过新的文件:
Application excel = new Application();
Workbook wb = excel.Workbooks.Open(Dpath, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value);
希望有所帮助。
相关问题
- 1. MS ReportViewer WinForms Excel导出错误
- 2. Telerik ReportViewer导出
- 3. c#ReportViewer导出
- 4. 谷歌脚本导出后打开PDF
- 5. 将ReportViewer导出为HTML
- 6. 导航抽屉弹出片段后台后打开
- 7. 自定义导出reportviewer到excel文件
- 8. 在ReportViewer中修改导出到Excel
- 9. 如何将DataGridView导出到ReportViewer?
- 10. 将ReportViewer导出到Excel - 线宽变化
- 11. ReportViewer导出到Excel-合并单元格
- 12. ReportViewer PDF导出与嵌入字体
- 13. VB.NET ReportViewer:导出到Excel时合并列
- 14. ReportViewer控件将不允许导出
- 15. WinForms ReportViewer挂起应用程序WPF
- 16. 的WinForms的ReportViewer(.NET 3.5)从数据表
- 17. 在WinForms的ReportViewer中切换数据源
- 18. WinForms的ReportViewer(.rdlc)灯光设计器
- 19. 启用后台打开时的引导模式弹出
- 20. Crystal Report Viewer - 输入参数后导出到/打开PDF
- 21. 修改导出到Excel中的ReportViewer是只读
- 22. PHP导出到Excel打开两次
- 23. 打开excel文件并导出数据
- 24. 导出jTable选择excel并打开excel
- 25. 未打开弹出窗口 - 引导
- 26. 如何首先打开年份然后再打开月份,然后打开引导日历时的日期
- 27. WinForms多次打开相同表单
- 28. 打开winforms时发生异常C#.net
- 29. 有一个弹出窗口打开后
- 30. ASP.NET WebForms +回发然后打开弹出
谢谢,工作真棒。我只是为excel xlsx格式添加了这个额外的案例“case EXCELOPENXML”:return“.xlsx”; ' –