问题描述
本人刚学水晶报表,我采用dataset来填充报表,一个表的情况可以弄,多个表联合查询改如何弄啊?请教大家,最好能有个完整的例子哦,网上找了好久都是一篇文章转来转去。
解决方案
解决方案二:
一样的啦。你直接把表与表之间的左联,右联,内联接写成一个SQL语句,或先写从一个视图再查询出来成一个DATASET传进去就可以了。然后你设计报表也照样把几个有关联的表拉过去,设一下是用哪个字段连接,进行相应的设计就可以了。下面的例子供参考。protectedvoidPage_Load(objectsender,EventArgse){//连接字符在WEB.CONFIG获取stringconnStr=ConfigurationSettings.AppSettings["lj"].ToString();SqlDataSourcedatasource=newSqlDataSource(connStr,你有SQL语句了,不管是关系到几个表都一样照传,主要你的报表有相应的设计就可以了);ReportDocumentdoc=newReportDocument();TableLogOnInfologininfo=newTableLogOnInfo();stringpath;path=Server.MapPath("report1.rpt");doc.Load(path);//强制连接数据库,在WEB.CONFIG获取stringa,b,c,d;a=System.Configuration.ConfigurationManager.AppSettings[0];b=System.Configuration.ConfigurationManager.AppSettings[1];c=System.Configuration.ConfigurationManager.AppSettings[2];d=System.Configuration.ConfigurationManager.AppSettings[3];logininfo.ConnectionInfo.ServerName=a;logininfo.ConnectionInfo.DatabaseName=b;logininfo.ConnectionInfo.UserID=c;logininfo.ConnectionInfo.Password=d;try{doc.Database.Tables[0].ApplyLogOnInfo(logininfo);doc.Database.Tables[0].SetDataSource(datasource.Select(DataSourceSelectArguments.Empty));CrystalReportViewer1.ReportSource=doc;}catch{Response.Write("<script>alert('输出报表失败,请检查输入信息或网络!');</script>");}}
解决方案三:
stringsql="select*fromApp_Prject";SqlDataAdapterMyAdapter=newSqlDataAdapter(sql,MyConn); MyAdapter.Fill(ds,"App_Prject"); oCR.SetDataSource(ds);这是一个表的代码,多表的时候这句代码MyAdapter.Fill(ds,"");这里引号里面填什么呢。
解决方案四:
其实不关MyAdapter.Fill(ds,"");这句代码的问题,是在你的SQL里控制就行了,我打个比方啊。stringsql="selecta.*,b.字段fromApp_Prjecta,App_Prject1bwherea.id=b.id";SqlDataAdapterMyAdapter=newSqlDataAdapter(sql,MyConn);MyAdapter.Fill(ds,"App_Prject");oCR.SetDataSource(ds);然后你的画报表的时候就是把两个表都拉下去设计啦。把两个表所需要的字段放进去就好了。一样的道理
解决方案五:
哦,这样啊,那个xsd文件是不是把两个表拉进来就可以了啊,还要如何处理呢
解决方案六:
我又遇到个“未能启用约束。一行或多行中包含违反非空、唯一或外键约束的值。”的错误
解决方案七:
高手你还在吗?
解决方案八:
你拉进去两个表后,要根据他们两个表的字段来连接啊。就是设置两个表的关系。
解决方案九:
哦我在试试啊有什么问题在找你啊