Fieldオブジェクトの働き
このプログラムでは、パラメータクエリを実行した結果をレポートにする際に、メーカー名によってレポートのヘッダーの背景色と文字色を変えるようにします。これは、ヘッダーの部分に「Fields」というオブジェクト(Labelのようなオブジェクト)を組み込み、そこに文字列の設定や背景色の設定を行います。
このFieldはレポート内にいくつも組み込むことができ、表示位置の指定や重なりの順序を指定できます。
そこで、ヘッダー部にそれぞれのメーカーの簡単な説明文を表示するようにします。説明文はコード内に記述しそれを呼び出します。
タイトルの作成
最初にレポートのタイトルを作成します。
前回作成した「抽出実行」ボタンのClickイベントハンドラの、RecordSourceプロパティにSQL文字列を代入したコードの、次の行にコードを組み込んでいきます。
説明文の作成
まず、メーカー説明用の文章(ここでは便宜上説明文は3つだけにしました)を作り、配列に格納しておきます。
Dim exp(2) As String exp(0) = "アメリカの老舗ギターブランド...愛されてきました。" exp(1) = "日本を代表するギターメーカー...揃っています。" exp(2) = "ポールリードスミスは、Gibson、...なりました。"
String[] exp = new String[3]; exp[0] = "アメリカの老舗ギターブランド...愛されてきました。"; exp[1] = "日本を代表するギターメーカー...揃っています。"; exp[2] = "ポールリードスミスは、Gibson、...なりました。";
古いタイトル用Fieldの削除
新しいタイトル用Fieldオブジェクトをメーカー名を付けて作成します。
レポートには、既に「製品情報」というFieldが組み込まれています。これは、C1Reportコンポーネントのレポートデザイナでレポートを作成したときに既に組み込まれています。
そこで、まずこのFieldを削除し、次にメーカー名付きの新しいタイトルを組み込みます。
削除はデザイナで行っても構いませんが、このプログラムではパラメータクエリを実行するたびにタイトルを作り直しますので、コードで削除します。タイトル用のFieldは、C1Reportコンポーネントの、Sectionオブジェクトの下にあります。このオブジェクトは、Sectionsコレクションになっているので、Sectionsプロパティの引数に「SectionTypeEnum.Header」を指定することで、ヘッダー部にあるFieldsコレクションを参照できるようになります。
Fieldの削除は、FieldsコレクションのRemoveメソッドを実行します。引数は、Fieldオブジェクトのインデックス番号またはオブジェクト名です。ヘッダー部のFieldオブジェクトは、この時点では1つしかありませんから、「0」を指定してRemoveメソッドを実行します。
なお、C#ではSectionオブジェクトを一度オブジェクト変数に格納し、そこからFieldsプロパティにアクセスします。
Dim f As Field With Me.C1Report1.Sections(SectionTypeEnum.Header) .Fields.Remove(0)
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オブジェクトへの参照を返してきますので、これをオブジェクト変数に格納し、文字のサイズ、太字、文字色を設定します。
f = .Fields.Add("title", "製品情報 - " & _ Me.ComboBox1.SelectedItem, 100, 100, 8000, 1500) f.Font.Size = 24 f.Font.Bold = True f.ForeColor = Color.Beige
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オブジェクトの数をチェックしてから実行します。
If .Fields.Count >= 2 Then .Fields.Remove("exp") End If
if(s.Fields.Count >= 2){ s.Fields.Remove("exp"); }
これで、パラメータクエリを実行するたびに、選択されたメーカー名のついたタイトルが作成され表示されるようになります。