是这样的,我用水晶报表做了一个可以让用户选择字段的功能,但这样做出来之后,表格却不能自动判断,比如说我原来有5列,当用户选择其中任意三列时,被选择的列显示出来了,但没有选择的列则显示为空的表格,这样不符合我的要求,求这个问题的解决方案!!!
(附VB的代码,我用的是C#原理是一样的,只是语法有些区别)
Dim ConnectionString As String = ""
Dim sqlString As String = ""
'保持字段的字符串
Dim FieldString As String = ""
'保持字段名称的数组
Dim FieldArray() As String
Dim i As Integer, j As Integer
'参数字段集合
Dim ParamFields As New ParameterFields
'参数字段
Dim ParamField As ParameterField
'离散值
Dim DiscreteVal As New ParameterDiscreteValue
'---------------------------------------------------------------------
'获取选取的字段并进行处理
'此处写的比较笨拙,用控件数组更方便
If CheckBox1.Checked = True Then
FieldString = CheckBox1.Text
End If
If CheckBox2.Checked = True Then
FieldString = FieldString & "," & CheckBox2.Text
End If
If CheckBox3.Checked = True Then
FieldString = FieldString & "," & CheckBox3.Text
End If
If CheckBox4.Checked = True Then
FieldString = FieldString & "," & CheckBox4.Text
End If
If CheckBox5.Checked = True Then
FieldString = FieldString & "," & CheckBox5.Text
End If
If CheckBox6.Checked = True Then
FieldString = FieldString & "," & CheckBox6.Text
End If
If FieldString = "" Then
MessageBox.Show("请选择要显示的字段")
Exit Sub
End If
'删除第一个逗号,使字串最终显示为 "字段1,字段2,字段3"
If FieldString.Substring(0, 1) = "," Then
FieldString = FieldString.Substring(1, FieldString.Length - 1)
End If
'分割成数组,每个元素为一个字段名称
FieldArray = FieldString.Split(",")
''打开数据库联接
adoOleDbConnection = New OleDbConnection(ConnectionString)
''Sql语句
'sqlString = "Select * From 材料采购明细"
sqlString = "Select " & FieldString & " From 材料采购明细"
''执行语句
adoOleDbDataAdapter = New OleDbDataAdapter(sqlString, adoOleDbConnection)
''创建Dataset实例
dataSet = New DataSet
''填充dataSet
adoOleDbDataAdapter.Fill(dataSet, "材料采购明细")
'---------------------------------------------------------------------
''创建一个强类型报表实例
crReportDocument = New CrystalReport1
''crReportDocument.Database.Tables("材料采购明细").SetDataSource(dataSet)
'开始以数组为依据依次顺序设置表头和公式字段
For i = 0 To UBound(FieldArray)
'设置第一个离散值并将其传递给该参数
'传递参数做为表头
'--------------------------------------
'参数设置部分
ParamField = New ParameterField