【分享】自定义水晶报表工具栏导出按钮事件WinForm & WebForm版

阿泰 2010-05-21 04:48:17
加精
1:WebForm版

这个比较简单,工具栏点击后是一系列js事件在运作,只要我们找到目标文件即可
以VS2008自带版本的水晶报表为例

部署路径
C:\inetpub\wwwroot\aspnet_client\system_web\2_0_50727\CrystalReportWebFormViewer4\js

或网站的根目录下的同位置

开发路径
C:\Windows\Microsoft.NET\Framework\v2.0.50727\ASP.NETClientFiles\CrystalReportWebFormViewer4\js

里的Export.js

一个比较常见改法就是删除一些不常用的导出格式或者是描述
如,不允许导出rpt格式,只要把下面这段删除即可

if( rpt )
{
list += "<OPTION value=\"CrystalReports\">" + L_CrystalRptFormat + "</OPTION>";
}


2:WinForm版

水晶报表展示控件CrystalReportViewer本身就是一个复合控件,使用下面方法的思路
可以移除(当然,也可以通过设计时的属性来实现),修改现有按钮,添加新的按钮及事件
本例中只是做了个演示,说明能处理自定义事件。
至于要怎么去自定义导出,那么就是自己绘制一个界面来代替原来的导出界面。不是本例的重点。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using CrystalDecisions.Shared;
using CrystalDecisions.CrystalReports.Engine;
using CrystalDecisions.Windows.Forms;

namespace CrApp_OLAP2
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

//在Load时触发
private void Form1_Load(object sender, EventArgs e)
{
ReplaceExportButton();
}

//自定义事件
private void myEvent000(object sender, EventArgs e)
{
MessageBox.Show("Here");
}

//核心
private void ReplaceExportButton()
{
//遍历crystalReportViewer1控件里的控件
foreach (object ctl in crystalReportViewer1.Controls)
{
//取得控件名称
string sControl = ctl.GetType().Name.ToString().ToLower();
//取得工具条
if (sControl == "toolstrip")
{
ToolStrip tab1 = (ToolStrip)ctl;
//遍历工具条Item
for (int i = 0; i <= tab1.Items.Count - 1; i++)
{
//MessageBox.Show(tab1.Items[i].ToolTipText);
//如果是导出按钮
if (tab1.Items[i].ToolTipText == "导出报表")
{
//先创建一个ToolStripButton准备替代现有Button
ToolStripButton tbutton = new ToolStripButton();
//获取原导出按钮的按钮图片
Image img1 = tab1.Items[i].Image;
//移除原导出按钮
tab1.Items.Remove(tab1.Items[i]);
//设置新button属性
tbutton.Image = img1;
tbutton.ToolTipText = "自定义导出报表按钮";
//在原位置上插入新Button
tab1.Items.Insert(0,tbutton);

//绑定自定义事件
tbutton.Click += new System.EventHandler(this.myEvent000);
break;
}

}
}

}
}

}
}



...全文
2496 89 打赏 收藏 转发到动态 举报
写回复
用AI写文章
89 条回复
切换为时间正序
请发表友善的回复…
发表回复
Paul_CG 2012-08-20
  • 打赏
  • 举报
回复
帮助到我了。。。非常感谢
Jamescow 2011-09-25
  • 打赏
  • 举报
回复
泰,你实在太强大了。。成我偶像了。
yangguosheng 2011-01-31
  • 打赏
  • 举报
回复
我的怎么不起作用呢。

我把两个目录里的都改了,重启了iis还是不行。最后我甚至把js文件删掉还是行。导出没有变化。
我在电脑里搜了一线export.js。也没有搜到。


我用的vs2008和水晶报表2008(12.0.1100.0).
yang619437912 2010-05-29
  • 打赏
  • 举报
回复
mark
toomworld 2010-05-29
  • 打赏
  • 举报
回复
mark,好方法,值得借鉴
zhangyang860112 2010-05-28
  • 打赏
  • 举报
回复
相当不错,谢谢了!
Andy__Huang 2010-05-28
  • 打赏
  • 举报
回复
阿泰好人一个,收藏!
minzhong20 2010-05-28
  • 打赏
  • 举报
回复
这个嘛。。。。。。
lucky011 2010-05-27
  • 打赏
  • 举报
回复
不会~进来学习学习
yiluka2007 2010-05-27
  • 打赏
  • 举报
回复
这个要收藏
weihao223x 2010-05-27
  • 打赏
  • 举报
回复
学习了
小烟 2010-05-26
  • 打赏
  • 举报
回复
汗 貌似很深奥啊 呵呵
bigrock 2010-05-26
  • 打赏
  • 举报
回复
学习了。
baotailang 2010-05-26
  • 打赏
  • 举报
回复
谢谢分享
六六木木 2010-05-26
  • 打赏
  • 举报
回复
不错,推荐,。。
lmc158 2010-05-26
  • 打赏
  • 举报
回复
2:WinForm版

水晶报表展示控件CrystalReportViewer本身就是一个复合控件,使用下面方法的思路
可以移除(当然,也可以通过设计时的属性来实现),修改现有按钮,添加新的按钮及事件
本例中只是做了个演示,说明能处理自定义事件。
至于要怎么去自定义导出,那么就是自己绘制一个界面来代替原来的导出界面。不是本例的重点。
C# code
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using CrystalDecisions.Shared;
using CrystalDecisions.CrystalReports.Engine;
using CrystalDecisions.Windows.Forms;

namespace CrApp_OLAP2
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

//在Load时触发
private void Form1_Load(object sender, EventArgs e)
{
ReplaceExportButton();
}

//自定义事件
private void myEvent000(object sender, EventArgs e)
{
MessageBox.Show("Here");
}

//核心
private void ReplaceExportButton()
{
//遍历crystalReportViewer1控件里的控件
foreach (object ctl in crystalReportViewer1.Controls)
{
//取得控件名称
string sControl = ctl.GetType().Name.ToString().ToLower();
//取得工具条
if (sControl == "toolstrip")
{
ToolStrip tab1 = (ToolStrip)ctl;
//遍历工具条Item
for (int i = 0; i <= tab1.Items.Count - 1; i++)
{
//MessageBox.Show(tab1.Items[i].ToolTipText);
//如果是导出按钮
if (tab1.Items[i].ToolTipText == "导出报表")
{
//先创建一个ToolStripButton准备替代现有Button
ToolStripButton tbutton = new ToolStripButton();
//获取原导出按钮的按钮图片
Image img1 = tab1.Items[i].Image;
//移除原导出按钮
tab1.Items.Remove(tab1.Items[i]);
//设置新button属性
tbutton.Image = img1;
tbutton.ToolTipText = "自定义导出报表按钮";
//在原位置上插入新Button
tab1.Items.Insert(0,tbutton);

//绑定自定义事件
tbutton.Click += new System.EventHandler(this.myEvent000);
break;
}

}
}

}
}

}
}



黎翔 2010-05-26
  • 打赏
  • 举报
回复
学习中
Lee 2010-05-26
  • 打赏
  • 举报
回复
的确强啊
做的还很细致,支持!
zhangyuan_279 2010-05-26
  • 打赏
  • 举报
回复
帮忙顶一下
angelyucc 2010-05-26
  • 打赏
  • 举报
回复
謝了,阿泰
跟著你,長了不少見識
加载更多回复(66)

4,816

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 图表区
社区管理员
  • 图表区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧