水晶报表使用PUSH绑定DataSet(Oracle)
今天头一次使用水晶报表,按照网上的帖子操作,却总是显示空白页,扑腾了半天,终于显示出来了,特此记录,将来方便查询。
1、首先建立数据库连接:
选择数据源后,输入服务器名,账号密码等信息
连接成功后,就是这个样子了。
2、新建一个数据集架构(XML)
起个帅气的名字后,把要展示的表或视图从“服务器资源管理器”里拖放到XML面板上,保存,OK。
3、建立一个RPT文件,这个就不多写了,建立好后,选择在数据专家中选择ADO.NET并选择上面建立的XML数据集,随便把要显示的字段拖放到报表上。
4、新建要显示报表的页,在ASPX中放置一个CrystalReportViewer。
5、编辑CS文件(重点在这里)
//不会代码高亮,凑合看吧。
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
CrystalDecisions.CrystalReports.Engine.ReportDocument oRpt = new CrystalDecisions.CrystalReports.Engine.ReportDocument();
string RptDir = Server.MapPath("./Report/CrystalReport1.rpt"); //读入RPT模板
oRpt.Load(RptDir);DataSet ds = new DataSet();
//我在这里郁闷了很久,因为使用的是三层结构,直接读取DataSet显示空白
BLL.SuperSQL bll_sql = new BLL.SuperSQL();//下面函数里的表名和后面的要一样,否则不显示数据,不知道为什么,有高人的请帮忙解释一下。
ds = bll_sql.GetList("select * from view_abc t where t.idtype=123", "view_abc");
oRpt.SetDataSource(ds); //设置数据源
CrystalReportViewer1.ReportSource = oRpt;
CrystalReportViewer1.DataBind();
}}
//修改了最底层的数据读取函数,DAL里的GetList调用的就是它
public static DataSet Query(string SQLString,string srctable)
{
using (OracleConnection connection = new OracleConnection(connectionString))
{
DataSet ds = new DataSet();
try
{
connection.Open();
OracleDataAdapter command = new OracleDataAdapter(SQLString, connection);
command.Fill(ds, srctable);
}
catch (System.Data.OracleClient.OracleException ex)
{
throw new Exception(ex.Message);
}
return ds;
}
}