2014-01-13 32 views
0

我运行下面的代码Crystal报表textobject和领域

foreach (ReportObject obj in oSectionObjects) 
{ 
    if (obj.Kind == CrystalDecisions.Shared.ReportObjectKind.TextObject) 
    { 
     // do stuff 
    } 
} 

,但我有一个问题。我确实有多个包含文本和字段的文本。 但晶体返回我的领域是TextObject这在技术上是正确的。

我如何知道我只在TextObject中有文字而没有其他字段(即字段,参数,公式)?

回答

0

我搜索了很多,发现RAS报告的工作解决方案,但没有为水晶。无论如何,如果有人最终在这里寻找答案,这里的工作。

无论何时必须连接报表上的多个字段,请勿使用TextObject。请使用Formula。公式字段不会投注部分ReportObjects,而是ReportDocument.DataDefinition.FormulaFields的一部分,KindCrystalDecisions.Shared.FieldKind.FormulaField,您将要检查ValueType,因此它是CrystalDecisions.Shared.FieldValueType.StringField

然后你可以操纵它们。

我确实需要,对报告的翻译住所以这里的公式解析方法:

try 
{ 
    var sFormula = formula.Text; 
    string pattern = "\"[\\w ]*\""; 
    Regex r = new Regex(pattern); 
    MatchCollection mc = r.Matches(sFormula); 

    foreach (Match m in mc) 
    { 
     var sValue =m.Value; 
     var sParsedValue = sValue.Substring(1, sValue.Length - 2); 

     if (sParsedValue.StartsWith("s")) 
     { 
      var stest = "\"" + CApplicationData.TranslateStringValue(sParsedValue) + "\""; 
      sFormula = sFormula.Replace(sValue, stest); 
     } 
    } 

    formula.Text = sFormula; 
} 
catch{} 

这上面,你会发现我使用“S”作为关键要知道这可能是一个值是翻译,所以它不是强制性的。使用上述这个公式与西班牙语:

"sPage" + " " + totext(PageNumber) + " " + "sOf" + " " + totext(TotalPageCount)

将修改公式:的

"Página" + " " + totext(PageNumber) + " " + "de" + " " + totext(TotalPageCount)

给输出:

Página 1 de 4

0

据我所知文本框中的字段将被文本模式识别。尝试搜索文本对象的文本{1 @ xxxxx},其中xxxxx是字段名称。 “{1 @”显示字段的类型:1表示数据库,2表示公式,3表示参数。您也可以尝试{@xxxxx} *(不带数字字段标识符)

+0

曾试图这一点,但当实际的真实数据显示那样的时候就会出现问无论如何,我被要求修改的价值,即使在那些textobject,但只要你改变文本字段不再链接,并且当你生成报告任何文本对象与文本里面像:'“的值是:{data.quantity}”'如果您修改,则将“{data.quantity}”显示为文本 – Franck