2016-01-19 15 views
14

私はC#とMicrosoftレポートビューアを使用してIDカードを生成するためにWindowsフォームを使用しています。私はMicrosoftのレポートビューアで列の繰り返しの方向を見つけることができなかった以外はすべてうまくいっています。マイクロソフトのレポートビューアの列の繰り返しの方向

現在のシナリオ

マイレポートの用紙サイズはA4です。各ページに最大10枚の個別カードを表示できます。ページには2つの列があります。各列には5枚のカードが表示されます。画像に示すようにカードを生成しています。列の反復方向は垂直方向です。最初に第1列(1-5)を列挙し、第2列(6-10)を列挙する。

enter image description here

マイ要件

私は、レポートの列の繰り返し方向が水平に下の画像のようになりたいです。最初に1を表示し、次に2と3と4などを表示します。

​​

私は水平ではなく垂直方向に表示したいのはなぜ?

これで用紙が節約されます。たとえば、ユーザーが4つのIDカードを現在のシナリオに応じて生成する場合、左のスペースを再利用できないため、列1に4枚のカードが生成され、ページスペース全体が無駄になります。

列の方向を水平方向に繰り返すと、4つのカードが列1、カード1と3、列2に表示され、カード2と4が表示されます。私は紙を切り取り、後でそれを再利用することができます。

私は多くを検索しましたが、解決策は見つかりませんでした。どんな提案、コメント、リンクも参考になります。私は他の報告書を使うことはできません。前もって感謝します。

+0

報告する?もしそうなら、各身分証明書を生成するコードを投稿できますか? – KidCode

答えて

7

=Ceiling(Fields!CardNo.Value/2) 

としてグループ化あなたの行を定義する行列

を作成し、このようになります

=Fields!CardNo.Value Mod 2 

あなたのレポートのデザインとして、あなたの列グループを定義します。 外部グループは説明の目的で表示されていますが、削除することはできます。

enter image description here

今、あなたはレポートを実行するとき。あなたが任意のグループヘッダーとフッターがなけれ

enter image description here

を探している結果を取得します。レポート出力は

enter image description here

1

この問題は、あなたが次のようにあなたの項目を改造する必要があるマッピングの問題として見ることができます:nの場合

  1. f(n) = floor(n/2) + 1:それは、このようなパターンに従っていることが分かる

    n -> f(n) 
    ---------- 
    1 -> 1 
    2 -> 6 
    3 -> 2 
    4 -> 7 
    5 -> 3 
    6 -> 8 
    7 -> 4 
    8 -> 9 
    9 -> 5 
    10 -> 10 
    
    n is the original position 
    f(n) is the mapped position 
    

    nが偶数

Thのであれば

  • f(n) = (10 + n)/2奇数であります私たちはあなたが次のような方法であなたのアイテムを置く順序を改めたいかもしれません。それは、あなたがこのような何か行うことができます(C#の典型的な数のインデクサ以下れる0からスタート)0-9からの項目のindexを与えられます。

    index++; 
    int newIndex = index % 2 == 0 ? (10 + index)/2 : index/2 + 1; 
    newIndex--; 
    

    をそして、あなたは正しくCardsを配置することができるはずです。

    注:実際にコードが記載されていない場合は、概念的に問題をどのように解決できるかを示します。

  • 1

    別の答えになります。これは、テーブルのグループの有無に関係なく動作します。

    2つのテーブルをレポートに並べて配置します。最初のテーブルを、最初のレコードから開始し、1ずつスキップするクエリに設定します。次に、2番目のレコードを1ずつスキップするクエリに2番目のテーブルを設定します。

    関連する問題