找回密码
 立即注册

QQ登录

只需一步,快速开始

504385214

初级会员

26

主题

104

帖子

368

积分

初级会员

积分
368
504385214
初级会员   /  发表于:2018-8-28 21:25  /   查看:5936  /  回复:11
本帖最后由 Lenka.Guo 于 2018-8-29 09:42 编辑

rdl报表,用设计器做设计时数据源,可预览。。然后在通过程序读取PageReport后,怎么转换为运行时数据源,比如读取文件里面的sql语句通过后台查询数据并赋值到报表。
就是报表模板是设计时数据源,但是展示的时候我想转行为运行是数据源,通过后台把模板转行?不知可行不。

运用场景就是设计时在哪儿都可以设计,但是运行的时候可能是公网,就没办法把数据库映射出去。

11 个回复

倒序浏览
Lenka.Guo讲师达人认证 悬赏达人认证
超级版主   /  发表于:2018-8-29 09:40:48
沙发
可以试试,在生成PageReport 对象后,
1. 将报表的dataProvider 更换成DataSetProvider。2. 在 LocateDataSource 中为报表返回数据

代码
  1. var rptPath = new FileInfo(@"..\..\Invoice2.rdlx");
  2.                         var definition = new PageReport(rptPath);
  3.             definition.Report.DataSources[0].ConnectionProperties.DataProvider = "DATASET";

  4.                         definition.Document.LocateDataSource += new LocateDataSourceEventHandler(OnLocateDataSource);

  5.         void OnLocateDataSource(object sender, LocateDataSourceEventArgs args)
  6.                 {
  7.                         args.Data = LoadData();
  8.                 }
复制代码

回复 使用道具 举报
504385214
初级会员   /  发表于:2018-8-29 11:33:52
板凳
本帖最后由 504385214 于 2018-8-29 11:58 编辑
Lenka.Guo 发表于 2018-8-29 09:40
可以试试,在生成PageReport 对象后,
1. 将报表的dataProvider 更换成DataSetProvider。2. 在 LocateData ...

昨天弄出来了!!但是还有一些小问题!!比如我是多个数据集,已经每个数据集里面都有参数,怎么处理哇??
在OnLocateDataSource里面处理哇??
重点是参数处理。
有没有复杂全面点的例子哇
回复 使用道具 举报
KearneyKang讲师达人认证 悬赏达人认证
超级版主   /  发表于:2018-8-29 14:18:05
地板
你是说你有多个数据集,并且每个数据集里都有参数的传递是吧。现在没有对应的demo。

但是你可以通过后台获取参数,如果不知道怎样后台获取参数,你可以参考如下博客:https://gcdn.grapecity.com.cn/fo ... &extra=page%3D1

回复 使用道具 举报
504385214
初级会员   /  发表于:2018-8-29 15:02:15
5#
KearneyKang 发表于 2018-8-29 14:18
你是说你有多个数据集,并且每个数据集里都有参数的传递是吧。现在没有对应的demo。

但是你可以通过后台 ...

  
                /// <summary>
        /// 数据集
        /// </summary>
        static Dictionary<string, string> set = new Dictionary<string, string>();
               
                public static void ReportPrint_text(string djh)
        {
            set.Clear();

            PageReport pageReport = new PageReport(new System.IO.FileInfo(@"C:\Users\gong\Desktop\运行时数据源.rdlx"));
                       
            foreach (var item in pageReport.Report.DataSets)
            {
                set.Add(item.Name, item.Query.CommandText);
                item.Query.CommandText = null;
            }
            ///参数赋值
            pageReport.Report.ReportParameters[0].DefaultValue.Values.Add(djh);
            string yymc ="XXXX信息";
            pageReport.Report.ReportParameters[1].DefaultValue.Values.Add(yymc);


            ///更换数据类型及删除sql语句
            pageReport.Report.DataSources[0].ConnectionProperties.DataProvider = "DATASET";//更换数据类型为dataset
            pageReport.Report.DataSources[0].ConnectionProperties.ConnectString = null;
            pageReport.Report.ReportParameters.Clear();

           PageDocument pageDocument = new PageDocument(pageReport);
            pageDocument.LocateDataSource += new LocateDataSourceEventHandler(locatedata);

            pageDocument.Print(true, false, false);

        }

        private static void locatedata(object sender, LocateDataSourceEventArgs args)
        {
            foreach (var item in set)
            {
                if (args.DataSetName == item.Key)
                {
                    string sql = item.Value;
                    args.Data = returndata(sql);
                    if (args.Data == null)
                    {
                        MessageBox.Show("没有数据可打印!");
                        return;
                    }
                }
            }
        }
               
                 private static object returndata(string sql)
        {
            DataTable dt = new DataTable();
            dt=///更近sql语句查询datatable结果
            return dt;
        }

上面代码要报错呢


大神帮忙完整下例子哇。sql语句里面如果有参数怎么处理。
回复 使用道具 举报
KearneyKang讲师达人认证 悬赏达人认证
超级版主   /  发表于:2018-8-29 17:28:13
6#
你这是后台绑定动态数据源,参数的操作跟在数据库里的常规操作是一样的。没有特别之处啊
回复 使用道具 举报
504385214
初级会员   /  发表于:2018-8-29 17:57:48
7#
KearneyKang 发表于 2018-8-29 17:28
你这是后台绑定动态数据源,参数的操作跟在数据库里的常规操作是一样的。没有特别之处啊

可以重构参数面板上面的查询报表按钮么?
回复 使用道具 举报
KearneyKang讲师达人认证 悬赏达人认证
超级版主   /  发表于:2018-8-30 15:01:58
8#
你是先重现写一个查询按钮。然后通过点击该按钮,数据筛选完成后,再把筛选后的数据绑定给报表。这是完全可行的。报表只做一个战士,具体的数据筛选都是你自己通过按钮触发后来进行筛选
回复 使用道具 举报
504385214
初级会员   /  发表于:2018-9-1 17:57:10
9#
KearneyKang 发表于 2018-8-30 15:01
你是先重现写一个查询按钮。然后通过点击该按钮,数据筛选完成后,再把筛选后的数据绑定给报表。这是完全可 ...

思路有了。
现在是侧边栏默认展开咋设置哇,还有侧边栏默认到参数面板咋设置哇
回复 使用道具 举报
KearneyKang讲师达人认证 悬赏达人认证
超级版主   /  发表于:2018-9-3 09:15:22
10#
你是想侧边栏,一只展开,还是。

如果你的参数有默认值侧边栏是不默认显示的,如果侧边栏无值必须输入值,则侧边栏一只显示。


回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部