有时候我们需要修改水晶报表自带工具栏按钮的一些信息,比较常见的是一些提示信息的更改,还有“转到页”、“查找文本”弹出界面的文本修改,这在做多语言的时候被搅得不得安宁;还有今天在论坛上看到 设置默认导出文件格式 这样的需求。
下面我就在Winform环境下以重构导出按钮为例 来重构这个水晶报表自带导出按钮
1、添加如下两个函数
// 把刚才保留的外观属性赋给刚刚新建的工具栏按钮
myExportTool.ToolTipText = ToopTip;
myExportTool.Image = img;
myExportTool.ImageScaling = ToolStripItemImageScaling.None;
// 给新建的工具栏按钮添加事件
myExportTool.Click += new EventHandler(myExportTool_Click);
// 把新建的工具栏按钮插入到原先自带导出按钮的位置(第一个位置)
((ToolStrip)c).Items.Insert(0, myExportTool);
}
}
}
void myExportTool_Click(object sender, EventArgs e)
{
string FileName = string.Empty;
SaveFileDialog sf = new SaveFileDialog();
sf.Filter = "Microsoft Excel(仅限数据)(*.xls)|*.xls|" +
"Crystal Reports(*.rpt)|*.rpt|" +
"Adobe Acrobat(*.pdf)|*.pdf|" +
"Microsoft Excel(*.xls)|*.xls|" +
"Microsoft Word(*.doc)|*.doc|" +
"RTF 格式(*.rtf)|*.rtf|" +
"HTML 4.0 格式(*.htm)|*.htm";
// ……
/* sf.DefaultExt = "rtf";
* 这么设起不了作用,还不知道原因何在,还请路人甲、路人乙指教一二
* 所以只好手动调整顺序 */
//用sf.FilterIndex调整
if (DialogResult.OK == sf.ShowDialog())
{
FileName = sf.FileName;
switch (sf.FilterIndex)
{
// 注意这边的顺序要和前面的sf.Filter保持一致,否则会因格式不匹配导致打不开导出文件
case 1: myReport.ExportToDisk(ExportFormatType.ExcelRecord, FileName); break;
case 2: myReport.ExportToDisk(ExportFormatType.CrystalReport, FileName); break;
case 3: myReport.ExportToDisk(ExportFormatType.PortableDocFormat, FileName); break;
case 4: myReport.ExportToDisk(ExportFormatType.Excel, FileName); break;
case 5: myReport.ExportToDisk(ExportFormatType.WordForWindows, FileName); break;
case 6: myReport.ExportToDisk(ExportFormatType.RichText, FileName); break;
case 7: myReport.ExportToDisk(ExportFormatType.HTML40, FileName); break;
// ……
default: break;
}
}
}
最后在Form_Load()中调用
findContr(); 即可。
其中Filter中的格式顺序可以任意调整,看你想把哪个格式设为默认,由于这完全是我们自己添加的一个SaveFileDialog,所以自然可以任意删减以屏蔽某些不需要的格式;
myReport为ReportDocument实例对象
//2010.5.24修改
void findControl()
{
foreach (Control c in crystalReportViewer1.Controls)
{
if (c is ToolStrip)
{
// …………
}
}
}
//最新修改@2010.5.29