0

谢谢阅读我的问题。在我的工作中,我们正在寻找一种报告工具。到目前为止,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

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

4

2 回答 2

1

我会尽量回答我理解你的问题。

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

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

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

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

于 2013-08-09T13:36:59.573 回答
0

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

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

于 2013-08-09T21:37:35.453 回答