0

次のような、特定のクライアントの従業員からのタイムシート エントリを表す行のテーブルを示す RDLC レポートがあります。

Date      Client    Employee  |Work Type |Hours Rate Total Total Invoiced Profit
2012-01-20|Client A|Employee 1|Project A |3.00|30.00|90.00|120.00        |30.00

2012-02-20|Client A|Employee 2|Project B |2.00|40.00|80.00|100.00        |20.00

....................................................................

Totals Client A                           5.00|70.00|170.00|220.00       |50.00

Company annual Fee 2012                              150.00

Total PL                                             200.00

上記のテーブルのデータは、2 つの異なるテーブル (各クライアントに入力された時間を保持する Timesheet Entries テーブルと、クライアントの請求金額を保持する InvoiceEntries テーブル) から取得されます。データの DataTable は、クエリを実行して 2 つのテーブルを結合し、次のようなテーブルを返すことによって設定されます。

Date|Employee|Client|Hours Worked|Rate|Total|Invoiced Amount|Annual Fees

年会費は同じクライアントのすべての行で同じだったので、クライアントごとにデータ行をグループ化し、レポートの下部に合計を表示したいので、コード ビハインドでプログラムで新しい DataTable を作成し、それを使用して入力します行を介してループを実行してDBクエリから取得したDatatableのデータですが、会社を変更した場合にのみ値を持つようにAnnualFeesフィールドを操作し、それ以外の場合はゼロに設定します。したがって、レポート テーブルの下部にある合計フィールドを計算すると正しい値が得られるように、各クライアントの年会費フィールドが 1 回だけ入力されるようにします。

これは非常にうまく機能しましたが、ユーザーは、レポートが実行されるときに、2013 年の年会費がある場合 (レポート期間が 2 年以上をカバーするように)、各年ごとに個別にリストしたいと要求しました。クライアントのタイムシート エントリの合計。

年会費が存在する年数が不明であるため、明らかに、データ テーブルで余分なフィールドを使用することはできません。

これを実装できるアイデアはありますか?

ありがとう

4

1 に答える 1

0

この問題を解決しました。今後の参考のために、私が行ったことは次のとおりです。 データテーブルに RowType という新しいフィールドを追加しました。コード ビハインドでは、2 つのデータベース呼び出しを行います。1 つはタイムシート エントリを取得するため、もう 1 つは各会社の年会費を取得するためです。それらを使用して、レポートをバインドするために使用されるデータテーブルを構築します。タイムシート エントリを含む行の RowType フィールドは "Project Fees" に等しく、年会費を含む行は "Annual Fees" に設定されています。

次に、新しいフィールドに基づいてレポートに追加の RowGroup を作成し、RowType がいずれかの値を持つ場合に表示/非表示に応じて、その可視性と並べ替えパラメーターを設定しました。

これは機能しているようです。

于 2013-01-23T07:48:44.440 に答える