水晶报表学习日记2------多表连接查询绑定数据方法
很郁闷已经使用过几次水晶报表了 怎么一到使用连接查询还差点夭折了 或许学习水晶报表就需要不停的补充毅力 具体错误是这样的 我使用原业的方式绑定数据(即展现一张表中数据的方法进行数据绑定)反反复复尝试了不下于20次始终无法绑定成功,不是数据一点都不显示就是只显示了一张表中的数据。让我不得不有点想放弃的感觉,但是这样放弃总是会有一点遗憾。于是准备再试一次,这次使用的是Pull模式。嗯 终于把两张表的数据都显示出来了 但是这样怎么能算会使用水晶报表绑定多表连接查询数据呢?于是只得继续尝试使用Push模式。但是开始之前参考了水晶报表自带的帮助以及Demo并考虑了水晶报表的绑定方式。这才明白水晶报表是根据数据集中的数据表字段来绑定到报表模板的,所以如要想要绑定成功首先要明白数据集中数据表是如何构建的 查看了一下数据集的cs文件看到了两张表的声明,这才明白原来在数据集中这两张表是分开声明的,也就是说如果想要将数据添加到这个数据集中就必须对这两个表分别赋值。到次便明白了 连接查询是行不通了 只能查询两次把数据库然后把查询到的数据添加到一个DataSet中的两张表中。于是改变了数据绑定时的代码如下:
string strCmd = "select * from 产品";
string strCmd2 = "select * from 产品类型";
string strCon = @"provider=Microsoft.Jet.OLEDB.4.0;data Source=E:\Task\DataBase\Xtreme\xtreme.mdb";
DataSet ds = new DataSet();
using (OleDbDataAdapter oleAda = new OleDbDataAdapter(strCmd, strCon))
{
oleAda.Fill(ds, "产品"); //首先使用第一个命令查询并填充DataSet 注意此时要为表命令且要与你水晶报表数据集中的表名一致
oleAda.SelectCommand.CommandText = strCmd2; //更改查询命令
oleAda.Fill(ds, "产品类型");//使用第二个命令查询并填充DataSet 注意此时要为表命令且要与你水晶报表数据集中的表名一致
}
PushProductInType pushProType = new PushProductInType();
pushProType.SetDataSource(ds);
string strCmd2 = "select * from 产品类型";
string strCon = @"provider=Microsoft.Jet.OLEDB.4.0;data Source=E:\Task\DataBase\Xtreme\xtreme.mdb";
DataSet ds = new DataSet();
using (OleDbDataAdapter oleAda = new OleDbDataAdapter(strCmd, strCon))
{
oleAda.Fill(ds, "产品"); //首先使用第一个命令查询并填充DataSet 注意此时要为表命令且要与你水晶报表数据集中的表名一致
oleAda.SelectCommand.CommandText = strCmd2; //更改查询命令
oleAda.Fill(ds, "产品类型");//使用第二个命令查询并填充DataSet 注意此时要为表命令且要与你水晶报表数据集中的表名一致
}
PushProductInType pushProType = new PushProductInType();
pushProType.SetDataSource(ds);
crystalReportViewer1.ReportSource = pushProType;
浙公网安备 33010602011771号