首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Axosoft报表生成器(活动报表3) -取决于字段值的条件结果

Axosoft报表生成器(活动报表3) -取决于字段值的条件结果
EN

Stack Overflow用户
提问于 2015-03-25 20:22:24
回答 2查看 492关注 0票数 0

虽然我有一个大问题要解决,但我正在尝试使用Axosoft的创建一个自定义报告。报告将包含从要显示的数据库中提取的特定项的计算总数和计数。其中一个这样的字段(Custom_163)是布尔值,其中true将它作为一种类型的项(增强),而false则将它作为另一种类型(维护)。我能够得到报告中项目总数的一个计数,但我想将其细分为总数的百分比。

问题:一个布尔字段将确定两种类型的项。区分它们来收集每一个的计数是我在挣扎的地方。

初始化变量:

代码语言:javascript
复制
private bool _oddRow = true;

private string[] _labels = new string[3];

private int _defectsTotal = 0;
private int _enhanceTotal = 0;
private int _maintenTotal = 0;

详细信息部分(在这里它为项创建行):

代码语言:javascript
复制
public void Detail1_Format()
{
    if  (rpt.Fields.Contains("Custom_163") && rpt.Fields["Custom_163"].Value != null)
    {
        if ((bool)rpt.Fields["Custom_163"].Value == true)
        {
            //needs something here to add a count towards this type
            return enhanceTotal;
        }
        else
        {
            //needs something here to add a count towards this type
            return maintenTotal;
        }

        _defectsTotal++;
        _enhanceTotal += enhanceTotal;
        _maintenTotal += maintenTotal;

        // To Color Every Other Row
        if (_oddRow)
        {
            rpt.Sections["Detail1"].BackColor = System.Drawing.Color.FromArgb(224, 224, 224);
        }
        else
        {   
            rpt.Sections["Detail1"].BackColor = System.Drawing.Color.White;
        }
        _oddRow = !_oddRow;     

        // Converting to String Values
        if (rpt.Fields["ItemId"].Value == null) return; 
    }
}

问题是专门针对以下行的:

代码语言:javascript
复制
if((bool)rpt.Fields["Custom_163"].Value == true)

我已经改变了一吨从类似的条件:

代码语言:javascript
复制
if(rpt.Fields["Custom_163"].Value.ToString() == "True")
if(rpt.Fields["Custom_163"].Value == true)
if(rpt.Fields["Custom_163"].Value = true)
if(rpt.Fields["Custom_163"].Value == 1)
if(rpt.Fields["Custom_163"].Value.ToString() == "1")
if (Convert.ToBoolean(rpt.Fields["Custom_163"].Value) ==  true)
etc...

但它们似乎不像预期的那样起作用。我希望它过滤掉这个字段是的项,这样剩下的就会执行。

另一件事是从if-else语句返回值(不工作,我尝试使用下面的另一种方法,这个方法也不起作用):

代码语言:javascript
复制
public class findTotals
{
    public findTotals()
    {
    }
    public int resultTotals()
    {
        bool item = (bool)rpt.Fields["Custom_163"].Value;

        if ( item == true)
        {
            int enhanceTotal = 1;
            return; 
        }
        else
        {
            int maintenTotal = 1;
            return;
        }
    }
}

(整个方法需要大量的工作TBH)。

最后,这些行必须在第二行以外,否则,或者至少以某种方式返回原始的if,以便打印到报告中:

代码语言:javascript
复制
_enhanceTotal += enhanceTotal;
_maintenTotal += maintenTotal;

_defectsTotal获得所有项目的总计数,这很好。但是,这两行应该根据上述条件为每种类型添加一个计数,这样,增强的总量和维护项的总数就会在报告的末尾发布。它不工作,如果不是一个转换/转换错误或条件迫使数组超出界限,这是另外一些问题。我也玩过这些命令。

可能的解决方案?

  1. 如果需要的话,如何安全地将bool值转换为int,以便将这个数字添加到总数中?
  2. 如何返回if-否则中的值,从而使作用域与变量匹配?我需要一个方法吗?

提前谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-03-26 19:07:09

我知道问题出在哪里了。

所以基本上..。

代码语言:javascript
复制
if (Convert.ToBoolean(rpt.Fields["Custom_163"].Value) ==  true)
{
    enhanceTotal++;
}
else
{
    maintenTotal++;      
}

_defectsTotal++;

(这都在另一个if语句和一堆与发布无关的代码中。)这很好,并返回计数,之后的另一个障碍是找出标签,以便它可以正确地打印到它的占位符。不需要整个findTotals方法。我不需要比上面列出的三个变量更多的变量来使它工作。我不断出错的一个原因是,我试图使用一个变量作为标签,将其打印到报表中的不同位置,这显然是不允许的。我做了几个相同的标签,确保给它们起不同的名字等等,而不是使用一个标签,把它贴在任何地方。

因此,在三个不同的报告部分中,X不是X,而是X、Y、Z(所有相同但不同的标识符),并在需要的地方将其粘在一起。伙计,现在看来很明显了,再一次谢谢。

票数 0
EN

Stack Overflow用户

发布于 2015-03-25 23:38:44

您应该能够将字符串与"True“进行比较。即

if(string.Compare(rpt.Fields"Custom_163".Value.ToString(),“真”) == 0)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29265783

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档