在以前 VS2003 中可以采用 PUSH 模式推报表,可以用如下的代码实现:
con = new SqlConnection(Session["SQLCONNECTION"].ToString());
strSql = "SELECT * FROM htOrder";
scm = new SqlCommand(strSql, con);
sda = new SqlDataAdapter(scm);
ds = new DataSet();
sda.Fill(ds, " order ");
rptOrder.SetDataSource(ds.Tables["order"]);
crOrder.ReportSource = rptOrder; 
//
绑定报表数据
private
void
BindCrystalReports()
{
string path1 = Server.MapPath("~//Report//");
string path2 = path1 + "repOrder.rpt";
ReportDocument repDoc = new ReportDocument();
repDoc.Load(path2);
SetDBLogonForReport(repDoc); //设置数据登录信息
crOrder.ReportSource = repDoc;
string selectionFormula = "{htOrder.htID} =" + txtHtID.Text.Trim();//设置报表数据筛选公式
repDoc.DataDefinition.RecordSelectionFormula = selectFormula;
crOrder. DataBind ();
}
//
设置登录信息
private
void
SetDBLogonForReport(ReportDocument reportDocument)
{
try
{
ConnectionInfo connectionInfo = new ConnectionInfo();
connectionInfo.ServerName = ConfigurationManager.AppSettings["ServerName"];
connectionInfo.DatabaseName = ConfigurationManager.AppSettings["DatabaseName"];
connectionInfo.UserID = ConfigurationManager.AppSettings["UserID"];
connectionInfo.Password = ConfigurationManager.AppSettings["Password"];
Tables tables = reportDocument.Database.Tables;
foreach (CrystalDecisions.CrystalReports.Engine.Table table in tables)
{
TableLogOnInfo tableLogonInfo = table.LogOnInfo;
tableLogonInfo.ConnectionInfo = connectionInfo;
table.ApplyLogOnInfo(tableLogonInfo);
}
}
catch
{
lblNote.Text = "<script>alert('数据库登录信息不正确!');</script>";
}
}
1. 建立水晶报表,注意报表要用OLE DB ADO方式连接数据源,这样可以省去报表登录窗口的弹出。
2. 在设计视图中拖拉报表控件CrystalReportViewer,点击右上角智能标签设置报表数据源,选择报表文件,自动生成CrystalReportSource,这时在设计视图中将显示出报表界面,水晶报表将自动用初始数据填充报表字段。注意这里有个小Bug,如果报表在子目录中,选择报表文件将自动用相对路径表示,这时报表显示会出错,应改成绝对路径才可以。
<Report FileName="report/rptOrder.rpt">这里应改成:<Report FileName="../report/rptOrder.rpt">
3.拖拉一个数据源控件SqlDataSource(也可以用ObjectDataSource),按向导生成数据源,这里可以筛选数据,根据情况选择各类数据源。
4.如何将CrystalReportSource与SqlDataSource两个控件连接在一起呢?可以这样:选择CrystalReportSource控件点击右侧属性中数据栏,再点击Report选择DataSource,在这个数据源集合编辑器选择数据源指定报表名称即可。(下面的Parameters是用来选择报表参数用的)
经过这几个步骤,就可以运行程序显示报表啦,怎么样不用写一句代码吧?
具体代码可参考如下:
<
CR:CrystalReportViewer
ID
="crOrder"
runat
="server"
AutoDataBind
="True"
ReportSourceID
="ReportSourceOrder"
BestFitPage
="False"
DisplayToolbar
="False"
DisplayGroupTree
="False"
Height
="1042px"
Width
="775px"
EnableParameterPrompt
="False"
/>
<
CR:CrystalReportSource
ID
="ReportSourceOrder"
runat
="server"
>
<
Report
FileName
="../report/rptOrder.rpt"
>
<
DataSources
>
<
CR:DataSourceRef
DataSourceID
="SqlDataSourceOrder"
TableName
="htOrder"
/>
</
DataSources
>
</
Report
>
</
CR:CrystalReportSource
>
<
asp:SqlDataSource
ID
="SqlDataSourceOrder"
runat
="server"
ConnectionString
="<%$ ConnectionStrings:cc_2005 %>"
SelectCommand
="SELECT * FROM [htOrder] "
></
asp:SqlDataSource
>
在 VS2005 中不再支持“ embedded report ”嵌入式报表, 只能采用非嵌入式报表的方法拉数据,下面是典型的代码:
这种方式是不是太频繁琐了,在数据结构更改或者查询条件发生变化时必须要再次更改报表设置,那么在 VS2005 中水晶报表有没有更简洁的方法呢?最好不用写代码就能搞定呢?有,那就是新的数据绑定控件 CrystalReportSource ,这个控件与 SqlDataSource 数据源绑定控件一起连用就可以用 SQL 表达式作数据源推数据了。下面是实现的步骤:
本文介绍在VS2005环境下使用水晶报表(Crystal Report 10)进行动态数据源绑定的方法,包括非代码绑定和代码绑定两种方案,并提供了具体的实现步骤和示例代码。
3074

被折叠的 条评论
为什么被折叠?



