C#操作水晶报表的一些疑问和求解 100

我现在打算这样去做:首先,我使用的是VS2010的环境建立的WinForm的CR项目,数据库使用的是ODBC的数据库连接然后,我打算建立一个CR文件作为模板,模板的项都是... 我现在打算这样去做:
首先,我使用的是VS2010的环境建立的WinForm的CR项目,数据库使用的是ODBC的数据库连接
然后,我打算建立一个CR文件作为模板,模板的项都是固定好的,通过指定的SQL语句可以直接把数据推向CR内。
但是,我现在出现了各种问题和各种疑惑:
问题:
1.当CRViewer加载我的CR对象的时候就显示“未能加载数据库”
疑惑:
1.CR的setReportSource一定要是Dataset或者DataTable吗?我使用的是DataReader的数据容器.
2.CR的其他问题还没有遇到,因为到这就已经卡住了.
我想知道的:
我现在想做的之前已经写好了:通过一个Winform加载一个CR的rpt文件,并且通过SQL语句可以将数据推送至rpt内,但是我卡在了未能加载数据库这里,希望CR的宗师给我提供一个完整的操作方法,我使用的环境是VS2010和CR for VS2010(当然Runtime之类的都安装了)
对于长篇大套粘贴或者转载的就不麻烦您了!谢谢!
展开
 我来答
创作者zUzVB1Sl31
2014-04-23 · 编程类资料、英语学习资料
创作者zUzVB1Sl31
采纳数:1331 获赞数:5975

向TA提问 私信TA
展开全部

这么说吧,水晶报表压根不好用,我们宁愿用微软的。

一般如果你动手能力比较强的话 那就用Winform+Panl直接自己画一个

微软的报表是要设置数据源的,就是你所说的DataSet,再加载数据的时候你要去更新初始设置的DataSet,当报表有了DataSet后才建立报表框架,这时候你也可以向他传递参数,看一下我写的报表类里面的代码:

//显示报表类
        private void Baobiao(ReportViewer r,string ming,DataSet ds,string lujing)
        {
            //这里处理商标图片
            r.LocalReport.EnableExternalImages = true;
            ReportParameter[] image = new ReportParameter[1];
            string path = "file:///" + @lujing;   //图片地址    
            image[0] = new ReportParameter("商标", path);   //image1必须和报表参数一致
            r.LocalReport.SetParameters(image);
            r.LocalReport.Refresh();
            if (ming == "8RND4RNDQR")      //如果是二维码
            {
                //初始化数据保存二维码
                BarTu();
                //设置参数
                ReportParameter[] rp = new ReportParameter[4];
                rp[0] = new ReportParameter("shangjia", changming);
                rp[1] = new ReportParameter("Tel", rexian);
                rp[2] = new ReportParameter("dizhi", dizhi);
                rp[3] = new ReportParameter("wangzhi", wangzhi);
                r.LocalReport.SetParameters(new ReportParameter[] { rp[0], rp[1], rp[2], rp[3] });
                r.LocalReport.Refresh();
            }
            //这里处理报表
            r.LocalReport.ReportPath = Application.StartupPath + "/" + ming + ".rdlc";
            r.LocalReport.ReportEmbeddedResource = ming + ".rdlc";
            //设置打印布局模式,显示物理页面大小
            r.SetDisplayMode(Microsoft.Reporting.WinForms.DisplayMode.PrintLayout);
            //缩放模式为百分比,以300%方式显示
            r.ZoomMode = Microsoft.Reporting.WinForms.ZoomMode.Percent;
            r.ZoomPercent = 300;
            r.LocalReport.DataSources.Clear();
            r.LocalReport.DataSources.Add(new Microsoft.Reporting.WinForms.ReportDataSource("DBDataSet_下单表", ds.Tables[0]));
            r.RefreshReport();
        }

看到没,前提条件DBDataSet_下单表我是随手建立的,建立好了后,随便你怎么滴,把他删除就行了,FormLoad事件也不要加载,资源里面把数据源一并剔除。

之所以要DataSet是因为控件原因,巨阵工具是要数据源的,才能阶梯性显示

你可以不管他怎么设置dataset,但是如果要更新DATASET方式去更新字段,那表里面字段名要跟新的表字段名最起码要统一,如果不统一也没关系,只是麻烦点,你要传递参数。

设置参数的时候要允许他为空,报表区域要去关联参数

如上图,我是把路径值写在商标字段里,图片Value可以是路径名,加载报表是后就自动加载图片去了。

做好这些设计工作过后,把项目里面已经设计好的报表文件,全部复制到启动目录bin里面,然后用相对路径方法加载他,多余的数据源啊,数据库文件一并可以删除,完全用代码来操作

川水清
2014-03-11
知道答主
回答量:45
采纳率:0%
帮助的人:16.5万
展开全部
水晶报表肯定是绑定DataSet或者DataTable数据缓存,不明白你为何用DataReader。如果一定要用DataReader可以把结果放在一张表里,然后再绑定到水晶报表。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
无所谓的所谓58
2015-04-07 · 超过50用户采纳过TA的回答
知道答主
回答量:150
采纳率:0%
帮助的人:96.1万
展开全部
c#水晶报表用过,感觉操作太复杂,对新手来说有点勉强,现在改用finereport,它操作比较简单,适合新手用的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
T_唐小豆
2014-03-11
知道答主
回答量:38
采纳率:0%
帮助的人:22.9万
展开全部
DataReader 行不行 没研究过, 我都是用Dataset 做的 把表字段 直接拖报表里面 setReportSource 绑定数据集 就可以了!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式