在Stimulsoft中创建只读变量

时间:2016-02-10 23:28:21

标签: c# stimulsoft

我是Stimulsoft的Noobie。我在Visual Studio 2013中为我们的应用程序运行了Stimulsoft Version 2015.3。

stimulsoft

在YouTube上找到的示例视频已经过时了,我还没有找到任何展示如何使用内置条件逻辑创建变量的视频。

有一个字典可以创建变量:

dictionary

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

10 Errors

我会专注于第一个:decInvoiceCost

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

; expected

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

{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
    }
}

Screenshot of Stimulsoft IDE

4 个答案:

答案 0 :(得分:2)

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

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

这将基于if语句返回两个值中的任何一个。

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

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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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

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

其他属性似乎处理代码/计算很好,所以试着看看它们正在使用什么。

答案 3 :(得分:0)

尤里卡!

我找到了答案!

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

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

screenshot of Init by

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

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

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

这里关于Stimulsoft的问题并不多,甚至更少有人有答案。所以,我希望其他人可以使用它。