【问题标题】:Generic grouping with Crystal Reports使用 Crystal Reports 进行通用分组
【发布时间】:2013-08-09 13:05:56
【问题描述】:

感谢阅读我的问题。在我的工作中,我们正在寻找一种报告工具。到目前为止,Crystal Reports 一直是您的选择。原因是开发简单快速。我们想创建自己的应用程序,例如 Central Reports。我需要知道,如果我可以创建一个分组泛型类。我知道 Crystal Reports 提供了分组选择的可能性,但是一次只能用于一个报表。我们有很多客户(平均 80 个),许多报告(每个客户 20-30 个)。所以,是的,只有两个人很难维持大约 1600-2400 份报告。

背后的概念是:对于每个客户,我们在数据库中都有一个文本,这个文本是一个包含报表所需信息的视图。所以我们可以有一份报告,显示给客户的不同信息。为多个客户提供一个布局,这是新项目的一部分,我发现这是一种消除对多个布局的需求并能够将所有布局聚合到一个应用程序中的方法。

这个类会做什么?

它将获取文本,分析字段,并基于此分析发送一个显示分组可能性的窗口表单。 Crystal Reports 已经这样做了,但是您必须手动设置每个报表的分组和公式选项。我们能否创建一个可以自动完成这项工作的类?

更新:

对于动态列选择,我得到了这个解决方案:

 if (chbCode.Checked)
        {
            columnNo++;
            query = query.Insert(query.Length, "Codinome as Column" +
            columnNo.ToString());

            paramField = new ParameterField();
            paramField.Name = "col" + columnNo.ToString();
            paramDiscreteValue = new ParameterDiscreteValue();
            paramDiscreteValue.Value = "Codinome";
            paramField.CurrentValues.Add(paramDiscreteValue);
            //Add the paramField to paramFields
            paramFields.Add(paramField);
        }
        if (chbFirstName.Checked)
        {
            columnNo++;
            if (query.Contains("Column"))
            {
                query = query.Insert(query.Length, ", ");
            }
            query = query.Insert(query.Length, "NomeEmpresa as Column" +
            columnNo.ToString());

            paramField = new ParameterField();
            paramField.Name = "col" + columnNo.ToString();
            paramDiscreteValue = new ParameterDiscreteValue();
            paramDiscreteValue.Value = "Nome da Empresa";
            paramField.CurrentValues.Add(paramDiscreteValue);
            //Add the paramField to paramFields
            paramFields.Add(paramField);
        }

所以我有这个初始表格,只是为了测试。它丑陋,我知道; D. 左侧是复选框。对于每个复选框,报告上都有一个参数字段。这是我得到这个想法的链接:http://www.codeproject.com/Articles/20670/Dynamic-Crystal-Report-with-C?fid=466537&tid=3776908

我要感谢属于这个伟大社区的每一个人, 最好的祝福, 迭戈。

【问题讨论】:

    标签: c# sql vb.net reporting-services crystal-reports


    【解决方案1】:

    我会尽量回答你的问题。

    从您的帖子中,您正在寻找可以满足多个客户的报告。

    1. 如果客户端的列相同,那么它的一项简单工作就是为所有客户端编写一个带有“IF”条件的公式,并在一个组中使用该公式并创建一个包含客户端详细信息的参数。如果在参数客户端 X 中选择了您的公式,则报告组公式将采用此输入并显示报告。如果您希望您甚至可以限制客户详细信息。

    2. 如果列不同,那么创建包含所有客户端列的报告并为字段编写抑制条件的方式有点困难,如果选择客户端 X,则应显示该客户端的列。按照第 1 点创建客户端选择。

    注意:上面给出的解决方案是期望从单个数据库中获取数据。

    【讨论】:

    • 嗨,所有客户端的列都是相同的,数据也来自单个数据库。我会用一些到目前为止我所做的例子来更新我的问题。您的回答非常接近我的需要。我想通过一些例子,我们可以做到; D
    • 说实话,我只是不知道如何实现你的想法;D
    • Siva,可以像我上面发布的代码那样告诉我一种方法吗?
    【解决方案2】:

    这是解决方案,我想感谢 Siva 的提示。

    //Temp string to receive column name
    String temp = Ds.Customer.Column3Column.ToString();
    
    
    //objRpt is my instancied report : objRpt = new CrystalReport1();
    //I set the formulafield[0] with the column name
    objRpt.DataDefinition.FormulaFields[0].Text = "{Customer." + temp.Replace("{", "") + "}";
    

    我创建一个临时字符串来接收将成为标题组的列名。然后我用列设置公式字段文本,这样它就知道如何分组了。

    【讨论】:

    • 很高兴听到您解决了这个问题...不客气
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-06
    相关资源
    最近更新 更多