2014-04-02 48 views
0

我正在动态创建水晶报表。当我运行程序并点击一个按钮时,我得到“参数不正确”信息框。我该如何解决这个问题?水晶报表查看器中的“参数不正确”

Imports CrystalDecisions.CrystalReports.Engine 
Imports CrystalDecisions.ReportSource 
Imports CrystalDecisions.Shared 
Imports CrystalDecisions.Windows.Forms 
Imports System.Data.SqlClient 
Imports System.Data.OleDb 

Public Class Form1 

Dim objRpt As CrystalReport1 
Dim con As New SqlConnection 
Private Function CreateSelectQueryAndParameters() As String 

    Dim paramFields As ParameterFields 
    Dim paramField As ParameterField 
    Dim paramDiscreteValue As ParameterDiscreteValue 

    paramFields = New ParameterFields 

    Dim query As String = "SELECT " 

    Dim columnNo As Integer = 0 

    If CheckBox1.Checked Then 

     columnNo = columnNo + 1 

     query = query.Insert(query.Length, "pcode as Column" + columnNo.ToString()) 

     paramField = New ParameterField() 
     paramField.Name = "col" + columnNo.ToString() 
     paramDiscreteValue = New ParameterDiscreteValue() 
     paramDiscreteValue.Value = "Property Code" 
     paramField.CurrentValues.Add(paramDiscreteValue) 

     paramFields.Add(paramField) 
    End If 

    If CheckBox2.Checked Then 

     columnNo = columnNo + 1 
     If query.Contains("Column") Then 

      query = query.Insert(query.Length, ", ") 
     End If 

     query = query.Insert(query.Length, "pname as Column" + columnNo.ToString()) 

     paramField = New ParameterField() 
     paramField.Name = "col" + columnNo.ToString() 
     paramDiscreteValue = New ParameterDiscreteValue() 
     paramDiscreteValue.Value = "Property Name" 
     paramField.CurrentValues.Add(paramDiscreteValue) 
     paramFields.Add(paramField) 
    End If 
    For i As Integer = columnNo To 2 

     columnNo = columnNo + 1 

     paramField = New ParameterField() 
     paramField.Name = "col" + columnNo.ToString() 
     paramDiscreteValue = New ParameterDiscreteValue() 
     paramDiscreteValue.Value = "" 
     paramField.CurrentValues.Add(paramDiscreteValue) 

     paramFields.Add(paramField) 
    Next 

    CrystalReportViewer1.ParameterFieldInfo = paramFields 

    query += " FROM propdb" 
    TextBox1.Text = query 

    Return query 

End Function 
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 

    Dim cnn As SqlConnection 
    Dim connString As String 
    Dim query As String 
    connString = "Data Source=RANJITHA-PC;Initial Catalog=hrmdb;Integrated Security=True" 
    cnn = New SqlConnection(connString) 
    cnn.Open() 
    query = CreateSelectQueryAndParameters() 
    If Not query.Contains("Column") Then 
     MessageBox.Show("No selection to display!") 
     Return 
    End If 

    Dim adepter As New SqlDataAdapter(query, cnn) 
    Dim Ds As New DataSet2 
    adepter.Fill(Ds, "propdb") 
    MsgBox(Ds.Tables(0).Rows.Count) 
    cnn.Close() 

    objRpt = New CrystalReport1() 
    objRpt.SetDataSource(Ds.Tables(0)) 

    Me.CrystalReportViewer1.ReportSource = objRpt 

    Me.CrystalReportViewer1.Refresh() 
End Sub 

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 

End Sub End Class 
+1

可能重复[”参数是不正确的“水晶报表查看器”(http://stackoverflow.com/questions/22789841/parameter-is-incorrect-crystal-report-viewer) –

+0

它didn帮助我。请尝试解决我的代码中的问题 – user3422209

+0

你不能两次提出同样的问题! –

回答

0

看来你在你for-loop有问题,应该改为

For i As Integer = columnNo+1 To 2    

     paramField = New ParameterField()   
     paramField.Name = "col" + i.ToString() 
     paramDiscreteValue = New ParameterDiscreteValue() 
     paramDiscreteValue.Value = "" 
     paramField.CurrentValues.Add(paramDiscreteValue) 

     paramFields.Add(paramField) 
Next 

并把休息品脱CrystalReportViewer1.ParameterFieldInfo = paramFields并检查参数名称的

+0

太好了...非常感谢你...它的工作原理... :) – user3422209

+0

问题出在for循环 – user3422209

+0

@ user3422209:是的,请删除其他问题!下一次,没有重复的问题:)另外,我建议快速浏览[帮助中心](http://stackoverflow.com/help) –