问题描述
公式绑定,实现代码是(总是报该字段名无效,怎么回事呢!!):CR_Document.DataDefinition.FormulaFields["paraField1"].Text="{"+ds.Tables["item"].TableName+"."+ds.Tables["item"].Columns[0].ColumnName.ToString()+""}";stringFieldString="stritemname";FieldString=FieldString+",";ArrayListFieldArray=newArrayList();string[]FieldArray1=FieldString.Split(',');stringstrPath=Server.MapPath("~/rpt/CR_ViewBanlance.rpt");CR_Document.Load(strPath);ParamValue1.Value=CK_Primarykey.Text.ToString();//参数值ParamValues1.Add(ParamValue1);ParamField1.ParameterFieldName="Parameter1";//参数名ParamField1.CurrentValues=ParamValues1;ParamFields.Add(ParamField1);//CR_Document.DataDefinition.FormulaFields["paraField1"].Text="{"+dt+"}";CR_Document.DataDefinition.FormulaFields["paraField1"].Text="{"+ds.Tables["item"].TableName+"."+ds.Tables["item"].Columns[0].ColumnName.ToString()+""}";CR_Document.SetDataSource(ds.Tables["item"]);this.CrystalReportViewer1.ReportSource=CR_Document;
解决方案
解决方案二:
哪个字段?
解决方案三:
表item中的stritemname字段,全部代码如下:stringConnString=ConfigurationManager.AppSettings["ConnctionString1"];OracleConnectionOraConn=newOracleConnection(ConnString);OraConn.Open();OraDALBaseBaseDAL=newOraDALBase();stringStringSql="selectstritemnamefromitem";DataSetds=BaseDAL.OraGetDataSet(StringSql);//DataSetds=newDataSet();OracleDataAdapterOraDA=newOracleDataAdapter(StringSql,OraConn);OraDA.Fill(ds,"item");DataTabledt=BaseDAL.OraGetTableSQL(StringSql);stringstrName="stritemname";Fields_List=newArrayList();CrystalReportViewer1.ReportSource=Server.MapPath("~/rpt/CR_ViewBanlance.rpt");ParameterFieldsParamFields=newParameterFields();ParameterFieldParamField1=newParameterField();ParameterValuesParamValues1=newParameterValues();ParameterDiscreteValueParamValue1=newParameterDiscreteValue();ParameterFieldParamField2=newParameterField();ParameterValuesParamValues2=newParameterValues();ParameterDiscreteValueParamValue2=newParameterDiscreteValue();if(CK_Primarykey.Checked==true){//创建一个数据表结构和读写的数据表结构一致//DataTabletest=newDataTable();//DataColumnCol_stritemname=newDataColumn();//Col_stritemname.DataType=System.Type.GetType("System.String");//Col_stritemname.ColumnName="stritemname";//stringstrColumnName=dt.Columns.Contains("stritemname").ToString();//test.Columns.Add(Col_stritemname);//for(inti=0;i<5;i++)//{//DataRowdr=test.NewRow();//dr["stritemname"]="123";//test.Rows.Add(dr);//}stringFieldString="stritemname";FieldString=FieldString+",";ArrayListFieldArray=newArrayList();string[]FieldArray1=FieldString.Split(',');stringstrPath=Server.MapPath("~/rpt/CR_ViewBanlance.rpt");CR_Document.Load(strPath);ParamValue1.Value=CK_Primarykey.Text.ToString();//参数值ParamValues1.Add(ParamValue1);ParamField1.ParameterFieldName="Parameter1";//参数名ParamField1.CurrentValues=ParamValues1;ParamFields.Add(ParamField1);CR_Document.DataDefinition.FormulaFields["paraField1"].Text="{'"+dt.Rows[0]["stritemname"]+"'}";///CR_Document.DataDefinition.FormulaFields["paraField1"].Text="{"+ds.Tables["item"].TableName+"."+ds.Tables["item"].Columns[0].ColumnName.ToString()+""}";CR_Document.SetDataSource(ds.Tables["item"]);this.CrystalReportViewer1.ReportSource=CR_Document;//CR_Document.DataDefinition.FormulaFields["paraField1"].Text={};//CR_Document.DataDefinition.FormulaFields("Parameter1")}else{ParamValue1.Value="";//参数值ParamValues1.Add(ParamValue1);ParamField1.ParameterFieldName="Parameter1";//参数名ParamField1.CurrentValues=ParamValues1;ParamFields.Add(ParamField1);ParamField1.AllowCustomValues=false;}if(CK_Period.Checked==true){ParamValue2.Value=CK_Period.Text.ToString();//参数值"ParamValues2.Add(ParamValue2);ParamField2.ParameterFieldName="Parameter2";ParamField2.CurrentValues=ParamValues2;ParamFields.Add(ParamField2);}else{ParamValue2.Value="";//参数值ParamValues2.Add(ParamValue2);ParamField2.ParameterFieldName="Parameter2";ParamField2.CurrentValues=ParamValues2;ParamFields.Add(ParamField2);ParamField2.AllowCustomValues=false;}CrystalReportViewer1.ParameterFieldInfo=ParamFields;CrystalReportViewer1.DataBind();
解决方案四:
stringFieldString="stritemname";FieldString=FieldString+",";ArrayListFieldArray=newArrayList();string[]FieldArray1=FieldString.Split(',');应该是这里出错stringFieldString="stritemname";这句只是给FieldString付了个常量,应该是FieldString=dr["stritemname"].ToString();
解决方案五:
tangserver.谢谢!!这样是没有办法绑定公式的,如果要实现公式的绑定,那么就应该将报表要显示的数据放到一个表里面,然后再将这个表的数据字段绑定到我在报表中设计好的公式字段,比如"paraField1",实现时这样处理的:CR_Document.DataDefinition.FormulaFields["paraField1"].Text="{"+ds.Tables["item"].TableName+"."+ds.Tables["item"].Columns[0].ColumnName.ToString()+""}";可是没有办法进行绑定,出错提示是该字段名未知!!
解决方案六:
水晶報表不能這樣用,設計期的字段名是固化的,無法動態用.NET代碼進行賦值.
解决方案七:
是的,编程要根据已有的字段进行,先得到报表字段,然后更改它的一些属性。水晶报表无法像你想的那样完全动态,因为BO公司并未开发这样的接口给我们用,只允许我们获取报表上已有的东西,这样的话,就必须先设计表样式,再编程控制!!
解决方案八:
学习
解决方案九:
谢谢,楼上的兄弟!!应该是可以的,你参考一下这个看看,不过他是c/s的,用asp.net+C#怎么实现,我研究了很就了的,但是没有真正实现,这个网址里有纤细实现的方法和源代码(http://www.cnblogs.com/babyt/archive/2005/04/21/142309.html),请帮忙看看
解决方案十:
我看晕了
解决方案十一:
呵呵,阿泰这个也不是动态加载字段,他是先在报表上放上一些空字段,再用程序去更改这些字段的内容,你就算不用公式字段,用文本字段也是一样的,但前提是你的报表上必须先有一些可供修改的字段,你不能报表上光秃秃的,就想拿程序去加载~~
解决方案十二:
我也是用了公式字段去进行绑定的,而且报表设计器里也是预先设计好了字段了的,然后再进行字段的绑定的,可绑定的时候就会报告字段未知的错误,不知究竟怎么处理才行呢
解决方案十三:
forgot已經說過了:水晶報表不能這樣用,設計期的字段名是固化的,無法動態用.NET代碼進行賦值.你給的例子就是驗証我這句話的范例呀:隻有在設計期間有的字段才能顯示出來。你可以不把這些字段拖拉到報表頁面上,但也一定要有這些字段,而不能無中生有!