关于水晶报表的问题问题如下:数据库为sql server 2005, 主报表内包含一个子报表,程序运行后,出现如下图:我用的是SQL 身份验证,其他报表也是,为什么偏偏打印这个报表出现数据库登录界面??搞不懂”每次打印都加以验证“我也取消了呀

解决方案 »

  1.   


      /// <summary>
            /// 为报表保存数据库帐号信息
            /// (解决每次运行出现登录数据库窗体问题)
            /// </summary>
            /// <param name="report">报表对象</param>
            public static void SavePass(ReportDocument report)
            {
                TableLogOnInfo logOnInfo = new TableLogOnInfo();
                for (int i = 0; i <= report.Database.Tables.Count - 1; i++)
                {
                    logOnInfo.ConnectionInfo.UserID = SubStr(strConn, "user id=", ";");
                    logOnInfo.ConnectionInfo.Password = SubStr(strConn, "password=", "");
                    report.Database.Tables[i].ApplyLogOnInfo(logOnInfo);
                }
            }
    //----------------------------------
    //调用
    xxxxReport rpt= new xxxxReport();
    rpt.SetDataSource(ds);
    SavePass(rpt);
      

  2.   

    /// <summary>
            /// 为报表保存数据库帐号信息
            /// (解决每次运行出现登录数据库窗体问题)
            /// </summary>
            /// <param name="report">报表对象</param>
            public static void SavePass(ReportDocument report)
            {
                TableLogOnInfo logOnInfo = new TableLogOnInfo();
                for (int i = 0; i <= report.Database.Tables.Count - 1; i++)
                {
                    logOnInfo.ConnectionInfo.UserID = SubStr(strConn, "user id=", ";");
                    logOnInfo.ConnectionInfo.Password = SubStr(strConn, "password=", "");
                    report.Database.Tables[i].ApplyLogOnInfo(logOnInfo);
                }
            }
    //----------------------------------
    //调用
    xxxxReport rpt= new xxxxReport();
    rpt.SetDataSource(ds);
    SavePass(rpt);
      

  3.   

    应该是你的主报表和子报表使用一个dataset ,而不是2个。如果是多个ds的话会出现这样的问题。你可以看看。
      

  4.   

    strConn 为数据库连接字符串
    如  Provider=SQLOLEDB;Data Source=.\\SQLEXPRESS;initial catalog=doc;user id=sa;password=sa
    上面的SubStr()
    是这个方法/// <summary>
            /// 截取指定的字符串
            /// </summary>
            /// <param name="str">要截取的字符串</param>
            /// <param name="start">起始字符</param>
            /// <param name="last">结束字符</param>
            /// <returns></returns>
            public static string SubStr(string str, string start, string last)
            {            if (last == "")
                {
                    str = str.Substring(str.ToLower().LastIndexOf(start.ToLower()) + start.Length, str.Length - str.ToLower().LastIndexOf(start.ToLower()) - start.Length);
                }
                else
                {
                    str = str.Substring(str.ToLower().LastIndexOf(start.ToLower()) + start.Length, str.Length - str.ToLower().LastIndexOf(start.ToLower()) - start.Length);
                    str = str.Substring(0, str.ToLower().LastIndexOf(last.ToLower()));
                }
                return str;
            }