日期:2014-05-20  浏览次数:21070 次

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

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

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

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

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

里的Export.js

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

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


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;
                        }

                    }
                }

            }
        }

    }
}






------解决方案--------------------
SF
------解决方案--------------------
謝謝了,阿泰
跟著你,長了不少見識
------解决方案--------------------