水晶报表动态传递数据的问题

huazi2002 2006-05-25 08:35:16

我想用一句SQL语句通过程序传递给数据源,在通过数据源传递给报表,我不知道在报表设计器中该如何设计每一个字段,也不知道该如何把数据源传到水晶报表里?
不知道各位大虾明白我的意思吗?
...全文
243 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
abiho 2006-05-29
  • 打赏
  • 举报
回复
有可能你没有写到detail中,或者你跟踪以下看看具体数据内容,还是搞不定的话,看一个帖子

1、新建一个windows application:CristalTest;

2、新添加一个数据集DataSet1.xsd
3、在DataSet1里添加表DataTable1
在DataTable1里添加四列Column1,Column2,Column3,Column4 ,保存
4、添加一个水晶报表文件CrystalReport1.rpt
设置数据源:项目数据(Project Data)-->Ado.net DataSets-->***.DataSet1-->DataTable1
5、把Column1,Column2,Column3,Column4拖到水晶报表的细节(Details)中
6、添加一个控件CrystalReportViewer1到Form1中

7、然后添加Form1_Load的代码

Dim m_sqlConn As SqlConnection
Dim m_strSqlConn As String
m_strSqlConn = "Data Source=localhost; initial catalog=pubs;User id=sa;password="
m_sqlConn = New SqlConnection(m_strSqlConn)
Try
Dim sqlAdp As SqlDataAdapter
Dim strSql As String
Dim ds = New DataSet()
m_sqlConn.Open()
strSql = "SELECT au_lname AS Column1, au_fname AS Column2, phone AS Column3, address AS Column4 FROM dbo.authors"
sqlAdp = New SqlDataAdapter(strSql, m_sqlConn)
sqlAdp.Fill(ds)

Dim crReportDocument = New CrystalReport1()
crReportDocument.SetDataSource(ds.Tables(0))
CrystalReportViewer1.ReportSource = crReportDocument
Catch ex As Exception
MessageBox.Show(ex.ToString())
End Try


8、在form1.vb文件头加

Imports System.Data
Imports System.Data.SqlClient
9、 m_strSqlConn = "Data Source=localhost; initial catalog=pubs;User id=sa;password="这个可能要修改成你的机器的Sql Server连接信息

Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=599687
huazi2002 2006-05-29
  • 打赏
  • 举报
回复
自己顶一下
代码蜗牛sky 2006-05-26
  • 打赏
  • 举报
回复
strSql="select a.plan_no,a.vendername as vender,a.shopname as shop,a.plan_date,a.empname as planer,a.remark "+
",b.line_no,b.shoplocname as shoploc,b.barid,b.goodsname,b.unitname as unit,b.price,b.PLAN_QTY,a.planfmno" +
" from Vw_PLANPOMAIN a inner join Vw_PLANPODETAIL b on a.plan_no=b.plan_no";
SqlConnection myConnection=new SqlConnection(ConnectionString);
myConnection.Open();

SqlDataAdapter myDataAdapter=new SqlDataAdapter(strSql,myConnection);
DataSet myDataSet=new DataSet();
myDataAdapter.Fill(myDataSet,"Table1");

oRpt.Load("C:\\Inetpub\\wwwroot\\WebTest\\PLANNO.rpt");
ParameterFields paramFields=new ParameterFields();
/*
ParameterField paramField0=new ParameterField();
ParameterField paramField1=new ParameterField();
ParameterField paramField2=new ParameterField();
ParameterDiscreteValue discreteVal=new ParameterDiscreteValue();
*/
ArrayList ParaFValue=new ArrayList();
ArrayList ParaFName=new ArrayList();
ParaFValue.Add("微软中国");
ParaFValue.Add("订货单");
ParaFValue.Add("alan");
ParaFName.Add("@Company");
ParaFName.Add("@ReportName");
ParaFName.Add("@Printer");

for(int i=0;i<ParaFValue.Count;i++)
{
ParameterDiscreteValue discreteVal=new ParameterDiscreteValue();
discreteVal.Value=ParaFValue[i].ToString();
ParameterField paramField=new ParameterField();
paramField.Name=ParaFName[i].ToString();
paramField.CurrentValues.Add(discreteVal);
paramFields.Add(paramField);
}
/*
discreteVal.Value="微软中国";
paramField0.Name="@Company";
paramField0.CurrentValues.Add(discreteVal);

discreteVal=new ParameterDiscreteValue();
discreteVal.Value="订货单";
paramField1.Name="@ReportName";
paramField1.CurrentValues.Add(discreteVal);

discreteVal=new ParameterDiscreteValue();
discreteVal.Value="alan";
paramField2.Name="@Printer";
paramField2.CurrentValues.Add(discreteVal);

paramFields.Add(paramField0);
paramFields.Add(paramField1);
paramFields.Add(paramField2);
*/
CrystalReportViewer1.ParameterFieldInfo=paramFields;
oRpt.Subreports["SubReport"].SetDataSource(myDataSet.Tables["Table1"]);
oRpt.SetDataSource(myDataSet.Tables["Table1"]);
CrystalReportViewer1.ReportSource=oRpt;
//CrystalReportViewer1.DataBind();
CrystalReportViewer1.ShowPreviousPage();
kokubo_wing 2006-05-26
  • 打赏
  • 举报
回复
学习,帮顶
anthit 2006-05-26
  • 打赏
  • 举报
回复
string strProvider = "Server=(local);DataBase=Northwind;UID=sa;PWD=";
SqlConnection MyConn = new SqlConnection(strProvider);
MyConn.Open();
string strSelOrders = "Select * from orders";
string strSelOrdersDetails = "Select * from [Order Details]";
SqlDataAdapter daOrder = new SqlDataAdapter(strSelOrders,MyConn);
SqlDataAdapter daOrderDetails = new SqlDataAdapter(strSelOrdersDetails,MyConn);
DataSet ds = new DataSet();
daOrder.Fill(ds,"orders");
daOrderDetails.Fill(ds,"Order Details");
MyConn.Close();
ReportDoc.Load(Server.MapPath("myCrystalReportMandS.rpt"));
ReportDoc.SetDataSource(ds);
cRV.ReportSource = ReportDoc;
利用存储过程查询数据库填到数据集中, 数据集传递给报表文件,作为查器的数据源
huazi2002 2006-05-26
  • 打赏
  • 举报
回复
我还有一个问题,在报表时我不能和数据库连接上,所以设计报表时不能用数据库专家拖动字段到Details上,我在Details上应该怎么对应数据库字段?
谢谢!
-渔民- 2006-05-26
  • 打赏
  • 举报
回复
up
yq_net 2006-05-26
  • 打赏
  • 举报
回复
关注
bhwhy 2006-05-26
  • 打赏
  • 举报
回复
用存储过程处理的话你的参数直接传给存储过程,用存储过程处理好记录集在水晶报表中显示就可以了,这样也比较灵活。
bhwhy 2006-05-26
  • 打赏
  • 举报
回复
mark就是关注。
楼主可以在存储过程中定义临时表,字段定义为通用,需要的时候在水晶报表里把标题改一下就可以了。这样可以省点事。要不就一个存储过程返回一个记录集,也可以。楼上写得很详细了,关于水晶报表的登录,可以在论坛里搜一下
collar_bird 2006-05-26
  • 打赏
  • 举报
回复
敢问
mark 是什么意思有什么时候用处
先行谢过则个
huazi2002 2006-05-26
  • 打赏
  • 举报
回复
大虾们,我用“零下一度”的方法试了一下,挺好,不过还是有一个问题,我从数据库里取出好多条记录,怎么报表只显示一条数据呢?
bhwhy 2006-05-26
  • 打赏
  • 举报
回复
我觉得这个比较困难.问下高手吧
huazi2002 2006-05-26
  • 打赏
  • 举报
回复
自己顶一下吧
Yuna_2z 2006-05-25
  • 打赏
  • 举报
回复
MARK

110,539

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧