限制 ReportViewer 只允许保存 PDF
Limit ReportViewer to only allow to save PDF
我有一个 win form 应用程序,它有一些关于日期的信息,当用户点击一个按钮时,它将打开报告查看器,用户应该保存文件
如您所知,报告查看器会让用户将文件另存为 PDF、WORD 和 EXCEL。
我只想让用户只看到并按下 PDF 保存。
首先,您可以使用 ShowExportControls
属性.
禁用导出
然后,您将向工具条添加一个自定义按钮。这将在您的 form load event
.
中完成
ToolStrip ts = (ToolStrip)crystalReportViewer1.Controls[3];
ToolStripButton printbutton = new ToolStripButton();
printbutton.Image = ts.Items[1].Image;
ts.Items.Remove(ts.Items[1]);
ts.Items.Insert(1, printbutton);
ts.Items[1].Click += new EventHandler(this.CaptureEvent);
cr = new CrystalReport1();
this.crystalReportViewer1.ReportSource = cr;
然后您将拥有该按钮的自定义事件处理程序
private void CaptureEvent(Object Sender, EventArgs e)
{
// In this code, you'll have your own custom save file dialog
// Once you get that file name, save to PDF
SaveFileDialog saveFileDialog = new SaveFileDialog();
saveFileDialog.InitialDirectory = Environment.SpecialFolder.MyDocuments.ToString();
saveFileDialog.Filter = "Document (*.pdf)|*.PDF";
saveFileDialog.FilterIndex = 1;
if (saveFileDialog.ShowDialog() == DialogResult.OK)
{
crystalReportViewer1.ExportToDisk(ExportFormatType.PortableDocFormat, saveFileDialog.FileName);;
}
}
要更改 ToolStrip
外观以仅显示保存按钮而不显示下拉菜单,您可以找到 ReportViewer
的 ToolStrip
,然后找到 "export"按钮并删除下拉菜单。
要显示仅允许保存 PDF 的保存对话框,请将事件处理程序附加到 "export" 按钮的单击事件,并使用报告查看器的 ExportDialog
方法显示保存对话框。您可以通过 LocalReport
的 ListRenderingExtensions()
方法找到扩展名 return 之间的 PDF 扩展名,并将其传递给 ExportDialog
方法以限制对话框仅显示 PDF
扩展。
示例 1
将此代码粘贴到表单的加载事件中,加载报表后,按保存按钮。它将显示一个保存对话框,其中仅包含用于保存文件的 PDF 选项:
var toolStrip = (ToolStrip)reportViewer1.Controls.Find("toolStrip1", true).First();
((ToolStripDropDownButton)toolStrip.Items["export"]).ShowDropDownArrow = false;
((ToolStripDropDownButton)toolStrip.Items["export"]).DropDownOpening += (obj, arg) =>
{
((ToolStripDropDownButton)obj).DropDownItems.Clear();
};
((ToolStripDropDownButton)toolStrip.Items["export"]).Click += (obj, arg) =>
{
var pdf = reportViewer1.LocalReport.ListRenderingExtensions()
.Where(x => x.Name == "PDF").First();
reportViewer1.ExportDialog(pdf);
};
示例 2
如果您不想删除下拉箭头,只想在下拉菜单中显示 PDF 选项,请使用此代码:
var toolStrip = (ToolStrip)reportViewer1.Controls.Find("toolStrip1", true).First();
((ToolStripDropDownButton)toolStrip.Items["export"]).DropDownOpening += (obj, arg) =>
{
var item = ((ToolStripDropDownButton)obj);
item.DropDownItems.Cast<ToolStripItem>().Where(x => x.Text != "PDF").ToList()
.ForEach(x => item.DropDownItems.Remove(x));
};
(好像我没有足够的声誉来添加评论)
我使用了 Reza Aghaei 提供的建议。然而,reportview 的上下文菜单还提供了一个导出下拉列表,Reza 的建议没有触及它。我禁用了 ReportViewer ConcextMenu 来解决这个问题。
ShowContextMenu = false
我有一个 win form 应用程序,它有一些关于日期的信息,当用户点击一个按钮时,它将打开报告查看器,用户应该保存文件
如您所知,报告查看器会让用户将文件另存为 PDF、WORD 和 EXCEL。
我只想让用户只看到并按下 PDF 保存。
首先,您可以使用 ShowExportControls
属性.
然后,您将向工具条添加一个自定义按钮。这将在您的 form load event
.
ToolStrip ts = (ToolStrip)crystalReportViewer1.Controls[3];
ToolStripButton printbutton = new ToolStripButton();
printbutton.Image = ts.Items[1].Image;
ts.Items.Remove(ts.Items[1]);
ts.Items.Insert(1, printbutton);
ts.Items[1].Click += new EventHandler(this.CaptureEvent);
cr = new CrystalReport1();
this.crystalReportViewer1.ReportSource = cr;
然后您将拥有该按钮的自定义事件处理程序
private void CaptureEvent(Object Sender, EventArgs e)
{
// In this code, you'll have your own custom save file dialog
// Once you get that file name, save to PDF
SaveFileDialog saveFileDialog = new SaveFileDialog();
saveFileDialog.InitialDirectory = Environment.SpecialFolder.MyDocuments.ToString();
saveFileDialog.Filter = "Document (*.pdf)|*.PDF";
saveFileDialog.FilterIndex = 1;
if (saveFileDialog.ShowDialog() == DialogResult.OK)
{
crystalReportViewer1.ExportToDisk(ExportFormatType.PortableDocFormat, saveFileDialog.FileName);;
}
}
要更改 ToolStrip
外观以仅显示保存按钮而不显示下拉菜单,您可以找到 ReportViewer
的 ToolStrip
,然后找到 "export"按钮并删除下拉菜单。
要显示仅允许保存 PDF 的保存对话框,请将事件处理程序附加到 "export" 按钮的单击事件,并使用报告查看器的 ExportDialog
方法显示保存对话框。您可以通过 LocalReport
的 ListRenderingExtensions()
方法找到扩展名 return 之间的 PDF 扩展名,并将其传递给 ExportDialog
方法以限制对话框仅显示 PDF
扩展。
示例 1
将此代码粘贴到表单的加载事件中,加载报表后,按保存按钮。它将显示一个保存对话框,其中仅包含用于保存文件的 PDF 选项:
var toolStrip = (ToolStrip)reportViewer1.Controls.Find("toolStrip1", true).First();
((ToolStripDropDownButton)toolStrip.Items["export"]).ShowDropDownArrow = false;
((ToolStripDropDownButton)toolStrip.Items["export"]).DropDownOpening += (obj, arg) =>
{
((ToolStripDropDownButton)obj).DropDownItems.Clear();
};
((ToolStripDropDownButton)toolStrip.Items["export"]).Click += (obj, arg) =>
{
var pdf = reportViewer1.LocalReport.ListRenderingExtensions()
.Where(x => x.Name == "PDF").First();
reportViewer1.ExportDialog(pdf);
};
示例 2
如果您不想删除下拉箭头,只想在下拉菜单中显示 PDF 选项,请使用此代码:
var toolStrip = (ToolStrip)reportViewer1.Controls.Find("toolStrip1", true).First();
((ToolStripDropDownButton)toolStrip.Items["export"]).DropDownOpening += (obj, arg) =>
{
var item = ((ToolStripDropDownButton)obj);
item.DropDownItems.Cast<ToolStripItem>().Where(x => x.Text != "PDF").ToList()
.ForEach(x => item.DropDownItems.Remove(x));
};
(好像我没有足够的声誉来添加评论)
我使用了 Reza Aghaei 提供的建议。然而,reportview 的上下文菜单还提供了一个导出下拉列表,Reza 的建议没有触及它。我禁用了 ReportViewer ConcextMenu 来解决这个问题。
ShowContextMenu = false