2014-01-13 113 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