毋意 毋必 毋固 毋我

.net 水晶报表自动生存列的问题,大家帮忙看看!!!

 

        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自己带的,而且很多都不是它帮助里面提供的属性.请问谁做过这方面的报表和思路希望朋友帮忙解决!!!
谢谢大家!!!

posted on 2005-09-15 13:25  毛毛  阅读(926)  评论(2)    收藏  举报

导航