Reports for WinForms
Microsoft Access レポートのインポート
C1Report デザイナの使い方 > Microsoft Access レポートのインポート

C1Report デザイナの最も強力な機能の1つは、Microsoft Access を使って作成されたレポートをインポートできることです。*.mdb ファイルのほかにも、Access 2007 の *.accdb ファイルにも対応しています。この機能を使用するには、Microsoft Access がコンピュータにインストールされている必要があります。ただし、レポートをデザイナにインポートしてしまえば、Microsoft Access は必要なくなります。

Access ファイルからレポートをインポートするには、[インポート]ボタンをクリックするか、[ファイル|インポート]メニューを選択します。ダイアログボックスが表示され、インポートするファイルの名前の入力を求められます。

デザイナは自動的にファイルをスキャンし、インポートするファイルを選択できるダイアログを表示します。

ダイアログでは、インポート処理を行う前に既存のすべてのレポート定義をクリアするかどうか指定できます。

インポート処理が正しく動作すると、ソースレポートのほとんどの要素が処理されます。ただし、次に挙げるいくつかの例外があります。

上のような制限を受けるレポートは比較的少ないですが、レポートをインポートしたら、すべてのレポートをプレビューし、正しく動作するかどうかを確認してください。

Nwind.mdb ファイルをインポートする

デザイナが実際に行う処理の一例として、製品に付属の NWind.mdb ファイルをインポートしてみます。このファイルには、次に示す13のレポートが含まれています。そこで、これらのレポートに対する処理について説明します。C1Report に付属する NWind.XML ファイルには、以下で説明する変更がすべて行われています。

  1. Alphabetical List of Products(製品のアルファベット順リスト)

    処理は不要です。

  2. Catalog(カタログ)

    処理は不要です。

  3. Customer Labels(顧客ラベル)

    処理は不要です。

  4. Employee Sales by Country(地域別従業員売上高)

    このレポートには、手作業で変換する必要があるコードが含まれます。次のコードを Group 1 のヘッダセクションのOnPrint プロパティに割り当てます。

    Visual Basic コードの書き方

    Visual Basic
    コードのコピー
    If SalespersonTotal > 5000 Then            
      ExceededGoalLabel.Visible = True            
      SalespersonLine.Visible = True            
    Else            
      ExceededGoalLabel.Visible = False            
      SalespersonLine.Visible = False            
    End If
    

    C# コードの書き方

    C#
    コードのコピー
    if (SalespersonTotal > 5000)                 
    {                
      ExceededGoalLabel.Visible = true;                
      SalespersonLine.Visible = true;                
    } else {                
      ExceededGoalLabel.Visible = false;                
      SalespersonLine.Visible = false;               
    }
    

  5. Invoice(請求書)

    処理は不要です。

  6. Products by Category(カテゴリ別製品)

    処理は不要です。

  7. Sales by Category(カテゴリ別売上高)

    このレポートには、インポートされないグラフコントロールが含まれます。グラフをレポートに追加するには、アンバウンドピクチャフィールドを使用します。イベントハンドラを記述してグラフを作成し、それを画像としてアンバウンドピクチャフィールドに割り当てます。

  8. Sales by Category Subreport(カテゴリ別売上高サブレポート)

    処理は不要です。

  9. Sales by Year(年度別売上高)

    このレポートには、手作業で変換する必要があるコードおよび Form オブジェクトへの参照が含まれます。Form オブジェクトを置き換えるには、RecordSource プロパティを編集して [Show Details] パラメータを追加します。

    Visual Basic コードの書き方

    Visual Basic
    コードのコピー
    PARAMETERS (Beginning Date) DateTime 1/1/1994,                    
      (Ending Date) DateTime 1/1/2001,                    
      (Show Details) Boolean False; ...
    

    C# コードの書き方

    C#
    コードのコピー
    PARAMETERS [Beginning Date] DateTime 1/1/1994,                        
      [Ending Date] DateTime 1/1/2001,                       
      [Show Details] Boolean False; ...
    

    レポートのOnOpen プロパティで新しいパラメータを使用します。

    Visual Basic コードの書き方

    Visual Basic
    コードのコピー
    Dim script As String = _                            
      "bDetails = [Show Details]" & vbCrLf & _                            
      "Detail.Visible = bDetails" & vbCrLf & _                            
      "[Group 0 Footer].Visible = bDetails" & vbCrLf & _                            
      "DetailsLabel.Visible = bDetails" & vbCrLf & _                            
      "LineNumberLabel2.Visible = bDetails" & vbCrLf & _                            
      "Line15.Visible = bDetails" & vbCrLf & _                           
      "SalesLabel2.Visible = bDetails" & vbCrLf & _                            
      "OrdersShippedLabel2.Visible = bDetails" & vbCrLf & _                            
      "ShippedDateLabel2.Visible = bDetails" & vbCrLf & _                            
      "Line10.Visible = bDetails"                        
    c1r.Sections.Detail.OnPrint = script
    

    C# コードの書き方

    C#
    コードのコピー
    string script = "bDetails = [Show Details]" +                                  
      "Detail.Visible = bDetails\r\n" +                                  
      "[Group 0 Footer].Visible = bDetails\r\n" +                                  
      "DetailsLabel.Visible = bDetails\r\n" +                                  
      "LineNumberLabel2.Visible = bDetails\r\n" +                                  
      "Line15.Visible = bDetails\r\n" +                                  
      "SalesLabel2.Visible = bDetails\r\n" +                                  
      "OrdersShippedLabel2.Visible = bDetails\r\n" +                                 
      "ShippedDateLabel2.Visible = bDetails\r\n" +                                 
      "Line10.Visible = bDetails";                                
    c1r.Sections.Detail.OnPrint = script;
    

    最後に、2行のコードを書き換える必要があります。

    Visual Basic コードの書き方

    Visual Basic
    コードのコピー
    Sections ("Detail").OnPrint = _                                    
      "PageHeader.Visible = True"                                    
    Sections("Group 0 Footer).OnPrint = _                                    
      "PageHeader.Visible = False"
    

    C# コードの書き方

    C#
    コードのコピー
    Sections ("Detail").OnPrint =                                          
      "PageHeader.Visible = true";                                        
    Sections("Group 0 Footer).OnPrint =                                         
      "PageHeader.Visible = false";
    

  10. Sales by Year Subreport(年度別売上高サブレポート)

    処理は不要です。

  11. Sales Totals by Amount(金額別総売上高)

    このレポートには、手作業で変換する必要があるコードが含まれます。次のコードをページヘッダセクションのOnPrint プロパティに割り当てます。

    Visual Basic コードの書き方

    Visual Basic
    コードのコピー
    PageTotal = 0
    

    C# コードの書き方

    C#
    コードのコピー
    PageTotal = 0;
    

    次のコードを詳細セクションのOnPrint プロパティに割り当てる必要があります。

    Visual Basic コードの書き方

    Visual Basic
    コードのコピー
    PageTotal = PageTotal + SaleAmount                                                    
    HiddenPageBreak.Visible = (Counter = 10)
    

    C# コードの書き方

    C#
    コードのコピー
    PageTotal = PageTotal + SaleAmount;                                                        
    HiddenPageBreak.Visible = (Counter = 10);
    

  12. Summary of Sales by Quarter(四半期別売上高のサマリー)

    このレポートには、四半期順にソートされるグループがあります(前述の4番目の例外を参照)。これを解決するには、RecordSource プロパティを次のように変更することによって、ShippedDate 四半期の値を含むフィールドをソースデータセットに追加します。
    SELECT DISTINCTROW Orders.ShippedDate,
    Orders.OrderID,
    [Order Subtotals].Subtotal,
    DatePart("q",Orders.ShippedDate) As ShippedQuarter
    FROM Orders INNER JOIN [Order Subtotals]
    ON Orders.OrderID = [Order Subtotals].OrderID;
    WHERE (((Orders.ShippedDate) Is Not Null));

    新しいフィールド ShippedQuarter を使用するように、グループのGroupBy プロパティを変更します。

  13. Summary of Sales by Year(年度別売上高のサマリー)

    処理は不要です。

以上をまとめると、NorthWind データベースからインポートされる 13 のレポートのうち、編集の必要がないレポートが8つ、コードを変換する必要があるレポートが3つ、SQL 文を変更する必要があるレポートが1つ、置き換えられないグラフコントロールがあるレポートが1つあるということになりますが、それでも編集に必要な手間はわずかです。インポート機能を使用すれば既存レポートの移行がいかに簡単かお分かりいただけたことと思います。