SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

ComponentZine(ComponentOne)

Accessのデータベースを帳票化する-クエリ結果によって値を入れ替える

クエリ結果によって帳票のタイトルを入れ替える

  • X ポスト
  • このエントリーをはてなブックマークに追加

Fieldオブジェクトの働き

 このプログラムでは、パラメータクエリを実行した結果をレポートにする際に、メーカー名によってレポートのヘッダーの背景色と文字色を変えるようにします。これは、ヘッダーの部分に「Fields」というオブジェクト(Labelのようなオブジェクト)を組み込み、そこに文字列の設定や背景色の設定を行います。

 このFieldはレポート内にいくつも組み込むことができ、表示位置の指定や重なりの順序を指定できます。

 そこで、ヘッダー部にそれぞれのメーカーの簡単な説明文を表示するようにします。説明文はコード内に記述しそれを呼び出します。

ヘッダー部のFieldオブジェクト。2つのFieldを重ねて作成する
ヘッダー部のFieldオブジェクト。2つのFieldを重ねて作成する

タイトルの作成

 最初にレポートのタイトルを作成します。

 前回作成した「抽出実行」ボタンのClickイベントハンドラの、RecordSourceプロパティにSQL文字列を代入したコードの、次の行にコードを組み込んでいきます。

説明文の作成

 まず、メーカー説明用の文章(ここでは便宜上説明文は3つだけにしました)を作り、配列に格納しておきます。

Visual Basic
Dim exp(2) As String

exp(0) = "アメリカの老舗ギターブランド...愛されてきました。"
exp(1) = "日本を代表するギターメーカー...揃っています。"
exp(2) = "ポールリードスミスは、Gibson、...なりました。"
C#
String[] exp = new String[3];

exp[0] = "アメリカの老舗ギターブランド...愛されてきました。";
exp[1] = "日本を代表するギターメーカー...揃っています。";
exp[2] = "ポールリードスミスは、Gibson、...なりました。";

古いタイトル用Fieldの削除

 新しいタイトル用Fieldオブジェクトをメーカー名を付けて作成します。

 レポートには、既に「製品情報」というFieldが組み込まれています。これは、C1Reportコンポーネントのレポートデザイナでレポートを作成したときに既に組み込まれています。

 そこで、まずこのFieldを削除し、次にメーカー名付きの新しいタイトルを組み込みます。

「製品情報」というFieldが組み込まれているのでこれを削除する
 「製品情報」というFieldが組み込まれているのでこれを削除する

 削除はデザイナで行っても構いませんが、このプログラムではパラメータクエリを実行するたびにタイトルを作り直しますので、コードで削除します。タイトル用のFieldは、C1Reportコンポーネントの、Sectionオブジェクトの下にあります。このオブジェクトは、Sectionsコレクションになっているので、Sectionsプロパティの引数に「SectionTypeEnum.Header」を指定することで、ヘッダー部にあるFieldsコレクションを参照できるようになります。

 Fieldの削除は、FieldsコレクションのRemoveメソッドを実行します。引数は、Fieldオブジェクトのインデックス番号またはオブジェクト名です。ヘッダー部のFieldオブジェクトは、この時点では1つしかありませんから、「0」を指定してRemoveメソッドを実行します。

 なお、C#ではSectionオブジェクトを一度オブジェクト変数に格納し、そこからFieldsプロパティにアクセスします。

Visual Basic
Dim f As Field

With Me.C1Report1.Sections(SectionTypeEnum.Header)
    .Fields.Remove(0)
C#
Field f ;
Section s;
s = c1Report1.Sections[SectionTypeEnum.Header];
s.Fields.Remove(0);

新しいタイトル用Fieldの作成

 次に、新しいタイトル用Fieldを作成します。これは、FieldsコレクションのAddメソッドを実行します。引数は、オブジェクト名、表示する文字列、表示位置、サイズの6つです。表示する文字は、「製品情報 - 」とComboBoxで選択されたメーカー名を組み合わせます。

 表示位置は、Fieldを配置する左端と上端の位置で、TWIP単位で指定します。サイズはFieldの幅と高さで、これもTWIP単位で指定します。

 作成したら、AddメソッドはFieldオブジェクトへの参照を返してきますので、これをオブジェクト変数に格納し、文字のサイズ、太字、文字色を設定します。

Visual Basic
f = .Fields.Add("title", "製品情報 - " & _
             Me.ComboBox1.SelectedItem, 100, 100, 8000, 1500)
f.Font.Size = 24
f.Font.Bold = True
f.ForeColor = Color.Beige
C#
f = s.Fields.Add("title", "製品情報 - " +
              ComboBox1.SelectedItem, 100, 100, 8000, 1500);
    f.Font.Size = 24;
    f.Font.Bold = true;
    f.ForeColor = Color.Beige;

説明用のFieldオブジェクトの削除

 既に説明用のFieldオブジェクトがあれば、これを削除します。

 もし、古い説明文が残っていたままだと、その上に新しいFieldが重なってしまいます。Fieldはデフォルトでは背景色が透明で文字だけが表示されるようになっているので、2つの文章が重なって表示されてしまうため、古い説明文のFieldを削除します。

 ただし、初めてプログラムを実行したときは、古い説明文のFieldはありませんから、FieldsコレクションのCountプロパティでFieldsオブジェクトの数をチェックしてから実行します。

Visual Basic
If .Fields.Count >= 2 Then
    .Fields.Remove("exp")
End If
C#
if(s.Fields.Count >= 2){
    s.Fields.Remove("exp");
}

 これで、パラメータクエリを実行するたびに、選択されたメーカー名のついたタイトルが作成され表示されるようになります。

次のページ
説明用Fieldの作成

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
ComponentZine(ComponentOne)連載記事一覧

もっと読む

この記事の著者

瀬戸 遥(セト ハルカ)

8ビットコンピュータの時代からBASICを使い、C言語を独習で学びWindows 3.1のフリーソフトを作成、NiftyServeのフォーラムなどで配布。Excel VBAとVisual Basic関連の解説書を中心に現在まで40冊以上の書籍を出版。近著に、「ExcelユーザーのためのAccess再...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/1815 2008/06/24 15:07

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング