はじめに
AccessやSQL Server、Oracleなどのデータベースに格納してあるデータをクエリで取り出し、一覧表を表示させるアプリケーションを作成したいときがあります。「SPREAD for .NET 2.5J Windows Forms Edition」のコンポーネントを利用することで、列の並び替えやフィルタ機能をプロパティの操作だけで簡単に実現することができます。
そこで、これらの機能を使い、Accessのデータベースから2つのフィールドデータを取り出して表示し、列のソートやフィルタ機能を使って操作できるアプリケーションを作ってみました。
対象読者
Visual Basic 2005またはVisual C# 2005を使ってプログラムを作ったことのある人。
必要な環境
Visual Basic 2005またはVisual C# 2005、Visual Studio 2005でプログラムが作れる環境。
プログラム実行時の注意事項
本稿の実行ファイル(バイナリファイル)を動かすには、zipファイルに同梱してある以下のファイルが必要になります。
- FarPoint.Win.SpreadJ.dll(本体アセンブリ)
- FarPoint.Win.dll(共通アセンブリ)
- Farpoint.CalcEngine.dll(表計算エンジンDLL)
これらのファイルを、実行プログラムと同じフォルダに格納します。
また、.NET Framework 2.0から追加されたクラスやメンバを使用しているので、.NET Framework 2.0がインストールされていることが必須条件です。
コンポーネントのインストール
はじめてSPREAD for .NET 2.5J Windows Forms Editionを使用する方は、プロジェクトにSPREAD for .NET 2.5J Windows Forms Editionをインストールし、プロジェクトに追加する必要があります。インストーラは、グレープシティのWebページからダウンロードできますので、ここからダウンロードしてインストールしてください。
製品ページ左側の[ダウンロード]-[トライアル版]をクリックし、ダウンロード方法([FTP]または[HTTP])を選択すれば入手できます。ファイルはLZH形式で圧縮されています。
有償のコンポーネントですが、プロダクトキーを入力せずにインストールすることで、トライアル版として使用できます。制限事項などの詳細については、インストーラに同梱されているリリースノートを参照ください。
コントロールの追加
SPREAD for .NET 2.5J Windows Forms Editionをインストールしたら、ツールボックスに専用のタブを作成し、SPREAD for .NET 2.5J Windows Forms Editionのコンポーネントを追加します。追加するコンポーネントは、「.NET Frameworkコンポーネント」の「名前空間」が「FarPoint.Win.Spread」で始まる名前空間のコンポーネント「FpSpread」です。
GUIの作成
GUIの設定は非常に簡単です。fpSpreadコンポーネントを配置し、CheckBoxを3つ配置します。
データベースへの接続設定
データベースへの接続は、fpSpreadコンポーネントのタスクトレイからウィザードを使ってデータソースの設定を行います。この操作は、Visual BasicもVisual C#も同じです。
なお、ここでは「guiter.mdb」というデータベースファイルを使用しますので、コンピュータにコピーしておいてください。
Me.製品一覧TableAdapter.Fill(Me.GuiterDataSet.製品一覧)
this.製品一覧TableAdapter.Fill(this.guiterDataSet.製品一覧);
- fpSpreadコンポーネントを配置したら、タスクトレイを開き[データソースの選択]-[プロジェクトデータソースの追加]をクリックします。
- [データベース]をクリックして[次へ]ボタンを押します。「データ接続の選択」ダイアログボックスが開きますので、[新しい接続]ボタンを押します。そして、「接続の追加」ダイアログボックスで[Accessデータベース]を選び、[参照]ボタンを押してサンプルデータベース「guiter.mdb」を指定します。
- [接続の確認]ボタンを押してデータベースファイルに接続できることを確認し、OKボタンを押します。
- データベースファイルをプロジェクトにコピーするかどうかを聞いてきますので[いいえ]を押してウィザードを進めます。そして、「データベースオブジェクトの選択」で[テーブル]-[製品一覧]をクリックして[メーカー名]と[製品名]をチェックします。ここで選んだフィールドデータが選択クエリとなり、fpSpreadコンポーネントに表示されます。
-
[完了]ボタンを押してウィザードを閉じると、フォームデザイナに次の3つのコンポーネントが作成されています。
- guiterDataSet
- 製品一覧BindingSource
- 製品一覧TableAdapter
これで、Accessのデータベースに接続して選択クエリを実行し、その結果を取り出してfpSpreadコンポーネントに連結する処理が出来上がりました。
ソートとオートフィルタの設定
列データをソートしたり、フィルタを設定したりしてデータ表示を絞り込む機能は、それぞれのプロパティをTrueかFalseに設定するだけで実現できます。
ソートの設定
2つのCheckBoxを使い、列「メーカー名」と「製品名」のデータを並び替える機能を組み込みます。
データのソートは、操作対象の列をColumnsオブジェクトで指定し、AllowAutoSortプロパティをTrueに設定します。ソート機能が組み込まれると、列見出しに△マークが付加されます。
AllowAutoSortプロパティにFalseを指定すると、ソート機能が解除されます。
Private Sub CheckBox1_CheckedChanged(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles CheckBox1.CheckedChanged If Me.CheckBox1.Checked = True Then FpSpread1.ActiveSheet.Columns(0).AllowAutoSort = True Else FpSpread1.ActiveSheet.Columns(0).AllowAutoSort = False End If End Sub Private Sub CheckBox2_CheckedChanged(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles CheckBox2.CheckedChanged If Me.CheckBox2.Checked = True Then FpSpread1.ActiveSheet.Columns(1).AllowAutoSort = True Else FpSpread1.ActiveSheet.Columns(1).AllowAutoSort = False End If End Sub
private void CheckBox1_CheckedChanged(object sender, EventArgs e) { if(CheckBox1.Checked == true){ fpSpread1.ActiveSheet.Columns[0].AllowAutoSort = true; }else{ fpSpread1.ActiveSheet.Columns[0].AllowAutoSort = false; } } private void CheckBox2_CheckedChanged(object sender, EventArgs e) { if (CheckBox2.Checked == true) { fpSpread1.ActiveSheet.Columns[1].AllowAutoSort = true; }else{ fpSpread1.ActiveSheet.Columns[1].AllowAutoSort = false; } }
オートフィルタの設定
フィルタ機能は、操作対象の列をColumnsオブジェクトで指定し、AllowAutoFilterプロパティをTrueに設定します。フィルタ機能が組み込まれると、列見出しにフィルタ用のアイコンが付加されます。
AllowAutoFilterプロパティにFalseを指定すると、フィルタ機能が解除されます。
また、FpSpreadクラスのGetRootWorkbook
メソッドを使って、現在アクティブなSpreadViewオブジェクトを取得してSetImageメソッドを使うと、フィルタ実行前後のアイコンを好きなイメージに入れ替えることができます。
Private Sub CheckBox3_CheckedChanged(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles CheckBox3.CheckedChanged If Me.CheckBox3.Checked = True Then FpSpread1.ActiveSheet.Columns(0).AllowAutoFilter = True Else FpSpread1.ActiveSheet.Columns(0).AllowAutoFilter = False End If '行フィルタリング実施中のアイコンを設定します Dim sv As FarPoint.Win.Spread.SpreadView = _ FpSpread1.GetRootWorkbook() sv.SetImage(FarPoint.Win.Spread.SpreadView.FilterActive, _ Image.FromFile("j:\SearchFolderHS.bmp")) End Sub
private void CheckBox3_CheckedChanged(object sender, EventArgs e) { if (CheckBox3.Checked == true) { fpSpread1.ActiveSheet.Columns[0].AllowAutoFilter = true; }else{ fpSpread1.ActiveSheet.Columns[0].AllowAutoFilter = false; } FarPoint.Win.Spread.SpreadView sv = fpSpread1.GetRootWorkbook(); sv.SetImage(FarPoint.Win.Spread.SpreadView.FilterActive, Image.FromFile("j:/SearchFolderHS.bmp")); }
まとめ
fpSpreadコンポーネントを使うと、ワークシートにソートやフィルタ機能を簡単に組み込むことができます。VS標準のDataGridViewコントロールは、ソート機能は実装されていますがオートフィルタ機能は実装されていません。手軽にフィルタ機能を組み込めるfpSpreadコンポーネントは魅力的なコンポーネントになると思います。