老大们:
我要动态的将数据源赋给报表(通过数据集xsd文件)
代码如下:
string myConnectionString = "..."
SqlConnection myConnection = new SqlConnection(myConnectionString);
string mySelectQuery = "select * from A_CK";
SqlDataAdapter myDataAdapter = new SqlDataAdapter(mySelectQuery, myConnection);
//DataSet1为用XML 架构定义语言 (XSD) 描述的DataSet架构
Dataset1 dsBill = new Dataset1();
// 连接到数据库、从数据库中获取数据然后断开数据库连接
myDataAdapter.Fill(dsBill,"A_Ck");
//实例化水晶报表
CrystalReport3 CR_Bill = new CrystalReport3();
//登录信息
CrystalDecisions.Shared.TableLogOnInfos myTableLogonInfos =
new TableLogOnInfos();
CrystalDecisions.Shared.TableLogOnInfo myTableLogonInfo =
new TableLogOnInfo();
CrystalDecisions.Shared.ConnectionInfo myConnectionInfo =
new ConnectionInfo();
myConnectionInfo.ServerName = "...";
myConnectionInfo.DatabaseName = "...";
myConnectionInfo.UserID = "...";
myConnectionInfo.Password = "...";
myTableLogonInfo.ConnectionInfo = myConnectionInfo;
myTableLogonInfo.TableName = "A_CK";
myTableLogonInfos.Add(myTableLogonInfo);
this.crystalReportViewer1.LogOnInfo = myTableLogonInfos; //将填充的数据集传递给报表
CR_Bill.SetDataSource(dsBill); //设置报表源,将该报表对象绑定到 Web 窗体查看器
crystalReportViewer1.ReportSource=CR_Bill;
crystalReportViewer1.RefreshReport();问题在于,dsBill确实被填充了,其中有个叫A_CK的表,也有数据,但CR_Bill.SetDataSource(dsBill);执行之后,在CR_Bill中的dataBase.Tables.Count竟为0,报表的数据源没有表,当然也没有数据,(此时dsBill中仍有数据表)就好像CR_Bill.SetDataSource(dsBill);没起作用。本来要用存储过程的,但连表都无法实现
各位老大帮帮忙吧,救急!!!!!!!!!!!!!!!!!!
我要动态的将数据源赋给报表(通过数据集xsd文件)
代码如下:
string myConnectionString = "..."
SqlConnection myConnection = new SqlConnection(myConnectionString);
string mySelectQuery = "select * from A_CK";
SqlDataAdapter myDataAdapter = new SqlDataAdapter(mySelectQuery, myConnection);
//DataSet1为用XML 架构定义语言 (XSD) 描述的DataSet架构
Dataset1 dsBill = new Dataset1();
// 连接到数据库、从数据库中获取数据然后断开数据库连接
myDataAdapter.Fill(dsBill,"A_Ck");
//实例化水晶报表
CrystalReport3 CR_Bill = new CrystalReport3();
//登录信息
CrystalDecisions.Shared.TableLogOnInfos myTableLogonInfos =
new TableLogOnInfos();
CrystalDecisions.Shared.TableLogOnInfo myTableLogonInfo =
new TableLogOnInfo();
CrystalDecisions.Shared.ConnectionInfo myConnectionInfo =
new ConnectionInfo();
myConnectionInfo.ServerName = "...";
myConnectionInfo.DatabaseName = "...";
myConnectionInfo.UserID = "...";
myConnectionInfo.Password = "...";
myTableLogonInfo.ConnectionInfo = myConnectionInfo;
myTableLogonInfo.TableName = "A_CK";
myTableLogonInfos.Add(myTableLogonInfo);
this.crystalReportViewer1.LogOnInfo = myTableLogonInfos; //将填充的数据集传递给报表
CR_Bill.SetDataSource(dsBill); //设置报表源,将该报表对象绑定到 Web 窗体查看器
crystalReportViewer1.ReportSource=CR_Bill;
crystalReportViewer1.RefreshReport();问题在于,dsBill确实被填充了,其中有个叫A_CK的表,也有数据,但CR_Bill.SetDataSource(dsBill);执行之后,在CR_Bill中的dataBase.Tables.Count竟为0,报表的数据源没有表,当然也没有数据,(此时dsBill中仍有数据表)就好像CR_Bill.SetDataSource(dsBill);没起作用。本来要用存储过程的,但连表都无法实现
各位老大帮帮忙吧,救急!!!!!!!!!!!!!!!!!!
解决方案 »
- foreach一组Button,在其中调用每个Button的click事件的代码要如何写?
- C#(winform)如何制作个人简历那样格式的表格报表?100分为谢。
- 如果实现安装CAB文件
- 在C#中用DataSet.ReadXml读取XML文件出错
- 请问如何将DataSet做成强类型的?
- 如何应用Visual studio tools for office 更新word文档内容
- 请教两个问题
- 两个窗体将传值
- 问一个很菜的问题!WINXP下为什么SQL-SERVER不能安装服务端?是版本的问题吗?
- 大哥们!能详细点说说:ManualResetEvent 吗??
- 我的C#项目怎么不能出现水晶报表设计器呢?
- 如何求中英文字符串的长度?
DS = new System.Data.DataSet();m_strSQL = "";
m_strSQL = m_strSQL + "SELECT CustomerID as CustomerID, CustomerName, Sex, CustomerSpell, Trade, BalanceIntegral, CardNo, SortName, Address, Phone, IdentityID, Email AS Email, CardID as CardID";
m_strSQL = m_strSQL + " FROM T_Customer";
m_strSQL = m_strSQL + " WHERE (((IsUse)>=0))";
if(this.txtCustomerName.Text.Trim().Length > 0)
{
m_strSQL = m_strSQL + " And CustomerName like '%" + this.txtCustomerName.Text.Trim() + "%'";
}
if(this.txtTrade.Text.Trim().Length > 0)
{
m_strSQL = m_strSQL + " And Trade like '%" + this.txtTrade.Text.Trim() + "%'";
}
if(this.txtCardNumber.Text.Trim().Length > 0)
{
m_strSQL = m_strSQL + " And CardNo like '%" + this.txtCardNumber.Text.Trim() + "%'";
}
m_strSQL = m_strSQL + " ORDER BY CustomerSpell";ClassGlobe.conn.Open();
System.Data.OleDb.OleDbDataAdapter adapter = new System.Data.OleDb.OleDbDataAdapter(m_strSQL, ClassGlobe.conn);
adapter.Fill(DS, "T_Customer");
ClassGlobe.conn.Close();//DS.WriteXml(@"d:\AutoClubCustomer.xml", System.Data.XmlWriteMode.WriteSchema);rpt = null;
rpt = new rptQueryCustomer();
rpt.SetDataSource(DS);this.crvQueryCustomer.ReportSource = rpt;首先,把//DS.WriteXml(@"d:\AutoClubCustomer.xml", System.Data.XmlWriteMode.WriteSchema);
的注释去掉。
同时把
rpt = null;
rpt = new rptQueryCustomer();
rpt.SetDataSource(DS);this.crvQueryCustomer.ReportSource = rpt;注释起来,
然后运行一遍这些代码,你就会获得一个XML文件“d:\AutoClubCustomer.xml”现在就可以新建一个空白报表了。假如取名为“rptQueryCustomer”
然后,添加/删除数据库,然后选择“更多数据源”--〉ADO.NET(XML),然后选择d:\AutoClubCustomer.xml,然后就有字段了,直接在报表上排列即可。
去掉也不对。
to:cnming(cnming) ( )
我想动态的在程序里指定,因为要打印的报表很多,不可能每一个都用一个连好表的rpt文件吧。老大们,再帮帮忙啊!《》
http://www.cnblogs.com/babyt/archive/2005/05/12/116878.html#154005有无更好的方法?即能完全动态指定!!!包括字段定义.象在excel中一样
我目前能想到的是从Dataset.xsd先过渡一下,这样就会自动转换成水晶报表能够识别得类型,再用CR_Bill.SetDataSource(dsBill);实现动态赋值。如果还是要先在报表中指定字段(存储过程)的话,水晶报表将会报错(不支持类型等)。有人解决了吗? 不胜感激
我们将通过下面的这些步骤来通过Pull模式来执行水晶报表
1.首先创建rpt文件,并使用水晶报表设计接口设置一些必须的数据连接。
2.拖放一个 CrystalReportViewer控件至aspx页面,设置它的属性指定我们上一步创建的.rpt文件。
3. 在代码中调用DataBind方法。
创建 .rpt 文件:
1) 在右击”解决方案游览器“,在弹出的菜单中选择”添加“--”添加新项“-->”Crystal Report”
2) 在”Crystal Report 库”中选择”作为空白报表“单选按钮,最后单击“确定“。
3)这里将弹出水晶报表设计器。
4) 右击报表中的”详细资料区”,选择“数据库”->“添加/删除数据库..."
5) 在弹出的”数据库专家“中,扩展”OLE DB(ADO)“选项,此时会弹出另外一个”OLE DB(ADO)“窗口。
6) 在 "OLE DB (ADO)" 弹出窗口中,选择 "Microsoft OLE DB Provider for SQL Server" 然后 "Next"
7) 指定连接的信息
服务器 : ASPCN (您的机器是什么名字就写什么)
用户 ID: sa
密码:
数据库 : Pubs
8) 单击”Next“,最后单击”Finish“按钮。
9) 这时你就能在”数据库专家“窗口中看到我们选择的数据库。
10) 扩展”Pubs“数据库,扩展”表“,选择”Stores“表并将其加到”选定的表“区中,单击”OK"按钮。
11) 现在在”字段资源浏览器“中就会在左边”数据库字段“区中显示你选择的表,以及表中的字段。
12) 拖放需要的字段进入报表的”详细资料“区。字段名将会自动出现在”页眉“区。如果你想修改头部文字,则可以右击”页眉“区中的文字,选择”编辑文本对象“选项并进行编辑。
13) 保存,这样我们就有了一个水晶报表文件。
创建 CrystalReportViewer 控件
14) 回到前面的WebForm中,拖放一个Crystal Report Viewer控件到页面中去。
15) 调出Crystal Report Viewer控件的属性窗口,选择“DataBindings"区点击[...]
16) ”Crystal Report Viewer 数据绑定窗口”中,在右边的“可绑定属性”中选择”ReportSource“,并选择右下角的“自定义绑定表达式”中指定.rpt文件路径。
17) 此时你能够从Crystal Report Viewer 控件中看到使用一些虚拟数据组成的报表文件的预览。
注意:在上面的例子中,CrystalReportViewer可以在设计时直接调用真实的数据,因为此时数据已经保存。在这种情况下,设计时当没有保存数据时,他是不能显示数据的。取而代这的是显示一些虚拟的数据,只有在执行时才会选取真实的数据。
Code Behind 程序设计
18) 在Page_Load方法中调用DataBind方法。
执行你的程序
19) 创建并运行你的程序!
您现在就可以直接在Web页面中使用水晶报表内置的一些功能,如页面导航,缩放等。
但好像所答非所问,是否可以脱离事先赋字段值?
不明白什么叫着“打印的报表很多”,每种报表你总是都要做嘛,比如客户名单报表,客户记录报表,这总是要做两份报表的嘛,难道你想就做一个?
此外,制定XML仅仅是指定数据结构而已,最终都是由rpt.SetDataSource(DS);中的DS把数据导入报表的,代码都写得那么详细了,为何不试试看?
你的方法没问题,我的问题基本解决了。
我还想问一下,怎样将两个分别计算的DataSet放到一个DataSet中,即将两个dataset中的表放到一个中,再用报表的setdataSouce()方法。