我讲一下我的设计过程:
一.建立数据集 revert.xsd
从“服务器资源管理器”中的“SQL Server”中拖放了二张表:GB_LeaveWord,GB_Revert到数据集中此时在数据集中就会有两个表的结构图。 我将GB_LeaveWord.id与GB_Revert.titleid进行了关联二.创建 .rpt 文件 revert.rpt 在里面也选了跟数据集一样的两张表GB_LeaveWord,GB_Revert,在其中选取几个数据字段,三.创建了报表网页:printpdf.aspx在printpdf.aspx上加入CrystalReportViewer,命名为CRV_revert在printpdf.aspx.cs加入如下代码:
private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
string str_Filename=Request.QueryString["id"].ToString();
PrintPdf(str_Filename);
}
public void PrintPdf(string filename1)
{
SqlConnection myConnection = new SqlConnection(ConfigurationSettings.AppSettings["SQLServerConnectionString"]);
string comstr="select GB_LeaveWord.ID,GB_Revert.titleID,GB_LeaveWord.title,GB_LeaveWord.content,GB_LeaveWord.solveContent,GB_Revert.content from GB_LeaveWord,GB_Revert where GB_LeaveWord.ID=GB_Revert.titleID and GB_LeaveWord.ID='"+filename1+"'";
SqlDataAdapter da=new SqlDataAdapter(comstr,myConnection);
DataSet ds=new DataSet();
myConnection.Open();
da.Fill(ds,"revert");
ReportDocument repDoc= new ReportDocument();
string reportPath = ConfigurationSettings.AppSettings["ReportPath"].ToString();
reportPath +="\\revert.rpt";
repDoc.Load(reportPath);
repDoc.SetDataSource(ds);
this.CRV_revert.ReportSource = repDoc;
CRV_revert.DataBind();
}
执行代码出现以下错误异常详细信息: CrystalDecisions.CrystalReports.Engine.LogOnException: 登录失败有高手请给个详细解决方案,这个异常我在Google和百度都搜过有个有号称:
彻底解决 CrystalReports 登录失败问题
http://dev.csdn.net/article/22/22017.shtm本人搞不懂,能给我个简单的处理方法吗,如能解决,分数再加
一.建立数据集 revert.xsd
从“服务器资源管理器”中的“SQL Server”中拖放了二张表:GB_LeaveWord,GB_Revert到数据集中此时在数据集中就会有两个表的结构图。 我将GB_LeaveWord.id与GB_Revert.titleid进行了关联二.创建 .rpt 文件 revert.rpt 在里面也选了跟数据集一样的两张表GB_LeaveWord,GB_Revert,在其中选取几个数据字段,三.创建了报表网页:printpdf.aspx在printpdf.aspx上加入CrystalReportViewer,命名为CRV_revert在printpdf.aspx.cs加入如下代码:
private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
string str_Filename=Request.QueryString["id"].ToString();
PrintPdf(str_Filename);
}
public void PrintPdf(string filename1)
{
SqlConnection myConnection = new SqlConnection(ConfigurationSettings.AppSettings["SQLServerConnectionString"]);
string comstr="select GB_LeaveWord.ID,GB_Revert.titleID,GB_LeaveWord.title,GB_LeaveWord.content,GB_LeaveWord.solveContent,GB_Revert.content from GB_LeaveWord,GB_Revert where GB_LeaveWord.ID=GB_Revert.titleID and GB_LeaveWord.ID='"+filename1+"'";
SqlDataAdapter da=new SqlDataAdapter(comstr,myConnection);
DataSet ds=new DataSet();
myConnection.Open();
da.Fill(ds,"revert");
ReportDocument repDoc= new ReportDocument();
string reportPath = ConfigurationSettings.AppSettings["ReportPath"].ToString();
reportPath +="\\revert.rpt";
repDoc.Load(reportPath);
repDoc.SetDataSource(ds);
this.CRV_revert.ReportSource = repDoc;
CRV_revert.DataBind();
}
执行代码出现以下错误异常详细信息: CrystalDecisions.CrystalReports.Engine.LogOnException: 登录失败有高手请给个详细解决方案,这个异常我在Google和百度都搜过有个有号称:
彻底解决 CrystalReports 登录失败问题
http://dev.csdn.net/article/22/22017.shtm本人搞不懂,能给我个简单的处理方法吗,如能解决,分数再加
TableLogOnInfo logon = new TableLogOnInfo();
logon.ConnectionInfo.ServerName = "Localhost";
logon.ConnectionInfo.DatabaseName = "CRTestCenter";
logon.ConnectionInfo.UserID = "sa";
logon.ConnectionInfo.Password = "xxx";
ReportDocument rd = new ReportDocument();
string getCr = Server.MapPath("CrystalReport1.rpt");
rd.Load(getCr);
rd.Database.Tables[0].ApplyLogOnInfo(logon);
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: CrystalDecisions.CrystalReports.Engine.DataSourceException: 查询引擎错误:“F:\yexin\GuestBook\Report\ReportFile\revert.rpt”
那数据源要选“更多数据源”-->ADO.NET(XML),然后选择你刚才新建的xsd文件,然后再选择表你那种重数据库中拖表的是在拉模式中用的.查询引擎错误的解决:1.根据报表的结构字段,建立一个xsd文件,用来存放数据。2.新建一个报表,注意建立的时候要浏览到该xsd文件, 建好后找到该报表的属性"自定义工具",把原来的 "CrystalDecisions.VSDesigner.CodeGen.ReportCodeGenerator" 改为"CrystalDecisions.VSShell.CodeGen.ReportCodeGenerator" 这样就会产生一个按照你报表名命名的zsmxb.cs文件,其实就是下面的类zsmxb 同时建立一个页面,把CrystalReportViewer控件放到页面, 并且要在该页面文件的顶部申明一下报表的类, public class Fr_zsmxb : System.Windows.Forms.Form
{
zsmxb crReportDocument; .........3.建立报表结构 DataSet dss=new DataSet();
DataTable dt=new DataTable("zsmxb");
dt.Columns.Add("cchbh",System.Type.GetType("System.String"));
dt.Columns.Add("nglf",System.Type.GetType("System.Decimal"));
dt.Columns.Add("ncf",System.Type.GetType("System.Decimal"));
dt.Columns.Add("nqyf",System.Type.GetType("System.Decimal"));
dt.Columns.Add("nzsf",System.Type.GetType("System.Decimal"));
dt.Columns.Add("ntcf",System.Type.GetType("System.Decimal"));
dt.Columns.Add("ngz",System.Type.GetType("System.Decimal"));
dt.Columns.Add("nzjf",System.Type.GetType("System.Decimal"));
dt.Columns.Add("nylf",System.Type.GetType("System.Decimal"));
dt.Columns.Add("nwxf",System.Type.GetType("System.Decimal"));
dt.Columns.Add("nsy",System.Type.GetType("System.Decimal"));
dt.Columns.Add("nqtf",System.Type.GetType("System.Decimal"));
dt.Columns.Add("nxj",System.Type.GetType("System.Decimal"));
dss.Tables.Add(dt); 注意:这里的DataTable dt=new DataTable("zsmxb");这句中表名"zsmxb"要和你的xsd文件中的表名要一样, 同时,dt的字段名、类型,都要和xsd文件一样,否则回产生"查询引擎错误"。4.为这个ds传入数据 for(int i=0;i<this.ds.Tables["zsmxb"].Rows.Count;i++)
{
DataRow dr=dt.NewRow();
dr["cchbh"]=this.ds.Tables["zsmxb"].Rows[i]["cchbh"];
dr["nglf"]=this.ds.Tables["zsmxb"].Rows[i]["nglf"];
dr["ncf"]=this.ds.Tables["zsmxb"].Rows[i]["ncf"];
dr["nqyf"]=this.ds.Tables["zsmxb"].Rows[i]["nqyf"];
dr["nzsf"]=this.ds.Tables["zsmxb"].Rows[i]["nzsf"];
dr["ntcf"]=this.ds.Tables["zsmxb"].Rows[i]["ntcf"];
dr["ngz"]=this.ds.Tables["zsmxb"].Rows[i]["ngz"];
dr["nzjf"]=this.ds.Tables["zsmxb"].Rows[i]["nzjf"];
dr["nylf"]=0;
dr["nwxf"]=0;
dr["nsy"]=0;
dr["nqtf"]=this.ds.Tables["zsmxb"].Rows[i]["nqtf"];
dr["nxj"]=System.Convert.ToDecimal(dr["nglf"].ToString())+System.Convert.ToDecimal(dr["ncf"].ToString(); dt.Rows.Add(dr);
} 这里的ds是同过查询得到的,这里只是举个例子。5.把得到的报表数据源dss绑定到水晶报表。 crReportDocument=new zsmxb();
crReportDocument.SetDataSource(dss);
crystalReportViewer1.ReportSource = crReportDocument;
------------
问题出在这里,应该用表而不是数据集作为参数。
repDoc.SetDataSource(ds.Tables["revert"]);
当我读取一条数据时,PDF格式打不开,要通过刷新才能看到数据,
当我读取数据库里全部数据时,PDF就可以打开,不用刷新,哪位老鸟知道这个问题解决一下!
{ if(!IsPostBack)
{
Printpdf("7");
}
}private void Page_Load(object sender, System.EventArgs e)
{ Printpdf("7");
}
这两种方式都不能好好的显示
请高手指教!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!11