2014-01-13 4 views
0

я бегу следующий кодCrystal Report textobject и поля

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

, но у меня есть проблема. У меня есть несколько текстов, которые содержат в них текстовые поля AND. Но кристалл вернет мне поле TextObject, что технически верно.

Как я знаю, что у меня ТОЛЬКО есть текст в TextObject, а не что-нибудь еще (ака поля, параметры, формулы)?

ответ

0

Я искал много и нашел рабочее решение для отчета RAS, но ничего для кристалла. Так или иначе, если кто-то в конечном итоге ищет ответ, вот работа.

Всякий раз, когда вам приходится конкатенировать несколько полей в отчете, НЕ используйте TextObject. Вместо этого используйте Formula. Поля формул не будут составлять часть ReportObjects, а вместо этого составляют часть ReportDocument.DataDefinition.FormulaFields, а Kind - CrystalDecisions.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

Если бы попытался это, но возникла проблема, когда реальные реальные данные показывают это. В любом случае мне было предложено изменить значение evenwithin textobject, но как только вы меняете текст, поля больше не связаны, и когда вы создаете отчет, любой текстовый объект с текстом внутри, например: '", это значение: {data.quantity} "' с отображением '{data.quantity}' в качестве текста, если вы изменяете – Franck