使用Crystal Reports进行常规分组

本文关键字:常规 Crystal Reports 使用 | 更新日期: 2023-09-27 18:26:57

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

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

这个班会做什么?

它将获取文本,分析字段,并基于此分析发送一个显示分组可能性的windows表单。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

我要感谢所有属于这个伟大社区的人,顺致敬意,迭戈。

使用Crystal Reports进行常规分组

我会尽量回答你的问题。

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

  1. 如果客户端的列相同,那么为所有客户端编写一个具有"If"条件的公式并在组中使用该公式并创建一个具有客户端详细信息的参数是一项简单的工作。您的公式应该是,如果在参数中选择了客户端X,则报表组公式将接受此输入并显示报表。如果你愿意,你甚至可以限制客户的详细信息。

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

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

这是解决方案,我想向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("{", "") + "}";

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