我想用一句SQL语句通过程序传递给数据源,在通过数据源传递给报表,我不知道在报表设计器中该如何设计每一个字段,也不知道该如何把数据源传到水晶报表里?
不知道各位大虾明白我的意思吗?

解决方案 »

  1.   

    strSql="select   a.plan_no,a.vendername as vender,a.shopname as shop,a.plan_date,a.empname as planer,a.re "+
    ",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();
      

  2.   

    我还有一个问题,在报表时我不能和数据库连接上,所以设计报表时不能用数据库专家拖动字段到Details上,我在Details上应该怎么对应数据库字段?
    谢谢!
      

  3.   

    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;
    利用存储过程查询数据库填到数据集中, 数据集传递给报表文件,作为查器的数据源
      

  4.   

    有可能你没有写到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