往往在报表中要用到多张表的多个字段(转)

往往在报表中要用到多张表的多个字段,如果在rpt文件里进行关联会感觉很烦而且到最后连自己都搞不清了。

1.建立一个dataset然后添加new Element(也就是定义表结构,一个或多个)
3.建立rpt文件,在ADO.NET数据源中选择刚刚建立的dataset。
4.建立.aspx文件 拖入报表控件。
5.采用push模式把数据动态添加进去
下边是详细的代码,用之前要倒入using System.Data.SqlClient呦
-----------------------------------------------------------------------------------------------
private void Form1_Load(object sender, System.EventArgs e)
           {
                 Dataset1 myset = new Dataset1();
                 CrystalReport1 rpt= new CrystalReport1();
                 rpt.SetDataSource("");
                 string strCnn = "Server=.;Database=A;uid=sa; password=sa";
           
                 string strSql = "select * from A1,A2";
                 string strSql1 = "select * from B1,B2";
                 SqlConnection conn = new SqlConnection(strCnn);
           try
           {                        
           SqlDataAdapter dataadpter = new SqlDataAdapter(strSql,strCnn);
           SqlDataAdapter dataadpter1 = new SqlDataAdapter(strSql1,strCnn);
           conn.Open();
           SqlCommand cmd = new SqlCommand(strSql,conn);
           SqlDataReader sqlreader = cmd.ExecuteReader();
                       if(sqlreader!=null)
                       {
                             while(sqlreader.Read())
                             {      
                            //test是在dataset里定义的表结构名,test1,test2是表的2个字段
                                   DataRow dr = myset.Tables["test"].NewRow();
                                   dr["test1"] = sqlreader[0];
                                   dr["test2"] = sqlreader[1];
                                   myset.Tables["test"].Rows.Add(dr);

                             }
                       
                             sqlreader.Close();
                       }
                 
                       SqlCommand cmd1 = new SqlCommand(strSql1,conn);
                       SqlDataReader sqlreader1 = cmd1.ExecuteReader();
                       while(sqlreader1.Read())
                       {      
                        //fxb是在dataset里定义的表结构名,f1和f2是表的2个字段
                             DataRow dr1 = myset.Tables["fxb"].NewRow();
                             dr1["f1"] = sqlreader1[0];
                             dr1["f2"] = sqlreader1[1];
                             myset.Tables["fxb"].Rows.Add(dr1);

                       }
                       sqlreader1.Close();

                 }
                 catch(Exception ex)
                 {
                       MessageBox.Show(ex.Message);
                       return;
                 }
                 finally
                 {
                       
                       if(conn!=null)
                       {
                             conn.Close();
                       }
                 }
                 rpt.SetDataSource(myset);
                 crystalReportViewer1.ReportSource = rpt;

           } 

 

 

DataSet myds=new DataSet();
SqlDataAdapter myadapter=new SqlDataAdapter("select * from table1",myconn);
SqlDataAdapter myadapter2=new SqlDataAdapter("select * from table2",myconn);
myadapter.Fill(myds,"table1");
myadapter2.Fill(myds,"table2");
CrystalReport1 rpt=new CrystalReport1();
rpt.SetDataSource(myds);

posted @ 2006-09-01 11:04  华丽的转身  阅读(280)  评论(0编辑  收藏  举报