Dim myconn As SqlClient.SqlConnection = New SqlClient.SqlConnection("data source=sqlserver;initial catalog=northwind;persist security info=False;user id=sa;password=;packet size=4096")
        Dim MyCommand2 As New SqlClient.SqlCommand()        Dim MyDA As New SqlClient.SqlDataAdapter()
        '----------------------填充customer表------------------------------------
        MyCommand2.Connection = myconn
        MyCommand2.CommandText = "select  * from customers"
        MyCommand2.CommandType = CommandType.Text
        MyDA.SelectCommand = MyCommand2        'Dim myDS As New DataSet1()
        Dim myDS As New DataSet()    '-----------这里可以不用填充动态的dataset1,但在设计报表时不能没有数据集。"奇怪"!
        MyDA.Fill(myDS, "customer")  '-----------记住这里的填充的名"customer",必须和报表的表名一样。
        crReport.SetDataSource(myDS) '-----------如果设计报表时没有dataset,这里就不可以进行填到报表的dataset,报表将不能接收到数据值
       
 Dim crFormulas As FormulaFieldDefinitions
        Dim crFormulaTextField1 As FormulaFieldDefinition
        Dim crFormulaTextField2 As FormulaFieldDefinition
        Dim crFormulaTextField3 As FormulaFieldDefinition        Dim crFormulaDBField1 As FormulaFieldDefinition
        Dim crformulaDBField2 As FormulaFieldDefinition        Dim crFormulaGroup1 As FormulaFieldDefinition
        crFormulas = crReport.DataDefinition.FormulaFields        crFormulaTextField1 = crFormulas.Item(0)
        crFormulaTextField2 = crFormulas.Item(1)
        crFormulaTextField3 = crFormulas.Item(2)
        crFormulaDBField1 = crFormulas.Item(3)
        crformulaDBField2 = crFormulas.Item(4)
        crFormulaGroup1 = crFormulas.Item(5)
        crFormulaTextField1.Text = Chr(34) & field1 & Chr(34)
        crFormulaTextField2.Text = Chr(34) & field2 & Chr(34)
        crFormulaTextField3.Text = Chr(34) & group1 & Chr(34)        crFormulaDBField1.Text = "{Customers." & field1 & "}"
        crformulaDBField2.Text = "{Customers." & field2 & "}"
        crFormulaGroup1.Text = "{Customers." & group1 & "}"
        CrystalReportViewer1.ReportSource = crReport
        CrystalReportViewer1.DataBind()

解决方案 »

  1.   

    上面写少了Dim crReport As New CrystalReport2()    
    其中想运行的话请设计报表时,在报表中加6个公式这段
      

  2.   

    感觉 vs.net 内嵌的水晶报表有许多功能都没有实现,或未能较友好地实现。这点从其帮助信息就可以看得出来。不知道单独的 crystal report 9 for .net 如何。我想会比内嵌的那个好一些。
      

  3.   

    可以了解决啦!
        Private Function GetFieldObject(ByVal reportObjectName As String) As FieldObject
            Dim field As FieldObject        ' 按名称获取 ReportObject,将其转换为 FieldObject,
            ' 并返回此对象。
            If TypeOf (crReport.ReportDefinition.ReportObjects.Item(reportObjectName)) Is FieldObject Then
                field = crReport.ReportDefinition.ReportObjects.Item(reportObjectName)
                GetFieldObject = field
            Else : GetFieldObject = Nothing
            End If    End Function调用时写
            With GetFieldObject("Field7")  '----------Field7报表对象的name
                .Top = top
                .Left = left
            End With