各位大虾,我在PUSH方式将数据正确显示到了水晶报表中,在将水晶报表导出在服务器上一个目录时,点击一个”导出“按钮,用代码将其导出成EXCEL或WORD时,老是出现烦人的“登录失败!“,我一开始用的是net2003自带的 水晶报表9.1.5,然后,再换成水晶报表10,也是一样问题,在网上找了一下关于”登录失败“的问题,都是谈的PULL方式下水晶报表导出问题,难道没有人能解决PUSH方式下将水晶报表导出时出现“登录失败”嘛?(请不要谈PULL方式)
各位大虾,我在PUSH方式将数据正确显示到了水晶报表中,在将水晶报表导出在服务器上一个目录时,点击一个”导出“按钮,用代码将其导出成EXCEL或WORD时,老是出现烦人的“登录失败!“,我一开始用的是net2003自带的 水晶报表9.1.5,然后,再换成水晶报表10,也是一样问题,在网上找了一下关于”登录失败“的问题,都是谈的PULL方式下水晶报表导出问题,难道没有人能解决PUSH方式下将水晶报表导出时出现“登录失败”嘛?(请不要谈PULL方式)
是不是代码有问题啊?
PUSH 模式设置了 TableLogOnInfo,不需要!
因为数据源是 DataSet,不是数据库!
protected System.Web.UI.WebControls.Button btnExit;
protected System.Web.UI.WebControls.Label Label1;
protected System.Web.UI.WebControls.DropDownList ddlb_dwmc;
protected System.Web.UI.WebControls.Button btnLocate;
private string cn=System.Configuration.ConfigurationSettings.AppSettings.Get("oracleConnection1.ConnectionString");
//根据水晶报表定义一个水晶报表变量
ywDayReport myReport = new ywDayReport();
ExportOptions crExportOptions = new ExportOptions();
DiskFileDestinationOptions crDiskFileDestinationOptions;
//根据数据集定义一个变量
ywreport myReportset = new ywreport(); protected System.Web.UI.WebControls.Button btnShow;
protected System.Web.UI.WebControls.TextBox txbsj1;
protected System.Web.UI.WebControls.TextBox txbsj2;
protected System.Web.UI.WebControls.DropDownList ddlb_type;
protected System.Web.UI.WebControls.Button btnExport;
protected Dundas.Charting.WebControl.Chart Chart1;
protected CrystalDecisions.Web.CrystalReportViewer CrystalReportViewer1;
protected System.Web.UI.WebControls.Button btnfxt;
private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
if(((clsUser)Session["objUser"])==null)
{
Page.RegisterStartupScript("alert", "<script language=javascript>alert('登陆超时,请重新登陆!'); window.parent.location='../Login.aspx';</script>");
return;
} if(!IsPostBack)
{
//填充单位名称
string s_sql = " select dwbm_bm,dwbm_mc from user_dwbm where dqbh ='" +((clsUser)Session["objUser"]).Dqbh +"' and user_name='"+((clsUser)Session["objUser"]).UserName+"' order by dwbm_bm ";
OracleDataAdapter myAdapter=new OracleDataAdapter(s_sql,cn);
DataSet mySet=new DataSet();
myAdapter.Fill(mySet); ddlb_dwmc.DataTextField ="dwbm_mc";
ddlb_dwmc.DataValueField ="dwbm_bm"; ddlb_dwmc.DataSource = mySet;
ddlb_dwmc.DataBind(); ddlb_dwmc.Items.Insert(0,"==请选择支局==");
ddlb_dwmc.Items[0].Value="";
myAdapter.Dispose();
mySet.Dispose();
//用当前日期来填充txbsj1 txbsj2
string du_year = DateTime.Today.Year.ToString().Trim();
string du_month =DateTime.Today.Month.ToString().Trim();
string du_day = DateTime.Today.Day.ToString().Trim(); if(du_month.Length ==1)
du_month ="0" +du_month;
if(du_day.Length==1)
du_day ="0"+ du_day; this.txbsj1.Text = du_year+"-"+du_month +"-"+du_day;
this.txbsj2.Text = du_year+"-"+du_month +"-"+du_day; this.ddlb_type.Items.Insert(0,"==请选择导出格式==");
this.ddlb_type.Items[0].Value=""; this.ddlb_type.Items.Insert(1,"Rich Text格式 (RTF)");
this.ddlb_type.Items[1].Value="Rich Text格式 (RTF)";
this.ddlb_type.Items.Insert(1,"Portable Document格式 (PDF)");
this.ddlb_type.Items[1].Value="Portable Document格式 (PDF)";
this.ddlb_type.Items.Insert(2,"MS Word文档 (DOC)");
this.ddlb_type.Items[2].Value="MS Word文档 (DOC)"; this.ddlb_type.Items.Insert(3,"MS Excel电子表格 (XLS)");
this.ddlb_type.Items[3].Value="MS Excel电子表格 (XLS)"; this.ddlb_type.Items.Insert(4,"Crystal Report水晶报表 (RPT)");
this.ddlb_type.Items[4].Value="Crystal Report水晶报表 (RPT)"; this.ddlb_type.Items.Insert(5,"HTML 4.0网页 (HTML)");
this.ddlb_type.Items[5].Value="HTML 4.0网页 (HTML)";
}
"' and yw_month='" +du_month +"' and yw_day='"+du_day +"' and dqbh ='" +((clsUser)Session["objUser"]).Dqbh +"' and clrid='" + ((clsUser)Session["objUser"]).UserId +"' order by xh"; OracleDataAdapter myAdapter = new OracleDataAdapter(s_sql,myConnection);
DataSet mySet = new DataSet();
myAdapter.Fill(mySet); int i =0,j =0;
int fang_rows =0,fang_cols =0;
fang_rows = mySet.Tables[0].Rows.Count;
fang_cols = mySet.Tables[0].Columns.Count;
DataRow myRow = myReportset.Tables["ywdayreport"].NewRow();
for(i=0;i<fang_rows;i++)
{
for(j=0;j<fang_cols;j++)
{
myRow[j] = mySet.Tables[0].Rows[i][j];
} myReportset.Tables["ywdayreport"].Rows.Add(myRow);
myRow = myReportset.Tables["ywdayreport"].NewRow(); } //在这里应注意的是myReport.SetDataSource(fangset)用来填充水晶报表变量的DataSet中只能有一个数据表
//否则就会出现“登录失败!!!”很难查出是什么原因!!!!!
//
DataTable mytable = myReportset.Tables["ywdayreport"];
myReportset.Tables.Clear();
DataSet fangset = new DataSet();
fangset.Tables.Add(mytable);
myReport.SetDataSource(fangset);
CrystalReportViewer1.ReportSource=myReport;//设置报表数据源
myAdapter.Dispose();
myConnection.Dispose();
myCommand.Dispose(); this.btnShow.Enabled = true;
} private void ExportReport(string fang_bz)
{
string ExportPath;
ExportPath = Request.PhysicalApplicationPath + "Exported\\";
if (Directory.Exists(ExportPath) == false) Directory.CreateDirectory(Request.PhysicalApplicationPath + "Exported\\"); crDiskFileDestinationOptions = new DiskFileDestinationOptions();
//crExportOptions = myReport.ExportOptions;
// crExportOptions = myReport.ReportOptions;
crDiskFileDestinationOptions.DiskFileName = ExportPath + "Excel.xls"; //set the required report ExportOptions properties
crExportOptions.ExportDestinationType = ExportDestinationType.DiskFile;
crExportOptions.ExportFormatType = ExportFormatType.Excel;
crExportOptions.DestinationOptions = crDiskFileDestinationOptions; try
{
myReport.Export();
}
catch (Exception err)
{
Response.Write("<BR>");
Response.Write("<script language ='javascript'>"); string fang_err = "alert('导出失败-- " + err.Message.ToString().Trim() +"')"; Response.Write(fang_err);
Response.Write("</script>"); Response.Write(err.Message.ToString());
}
} private void btnExport_Click(object sender, System.EventArgs e)
{
if( this.ddlb_type.SelectedItem.Text=="==请选择导出格式==" )
{
Page.RegisterStartupScript("alert", "<script language=javascript>alert('请选择导出格式!');</script>");
return;
}
//fang_bz在这里作年+月+部门
string fang_bz = ((clsUser)Session["objUser"]).UserId+"-"+((clsUser)Session["objUser"]).Dqbh+"-";
// string fang_bz ="部门预算分析表一";
ExportReport(fang_bz);
原因 因为数据结构不一至
例如 :
law ds=new law();//law为数据集
this.conn.Open();
SqlDataAdapter da=new SqlDataAdapter("select * from bbb",conn);//bbb是我故意写错的,原本应该
连接LAW表,现在连接BBB表
da.Fill(ds,"lawa");//(lawa)是一个element)--》到这就出错了,以为所读取的数据结构跟要填充的
表结构不一至。
当然如果你读取的数据(表读对了),依然出现这个问题那就是你的数据库中的表结构跟你XSD的element
不相同,所以也会出错
2未处理的“CrystalDecisions.CrystalReports.Engine.LoadSaveReportException”类型的异常出现在 crystaldecisions.crystalreports.engine.dll 中。其他信息: 加载报表失败。
原因 提示的很清楚没有加载报表
例如
如果是在C/S模式下用
repDoc.Load(Request.PhysicalApplicationPath+"\\"+"lawshow.rpt");//B/S调用方法当然出错
一般是到repDoc.Refresh();就报错
改为
repDoc.Load(Application.StartupPath +"\\"+"lawshow.rpt");就没有问题了
当然还有一个问题就是C/S模式的输入路径问题
C/S默认输出路径是bin/下而Application.StartupPath是访问程序的根目录,当然找不到报表
也就会出错拉
Dim conn As New OleDb.OleDbConnection()
Dim cmd As New OleDb.OleDbCommand()
Dim da As New OleDb.OleDbDataAdapter()
Dim ds As New Data.DataSet() conn.ConnectionString = Application("conn_string") '连接字符串
cmd.Connection = conn
cmd.CommandText = "select * from test"
da.SelectCommand = cmd
conn.Open()
da.Fill(ds, "rpt_data")
conn.Close()
conn = Nothing rpt.SetDataSource(ds.Tables("rpt_data"))
Me.CrystalReportViewer1.ReportSource = rpt
Dim filePath As String filePath = Server.MapPath(Request.ApplicationPath) & "\reports\sd_yxdc.doc"
diskOpts.DiskFileName = filePath
rpt.ExportOptions.ExportFormatType = ExportFormatType.WordForWindows
rpt.ExportOptions.ExportDestinationType = ExportDestinationType.DiskFile
rpt.ExportOptions.DestinationOptions = diskOpts
rpt.Export()
Dim js As String
js = "<script language=javascript>window.open('sd_yxdc.doc','report','dependent=1,menubar=1,scrollbars=1,toolbar=1,status=1,titlebar=1,resizable=1')</script>"
Page.RegisterStartupScript("key1", js)