如何动态生成水晶报表

用水晶报表中的公式字段和参数字段完成动态报表开发:

具体的代码如下:
private void Button1_Click(object sender, System.EventArgs e)
  {
   string ConnectionString ="";
   string sqlString = "";
   string FieldString = "";
   //string [] FieldString;
   string[] FieldArray;
   int i,j;
   ParameterFields ParamFields =new ParameterFields();//参数字段集合
   ParameterField ParamField;//参数字段
   ParameterDiscreteValue DiscreteVal = new ParameterDiscreteValue();
   if(CheckBox1.Checked==true)
    FieldString=CheckBox1.Text;
   if(CheckBox2.Checked==true)
    FieldString = FieldString +"," + CheckBox2.Text;
   if(CheckBox3.Checked==true)
    FieldString = FieldString + "," +CheckBox3.Text;
   if(CheckBox4.Checked==true)
    FieldString = FieldString + "," +CheckBox4.Text;
   if(FieldString.Substring(0,1)==",")
    FieldString=FieldString.Substring(1,FieldString.Length -1);
   FieldArray=FieldString.Split((char)',');
   ConnectionString="server=lwb;uid=sa;pwd=;database=northwind;";
   SqlConnection mycon = new SqlConnection(ConnectionString);
   sqlString = "select "+ FieldString +" from orders";
   SqlDataAdapter da=new SqlDataAdapter(sqlString,mycon);
   DataSet ds = new DataSet();
   da.Fill(ds,"orders");
   CrystalReport1 oRp = new CrystalReport1();
   int temp = FieldArray.Length;
   for ( i = 0; i< temp; i++)
   {
    ParamField = new ParameterField();
    ParamField.ParameterFieldName = "myParaField" + (i + 1).ToString();
    DiscreteVal = new ParameterDiscreteValue();
    DiscreteVal.Value = FieldArray[i];
    ParamField.CurrentValues.Add(DiscreteVal);
    ParamFields.Add(ParamField);     
   
    oRp.DataDefinition.FormulaFields["myField" + (i + 1).ToString()].Text = "{orders." + FieldArray[i] + "}";
   }
   for ( j = i + 1; j<= 6; j++)
   {
    ParamField = new ParameterField();
    ParamField.ParameterFieldName = "myParaField" + (j).ToString();
    ParamFields.Add(ParamField);
    DiscreteVal = new ParameterDiscreteValue();
    DiscreteVal.Value = "";
    ParamField.CurrentValues.Add(DiscreteVal);
    ParamFields.Add(ParamField);     
   }
   CrystalReportViewer1.ParameterFieldInfo = ParamFields;
   oRp.SetDataSource(ds);
   CrystalReportViewer1.ReportSource = oRp;
  }
posted @ 2006-10-17 16:56  '.Elvis.'  阅读(599)  评论(0编辑  收藏  举报