繁体   English   中英

水晶报表文本对象和字段

[英]Crystal report textobject and fields

我正在运行以下代码

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

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

我怎么知道我在TextObject只有文本而不是其他任何东西(又名字段,参数,公式)?

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

我到处搜索,找到了RAS报告的有效解决方案,但Crystal却没有。 无论如何,如果有人最终在这里寻找答案,这就是解决方法。

每当您必须在报表上连接多个字段时,请勿使用TextObject 而是使用Formula 公式字段不会下注ReportObjects一部分,而是下注KindCrystalDecisions.Shared.FieldKind.FormulaFieldReportDocument.DataDefinition.FormulaFields一部分,您将需要检查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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM