SHOEISHA iD

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

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

ComponentZine(MultiRow)

明細書の入力・印刷・Excelデータへの保存を行う.NETアプリケーションを作成する

MultiRow for Windows Forms 6.0Jで多機能明細書作成プログラムを作成する

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

ダウンロード 実行ファイル (1.1 MB)
ダウンロード サンプルソース (375.5 KB)

ヘッダセクションの作成

 ヘッダセクションには、明細書に必要な顧客情報や受注番号、受注年月日を表示するためのセルを配置します。「お買い上げ明細書」と表示したLabelCellだけ、Borderプロパティを「3D罫線」に設定します。

ヘッダセクションのレイアウトデザイン:黒い枠線のあるセルは説明上表示しているものなので、実際は罫線なしに設定する
ヘッダセクションのレイアウトデザイン:黒い枠線のあるセルは説明上表示しているものなので、実際は罫線なしに設定する

 また、郵便番号を入力するセルだけはマスク型セル(MaskedTextBoxCell)を使用し、Maskプロパティを「郵便番号」に設定しています。

Maskプロパティを「郵便番号」に設定
Maskプロパティを「郵便番号」に設定

 ヘッダセクションは、背景をグラデーションに塗りつぶします。これは、ColumnHeaderSectionオブジェクトの次のプロパティを設定します。

プロパティ 設定値
GradientColors [192, 255, 255]; White
GradientDirection Side
GradientStyle Vertical

 また、ヘッダ内のセルが入力可能になるように、次のプロパティを設定します。

プロパティ 設定値
ReadOnly False
Selectable True

フッタセクションの作成

 ヘッダセクションができたら、今度はフッタセクションを作成します。ここは、入力された金額の合計を集計し、送料と請求金額を入力するエリアにします。

 まず、Visual Studioのメニューから[テンプレート]-[追加]-[列フッタ]を選択します。グリッドにColumnFooterSectionオブジェクトが追加され、列フッタを作成できるようになります。ここには下記の4つのセルを配置します。

  • ラベル型セル(LabelCell)
  • サマリ型セル(SummaryCell)
  • マスク型セル(MaskedTextBoxCell)
  • コンボボックス型セル(ComboBoxCell)
Visual Studioのメニューから[テンプレート]-[追加]-[列フッタ]を選択
Visual Studioのメニューから[テンプレート]-[追加]-[列フッタ]を選択
フッタセクションのレイアウトデザイン
フッタセクションのレイアウトデザイン

サマリ型セル(SummaryCell)の設定

 サマリ型セル(SummaryCell)は、セルの値の集計と結果の表示を提供します。SummaryCellを使用すると、コードを記述せずに計算式を定義でき、次の各計算をプロパティの設定だけで行わせることができます。ただし、集計できるのは列セルだけで、ヘッダやフッタに配置したセルは集計の対象にはできません。

  • 任意の列(セル)の集計
    • 合計 (Sum)
    • 平均 (Average)
    • 最小値 (Min)
    • 最大値 (Max)
    • 値の個数 (Count)
  • 演算子による計算:+、-、*、/、丸括弧()
  • 非表示行を集計するかどうかの指定
  • ユーザー定義の計算式

 SUM、Averageなどはあらかじめ計算式がコンポーネントに組み込まれていますので、計算したいセルをプロパティで指定するだけです。演算子による計算式を組み込む場合は、直接指揮をプロパティに設定します。

 このプログラムでは、Rowセクションに配置したサマリ型セルでは計算式による計算を、フッタに配置したサマリ型セルではSumによる合計計算を自動的に行うように設定します。

 では、最初にRowセクションに配置したサマリ型セル(SummaryCell1)に、単価と個数から自動的に合計金額を算出する設定を組み込みます。

  1. Rowセクションに配置したSummaryCell1を選択し、プロパティウィンドウでCalculationプロパティのドロップダウンリストから「Expression」を選択する。
  2. Calculationプロパティの左にある[+(プラスマーク)]をクリックしてプロパティを展開し、ExpressionStringに次の式を設定する。
    =NumericUpDownCell1*NumericUpDownCell2
    
    ExpressionStringに直接計算式を入力する
    ExpressionStringに直接計算式を入力する

 次に、フッタに配置したサマリ型セル(SummaryCell2)に「合計金額」の列の合計を集計するように設定します。

 

  1. フッタに配置したSummaryCell2を選択し、プロパティウィンドウでStyleプロパティを展開して、Formatプロパティを「"\"###,##」と設定する。
  2. Calculationプロパティのドロップダウンリストから「MathStatistics」を選択する。
  3. Calculationプロパティの右にある[+(プラスマーク)]をクリックし、MathStatisticsオブジェクトのプロパティを展開して、StatisticsTypeプロパティを「Sum」に設定する。
  4. CellNameプロパティで、集計対象のセルを「SummaryCell1」に設定する。

 これで、SummaryCell1セルで計算された合計金額が次々と、サマリ型セル(SummaryCell2)で合計され表示されていきます。Formatプロパティを「"\"###,##」と設定しているので、集計された金額は「\210,000」というように書式が整えられて表示されます。

 なお今回、「"\"###,##」という書式を使用しているので、セルに値がない場合に"\"のみが出力されます。そのため、最初のサマリ型セル(SummaryCell1)のFormatプロパティには何も設定しないでください。設定してしまうと、計算結果が文字列になってしまい、SummaryCell2で合計計算ができなくなってしまいます。なお、「"\"###,##」のかわりに.NET Frameworkの通貨書式「c」を使うと、この現象を回避できます。

Calculationプロパティで集計方法と集計対象セルを指定する
Calculationプロパティで集計方法と集計対象セルを指定する

コンボボックス型セル(ComboBoxCell)の設定

 コンボボックス型セル(ComboBoxCell)は、.NET FrameworkのComboBoxコントロール(System.Windows.Forms.ComboBox)と同等の機能を持ったセルで、ユーザーはドロップダウンリストから値を入力できるようになります。

 ここでは、3種類の送料をリストから選べるように、「Items」プロパティのコレクションエディタで次のようにリスト項目を設定します。

  • \0
  • \500
  • \1000

 また、「DropDownStyle」を「DropDown」にすると、セルの計上が3Dボタン型からフラットなリストボックススタイルに変わります。

マスク型セル(MaskedTextBoxCell)の設定

 このセルでは、最終的な請求金額を入力するようにするため、Maskプロパティに「\\##########」と設定しておきます。また、このフッタセクションも背景色にグラデーションを設定し、フッタ内のセルが入力可能になるように、次のプロパティを設定します。

プロパティ 設定値
GradientColors [192, 255, 255]; White
GradientDirection Side
GradientStyle Vertical
ReadOnly False
Selectable True

 以上で、グリッドのデザインが完成です。[ビルド]-[リビルド]メニューを実行し、デザイナでの修正をフォームのGcMultiRowコンポーネントに反映させます。

次のページ
Excelファイルへの保存処理

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

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

もっと読む

この記事の著者

瀬戸 遥(セト ハルカ)

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

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

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

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/4718 2009/12/22 16:00

おすすめ

アクセスランキング

アクセスランキング

イベント

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

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

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

メールバックナンバー

アクセスランキング

アクセスランキング