Dataset1 ds; //DataSet对象
string sqlText; //根据选择的字段来写的查询语句
ParameterFields parameters; //参数字段集合
ParameterField parameter; //参数字段对象
CrystalReport1 report1; //报表对象
下面是通过一个Button的事件!报表里面我把要传值的参数字段都加到了报表中用的IFildeObject对象 但显示报表列的时候我用的是TextObject 对象.
public TextObject GetTextObject(ReportDocument Report,string reportObjectName)
{
TextObject text;
text = Report.ReportDefinition.ReportObjects[reportObjectName] as TextObject;
if(text != null)
return text;
else
return null;
}

这里是给TextObject 传值;
string field = "";
parameters = new ParameterFields();
string[] FieldString;
if(this.checkBox1.Checked)
field = this.checkBox1.Text;
if(this.checkBox2.Checked)
field += "," + this.checkBox2.Text;
if(this.checkBox3.Checked)
field += "," + this.checkBox3.Text;
if(this.checkBox4.Checked)
field += "," + this.checkBox4.Text;
if(this.checkBox5.Checked)
field +="," + this.checkBox5.Text;
if(field == "")

{
MessageBox.Show("选择字段");
return;
}
if(field.Substring(0,1) == ",")
field = field.Substring(1,field.Length -1);
FieldString = field.Split(',');

sqlText = "Select "+ field.ToString()+ " from Power.busy"; //根据条件自动生产查询语句

dbConnection = new OracleConnection(constring);
dbAdapter = new OracleDataAdapter(sqlText,dbConnection);
ds = new Dataset1();
try

{
dbAdapter.Fill(ds.Tables["Busy"]);
}
catch(Exception ex)

{
Debug.Fail(ex.Message);
}
这里我做测试用了CheckBox 来选择字段,填充DataSet
report = new CrystalReport1();
for(int i=0;i<FieldString.Length;i++)

{
report = new CrystalReport1();
report.DataDefinition.FormulaFields["myField"+(i+1)].Text = "{BUSY."+FieldString[i]+"}";
string StringText = "";
StringText = FieldString[i].ToString();
TextObject textObject;
string textObjects = "Text"+i.ToString();

if(FieldString[i] == "ID")

{
textObject = GetTextObject(report,textObjects);
textObject.Text = "业务ID号码";
}
if(FieldString[i] == "Name")

{
textObject = GetTextObject(report,textObjects);
textObject.Text = "业务名称";
}
if(FieldString[i] == "CATALOG")

{
textObject = GetTextObject(report,textObjects);
textObject.Text = "科";
}
if(FieldString[i] == "TOWN")

{
textObject = GetTextObject(report,textObjects);
textObject.Text = "镇名称";
}
if(FieldString[i] == "DISTRICT")

{
textObject = GetTextObject(report,textObjects);
textObject.Text = "区";
}


int j=0;
for(j=i+1;j<6;j++)

{
parameter = new ParameterField();
parameter.ParameterFieldName = "myParaField"+j.ToString();
parameters.Add(parameter);

parameterValue = new ParameterDiscreteValue();
parameterValue.Value = "";

parameter.CurrentValues.Add(parameterValue);
parameters.Add(parameter);
parameter.EnableAllowMultipleValue = false;
parameter.EnableAllowEditingDefaultValue = false;

this.crystalReportViewer2.ParameterFieldInfo = parameters;
report.SetDataSource(ds);
this.crystalReportViewer2.ReportSource = report;
}
这里是给报表自动写列名和给参数字段赋值.值是都可以传到但是有问题就出在报表里面了,当传的值是Int类型的,需要格式化字段,如果没有格式就显示不出来,我现在用的水晶报表是9.1.000的 .net 2003自己带的,而且很多都不是它帮助里面提供的属性.请问谁做过这方面的报表和思路希望朋友帮忙解决!!!
谢谢大家!!!