首页 文章

Crystal Reports的通用分组

提问于
浏览
0

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

我要感谢所有属于这个伟大的社区,最好的问候,迭戈的人 .

2 回答

  • 1

    我将尽力回答我理解你的问题 .

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

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

    • 如果列不同,则创建具有所有客户端列的报告并为字段写入supress条件有点困难,如果选择客户端X,则应显示该客户端的列 . 按照第1点创建客户端选择 .

    注意:假设数据提取来自单个数据库,则给出上述solutins .

  • 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("{", "") + "}";
    

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

相关问题