0

私の質問を読んでくれてありがとう。私の仕事では、1 つのレポート ツールを探しています。これまでのところ、Crystal Reports が選択されています。その理由は、簡単で迅速な開発です。Central Reports のような独自のアプリを作成したいと考えています。グループ化ジェネリック クラスを作成できるかどうかを知る必要があります。Crystal Reports がグループ化の選択肢を提供していることは知っていますが、一度に 1 つのレポートに対してのみです。多くのクライアント (平均 80) と多くのレポート (クライアントあたり 20 ~ 30) があります。つまり、2 人だけで約 1600 ~ 2400 件のレポートを管理するのは困難です。

背後にある概念は次のとおりです。データベース内にテキストがあるクライアントごとに、このテキストはレポートに必要な情報を含むビューです。したがって、クライアントごとに異なる情報を表示する 1 つのレポートを作成できます。複数のクライアント用の 1 つのレイアウト。これは新しいプロジェクトの一部であり、複数のレイアウトの必要性をなくし、それらすべてを 1 つのアプリケーションに集約できる方法です。

このクラスは何をしますか?

テキストを取得し、フィールドを分析し、この分析に基づいて、グループ化の可能性を示すウィンドウ フォームを送信します。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 に答える