我正在运行以下代码
foreach (ReportObject obj in oSectionObjects)
{
if (obj.Kind == CrystalDecisions.Shared.ReportObjectKind.TextObject)
{
// do stuff
}
}
但我有一个问题。我有多个文本,其中包含文本和字段。
但水晶让我回归TextObject
,这在技术上是正确的。
我怎么知道我只有TextObject
中的文字而不是其他任何文字(又名字段,参数,公式)?
答案 0 :(得分:0)
据我所知,文本框中的字段将被文本模式识别。尝试搜索{1 @ xxxxx}的文本对象文本,其中xxxxx是字段名称。 “{1 @”显示字段的类型:1表示数据库,2表示公式,3表示参数。您也可以尝试{@xxxxx} *(没有数字字段标识符)
答案 1 :(得分: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