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

VS2008 水晶报表打印慢-求泰哥
项目为C/S模式,报表使用的是水晶报表。打印速度巨慢(第一次加载1分钟)。每次打印的数据量不大(200多条)。开发思路为:将所有要打印的数据,存储在。XSD中,填充数据集文件,通过报表专家将报表文件的数据源指定为。XSD的一个表,我的代码如下
C# code
 ds_jieY myds = new ds_jieY();      //数据集对象。XSD    
            cp_jieY myreport = new cp_jieY();  //报表文件
            //借阅报表数据初始化
            try
            {
                DataRow dr_jyr;
                dr_jyr = myds.Tables["JYR"].NewRow();
                dr_jyr["jieyr"] = jyr;
                dr_jyr["jieyrq"] = rq;
                dr_jyr["yinhsj"] = Convert.ToString(rq.AddDays(Convert.ToInt16(ts)));
                dr_jyr["jieydw"] = dw;
                dr_jyr["jieyyy"] = yy;
                dr_jyr["tel"] = tel;
                myds.Tables["JYR"].Rows.Add(dr_jyr);
                if (list_jiey.Items.Count > 0)
                {
                    string strSql_JY = "";
                    DataRow dr_jyba;
                    string[] str = new string[3];

                    for (int i = 0; i < list_jiey.Items.Count; i++)
                    {
                        str = list_jiey.Items[i].ToString().Split('、');
                        strSql_JY = "select bingabh,chuykb,bingrxm,chuyrq from view_search2 where bingabh='" + str[0] + "'and subhosp=" + subhosp + "";
                        dt_ba = DbHelperSQL.Query(strSql_JY).Tables[0];
                        if (dt_ba.Rows.Count > 0)
                        {
                            dr_jyba = myds.Tables["JYBA"].NewRow();
                            dr_jyba["bingabh"] = dt_ba.Rows[0]["bingabh"].ToString().Trim();
                            dr_jyba["chuykb"] = dt_ba.Rows[0]["chuykb"].ToString();
                            dr_jyba["chuyrq"] = dt_ba.Rows[0]["chuyrq"].ToString();
                            dr_jyba["bingrxm"] = dt_ba.Rows[0]["bingrxm"].ToString();

                            myds.Tables["JYBA"].Rows.Add(dr_jyba);
                        }
                    }

                    list_jiey.Items.Clear();
                    myreport.SetDataSource(myds);
                    crpView_jieY.ReportSource = myreport;//crpView_jieY 为crystalreportviewer 控件
                    crpView_jieY.PrintReport();
                }

                

            }
            catch (Exception ex)
            {
                this.Cursor = Cursors.Default;
                MessageBox.Show("系统错误:" + ex.ToString(), "警告", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return;
            }


个人感觉是控件加载的问题
高手指点一下,是我的代码有问题,还是别的原因。。。跪求高手给出答案

------解决方案--------------------
sf 顶
------解决方案--------------------
200多条数据,对水表来说不是问题,
关键还是得优化你的程序吧。

你这个 if (list_jiey.Items.Count > 0)如果满足
就执行一次检索数据,200多次数据库打开、关闭检索才要命

优化下程序吧

------解决方案--------------------
200条数据算是很少了,你最好在不同的位置上,加一个时间的跟踪。
看下到底慢在哪个环节。
------解决方案--------------------
list_jiey.Items.Count > 0 每次都要执行 确实很费时
------解决方案--------------------
探讨
200条数据算是很少了,你最好在不同的位置上,加一个时间的跟踪。