我一个水晶报表,里面一个子报表,主报表和子报表数据源和显示的自动不同,子报表在主报表的页脚,但是发现运行的时候子报表翻页不管用。怎么回事啊?帮忙看看吧。using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using BLL;
using DAL;
using CrystalDecisions.Shared;
using CrystalDecisions.CrystalReports;
using CrystalDecisions.ReportSource;
using CrystalDecisions.CrystalReports.Engine;
using CrystalDecisions;public partial class ARBIS_Report : System.Web.UI.Page
{
ReportDocument oRpt = new ReportDocument();
ReportDocument subReport = new ReportDocument();
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsCallback)
{
if (Session["Test"] != null && Session["Detail"] != null)
{
oRpt.Load(Server.MapPath("~/Report/CR_1.rpt"));
oRpt.SetDataSource(Session["Test"]);
subReport = oRpt.Subreports["CR_Detail.rpt"];
subReport.SetDataSource(Session["Detail"]);
//将报表和报表浏览控件绑定
CrystalReportViewer1.ReportSource = oRpt;
CrystalReportViewer1.DataBind();
} }
if (!Page.IsPostBack)
{ InitData(); }
}
public void InitData()
{
BLL.ARBIS abs=new BLL.ARBIS();
DataTable dt = BLL.ARBIS.getLocation(new Hashtable());
DDL_Location.Items.Clear();
foreach (DataRow dr in dt.Rows)
{
DDL_Location.Items.Add(new ListItem(dr["Location"].ToString(), dr["Location"].ToString()));
}
}
private void ConfigueRpt()
{
CrystalDecisions.CrystalReports.Engine.Database crDatabase;
CrystalDecisions.CrystalReports.Engine.Table crTable;
TableLogOnInfo dbConn = new TableLogOnInfo(); oRpt.Load(Server.MapPath("~/Report/CR_1.rpt"));
crDatabase = oRpt.Database;
//定义一个arrtables对象数组
object[] arrTables = new object[1];
crDatabase.Tables.CopyTo(arrTables, 0);
crTable = (CrystalDecisions.CrystalReports.Engine.Table)arrTables[0];
dbConn = crTable.LogOnInfo; //设置相关的登陆数据库的信息
dbConn.ConnectionInfo.DatabaseName = "Billing";
dbConn.ConnectionInfo.ServerName = "127.0.0.1";
dbConn.ConnectionInfo.UserID = "sa";
dbConn.ConnectionInfo.Password = ""; //将登陆的信息应用于crtable表对象
crTable.ApplyLogOnInfo(dbConn); //填充数据
dbop da = new DAL.dbop();
string sql = "select BYear,BMonth, Location,ActivityType ,SUM(Amount) as SubTotal ," +
"ActivityText from table1 where Location='" + DDL_Location.SelectedItem.Value + "'" +
"GROUP By ActivityType,ActivityText,Location,BYear,BMonth"; string sql2 = "select BYear,BMonth, Location,Costcenter,Owner,ActivityType,ActivityText,Amount as SubTotal ," +
"ServiceProvider,Quantity,TicketNo,Requirement,Solution,Department,Price from table1 where Location='" + DDL_Location.SelectedItem.Value + "'"; DataTable AdvisoryData = da.GetDataTable(sql);
DataTable AdvisoryData2=da.GetDataTable(sql2);
Session.Add("Test", AdvisoryData);
Session.Add("Detail",AdvisoryData2);
oRpt.SetDataSource(Session["Test"]);
subReport = oRpt.Subreports["CR_Detail.rpt"];
subReport.SetDataSource(Session["Detail"]);
//oRpt.SetDataSource(AdvisoryData);
//将报表和报表浏览控件绑定
CrystalReportViewer1.ReportSource = oRpt;
CrystalReportViewer1.DataBind();
//传递参数
//setReportParameters(); }
protected void Button1_Click(object sender, EventArgs e)
{
ConfigueRpt();
}
private void Page_Unload(object sender, EventArgs e)
{
oRpt.Dispose();
}
}
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using BLL;
using DAL;
using CrystalDecisions.Shared;
using CrystalDecisions.CrystalReports;
using CrystalDecisions.ReportSource;
using CrystalDecisions.CrystalReports.Engine;
using CrystalDecisions;public partial class ARBIS_Report : System.Web.UI.Page
{
ReportDocument oRpt = new ReportDocument();
ReportDocument subReport = new ReportDocument();
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsCallback)
{
if (Session["Test"] != null && Session["Detail"] != null)
{
oRpt.Load(Server.MapPath("~/Report/CR_1.rpt"));
oRpt.SetDataSource(Session["Test"]);
subReport = oRpt.Subreports["CR_Detail.rpt"];
subReport.SetDataSource(Session["Detail"]);
//将报表和报表浏览控件绑定
CrystalReportViewer1.ReportSource = oRpt;
CrystalReportViewer1.DataBind();
} }
if (!Page.IsPostBack)
{ InitData(); }
}
public void InitData()
{
BLL.ARBIS abs=new BLL.ARBIS();
DataTable dt = BLL.ARBIS.getLocation(new Hashtable());
DDL_Location.Items.Clear();
foreach (DataRow dr in dt.Rows)
{
DDL_Location.Items.Add(new ListItem(dr["Location"].ToString(), dr["Location"].ToString()));
}
}
private void ConfigueRpt()
{
CrystalDecisions.CrystalReports.Engine.Database crDatabase;
CrystalDecisions.CrystalReports.Engine.Table crTable;
TableLogOnInfo dbConn = new TableLogOnInfo(); oRpt.Load(Server.MapPath("~/Report/CR_1.rpt"));
crDatabase = oRpt.Database;
//定义一个arrtables对象数组
object[] arrTables = new object[1];
crDatabase.Tables.CopyTo(arrTables, 0);
crTable = (CrystalDecisions.CrystalReports.Engine.Table)arrTables[0];
dbConn = crTable.LogOnInfo; //设置相关的登陆数据库的信息
dbConn.ConnectionInfo.DatabaseName = "Billing";
dbConn.ConnectionInfo.ServerName = "127.0.0.1";
dbConn.ConnectionInfo.UserID = "sa";
dbConn.ConnectionInfo.Password = ""; //将登陆的信息应用于crtable表对象
crTable.ApplyLogOnInfo(dbConn); //填充数据
dbop da = new DAL.dbop();
string sql = "select BYear,BMonth, Location,ActivityType ,SUM(Amount) as SubTotal ," +
"ActivityText from table1 where Location='" + DDL_Location.SelectedItem.Value + "'" +
"GROUP By ActivityType,ActivityText,Location,BYear,BMonth"; string sql2 = "select BYear,BMonth, Location,Costcenter,Owner,ActivityType,ActivityText,Amount as SubTotal ," +
"ServiceProvider,Quantity,TicketNo,Requirement,Solution,Department,Price from table1 where Location='" + DDL_Location.SelectedItem.Value + "'"; DataTable AdvisoryData = da.GetDataTable(sql);
DataTable AdvisoryData2=da.GetDataTable(sql2);
Session.Add("Test", AdvisoryData);
Session.Add("Detail",AdvisoryData2);
oRpt.SetDataSource(Session["Test"]);
subReport = oRpt.Subreports["CR_Detail.rpt"];
subReport.SetDataSource(Session["Detail"]);
//oRpt.SetDataSource(AdvisoryData);
//将报表和报表浏览控件绑定
CrystalReportViewer1.ReportSource = oRpt;
CrystalReportViewer1.DataBind();
//传递参数
//setReportParameters(); }
protected void Button1_Click(object sender, EventArgs e)
{
ConfigueRpt();
}
private void Page_Unload(object sender, EventArgs e)
{
oRpt.Dispose();
}
}
我用的是VS.Net自带的水晶报表
就是放在外边
if (!IsPostBack)
{}
private void ConfigueRpt()这个事件里的
//将报表和报表浏览控件绑定
CrystalReportViewer1.ReportSource = oRpt;
CrystalReportViewer1.DataBind();
Session["myRpt"]=oRpt;增加一个
Page_init事件
代码如下if (Session["myRpt"]!=null)
{
CrystalReportViewer1.ReportSource = (ReportDocument)Session["myRpt"];
{
ReportDocument oRpt = new ReportDocument();
ReportDocument subReport = new ReportDocument();
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{ InitData(); }
}
public void InitData()
{
if (!Page.IsCallback)
{
if (Session["Test"] != null && Session["Detail"] != null)
{
oRpt.Load(Server.MapPath("~/Report/CR_1.rpt"));
oRpt.SetDataSource(Session["Test"]);
subReport = oRpt.Subreports["CR_Detail.rpt"];
subReport.SetDataSource(Session["Detail"]);
CrystalReportViewer1.ReportSource = oRpt;
CrystalReportViewer1.DataBind();
} }
BLL.ARBIS abs=new BLL.ARBIS();
DataTable dt = BLL.ARBIS.getLocation(new Hashtable());
DDL_Location.Items.Clear();
foreach (DataRow dr in dt.Rows)
{
DDL_Location.Items.Add(new ListItem(dr["Location"].ToString(), dr["Location"].ToString()));
}
if (Session["myRpt"] != null)
{
CrystalReportViewer1.ReportSource = (ReportDocument)Session["myRpt"];
}
}
private void ConfigueRpt()
{ CrystalDecisions.CrystalReports.Engine.Database crDatabase;
CrystalDecisions.CrystalReports.Engine.Table crTable;
TableLogOnInfo dbConn = new TableLogOnInfo(); oRpt.Load(Server.MapPath("~/Report/CR_1.rpt")); crDatabase = oRpt.Database;
//定义一个arrtables对象数组
object[] arrTables = new object[1];
crDatabase.Tables.CopyTo(arrTables, 0);
crTable = (CrystalDecisions.CrystalReports.Engine.Table)arrTables[0];
dbConn = crTable.LogOnInfo;
dbConn.ConnectionInfo.DatabaseName = "Billing";
dbConn.ConnectionInfo.ServerName = "127.0.0.1";
dbConn.ConnectionInfo.UserID = "sa";
dbConn.ConnectionInfo.Password = ""; crTable.ApplyLogOnInfo(dbConn); dbop da = new DAL.dbop();
string sql = "select BYear,BMonth, Location,ActivityType ,SUM(Amount) as SubTotal ," +
"ActivityText from View where Location='" + DDL_Location.SelectedItem.Value + "'" +
"GROUP By ActivityType,ActivityText,Location,BYear,BMonth"; string sql2 = "select BYear,BMonth, Location,Costcenter,Owner,ActivityType,ActivityText,Amount as SubTotal ," +
"ServiceProvider,Quantity,TicketNo,Requirement,Solution,Department,Price from View where Location='" + DDL_Location.SelectedItem.Value + "'"; DataTable AdvisoryData = da.GetDataTable(sql);
DataTable AdvisoryData2=da.GetDataTable(sql2); Session.Add("Test", AdvisoryData);
Session.Add("Detail", AdvisoryData2); oRpt.SetDataSource(Session["Test"]);
subReport = oRpt.Subreports["CR_Detail.rpt"];
subReport.SetDataSource(Session["Detail"]);
oRpt.SetDataSource(AdvisoryData);
//将报表和报表浏览控件绑定
Session["myRpt"] = oRpt;
CrystalReportViewer1.ReportSource = oRpt;
CrystalReportViewer1.DataBind();
}
protected void Button1_Click(object sender, EventArgs e)
{
ConfigueRpt();
}
private void Page_Unload(object sender, EventArgs e)
{
oRpt.Dispose();
}
}
if (Session["Test"] != null && Session["Detail"] != null)
{
oRpt.Load(Server.MapPath("~/Report/CR_1.rpt"));
oRpt.SetDataSource(Session["Test"]);
subReport = oRpt.Subreports["CR_Detail.rpt"];
subReport.SetDataSource(Session["Detail"]);
CrystalReportViewer1.ReportSource = oRpt;
CrystalReportViewer1.DataBind();
} } if (Session["myRpt"] != null)
{
CrystalReportViewer1.ReportSource = (ReportDocument)Session["myRpt"];
}这一段应该是放在 public void page_init(object sender, EventArgs e)里面的,这样,运行出错了,
是这段: CrystalReportViewer1.ReportSource =(ReportDocument)Session["myRpt"];
错误是:”object reference not set to an instance of an object“
这句话是不是有点问题啊?怎么报错啊?救命啊
你的代码思路是比较乱的(ConfigueRpt里面)
你的模板是怎么做的呢?用了xsd还是直连了数据库?
代码又是参考哪里来的呢?呵呵
代码是网上混乱参考过来的,都不记得出自哪里了。。我就是一张水晶报表里有一个子报表,但是子报表和主报表的来源又不同。
http://topic.csdn.net/u/20081118/10/49a1751d-1d86-44e4-969f-a847c2316dd3.html
这里面的一个视频操作,应该会有收获的。
可能是我没表示清楚吧。