在 Stimulsoft 中创建只读变量

Creating Readonly Variables in Stimulsoft

我是 Stimulsoft 的新手。我在 Visual Studio 2013 年为我们的应用程序安装了 Stimulsoft 版本 2015.3 运行。

在 YouTube 上找到的示例视频都是旧的,我还没有找到任何展示如何使用其内置条件逻辑创建变量的视频。

有一个创建变量的字典:

目前,如果我尝试编译,会出现 10 个错误,如下所示:

我将重点介绍第一个:decInvoiceCost

错误显示“;”预期,并给出这个小预览:

使用他们的编辑器输入的代码是:

{if (blnUseMarketCost) { VwInvoice.MarketCost } else { VwInvoice.AverageCost } }

其中 blnUseMarketCost 是布尔值,两 (2) 个小数值 MarketCostAverageCost 来自数据库视图。

返回错误,如果我点击"Go to Code":

...我被带到了他们的设计师渲染的源代码:

    public virtual decimal decInvoiceCost
    {
        get
        {
            // CheckerInfo: Value decInvoiceCost
            return {if (blnUseMarketCost) { VwInvoiceDetail.MarketCostInInvPricingUnit } else { VwInvoiceDetail.AverageCostInInvPricingUnit } }m;
        }
    }

我认为最后 "m" 引起了一些问题,但我真的不知道。

有没有人有一些当前的例子来说明如何在这些变量字段中使用基本逻辑?

更新

报表的C#代码由设计者生成。我可以用它来查看设计师正在尝试做什么,但我不理解所有的细微差别。

namespace Reports
{
    public class Report : Stimulsoft.Report.StiReport
    {
        public Report()        {
            this.InitializeComponent();
        }

        #region StiReport Designer generated code - do not modify
        // 
        // {snip}
        // 
        public virtual decimal decMarkup
        {
            get
            {
                // CheckerInfo: Value decMarkup
                return ((decInvoiceCost==0) ? 0 : (decInvoiceProfit / decInvoiceCost))m;
            }
        }
        // 
        // {snip}
        // 
        #endregion StiReport Designer generated code - do not modify
    }
}

decInvoiceCost 获取实现的代码无效。您应该改用以下任一实现:

public virtual decimal decInvoiceCost
{
    get
    {
        // CheckerInfo: Value decInvoiceCost
        if (blnUseMarketCost) 
            return VwInvoiceDetail.MarketCostInInvPricingUnit;
        else 
            return VwInvoiceDetail.AverageCostInInvPricingUnit;
    }
}

这将 return 基于 if 语句的两个值之一。

public virtual decimal decInvoiceCost
{
    get
    {
        // CheckerInfo: Value decInvoiceCost
        return blnUseMarketCost
           ? VwInvoiceDetail.MarketCostInInvPricingUnit
           : VwInvoiceDetail.AverageCostInInvPricingUnit;
    }
}

使用三元运算符<boolExpr> ? <valueifTrue> : <valueIfFalse>;

你应该在那里使用表达式 returns 一个值。 if 语句不是表达式。尝试使用条件运算符 (?:).

更新后的版本帮助很大。似乎 Stimulsoft 期望那里有一个文字形式的常数(例如 5.0 或 7.4 ...)。然后它会尝试将其标记为编译器的小数(更多信息请参见 Letter after a number, what is it called?)。

这意味着它不需要计算、决定或代码。我从未使用过该软件,所以我只能猜测如何解决该问题。这就是为什么我纠结是否应该将其作为答案提交的原因。我的第一个猜测是将 Init by: 或第二个 Type 下拉列表更改为 value 以外的内容。 codecalculation 或类似的东西就是我要找的东西。

其他属性似乎可以很好地处理 code/calculation 所以试着看看它们在使用什么。

尤里卡!

我找到答案了!

在 Stimulsoft 变量编辑器中,有一个名为 Init by: 的选项,它被预填充为 Value.

我将 Init by: 更改为 Expression,报告现在提取数据:

代码视图似乎没有任何不同:

 public virtual decimal decMarkup
 {
     get
     {
         // CheckerInfo: Value decMarkup
         return ((decInvoiceCost==0) ? 0 : (decInvoiceProfit / decInvoiceCost))m;
     }
 }

Stimulsoft Reports Documentation on Conditional Expressions没有提到这个。

这里关于Stimulsoft的问题不多,有答案的就更少了。所以,我希望其他人能从中受益。