データベース連結処理の実装
まずは、グリッドをデータベースに連結する処理を作成します。この処理は、ボタン「データベースの読み込み」のClickイベントハンドラで行います。
なお、System.Data.OleDb名前空間への参照を追加しておいてください。
また、クエリ文の入力にインプットボックスを使用します。これは、Visual BasicのInputBoxメソッドを使用しますので、C#で使う場合はプロジェクトの参照設定に「Microsoft.VisualBasic」を追加しておいてください。
(1)最初に、DBファイル名の取得と接続文字を作成します。データベースファイル名は、OpenFileDialogコントロールを使用して取得します。また、接続文字列は変数connに作成します。Accessデータベースは、Microsoft.Jet.OLEDB.4.0データベースプロバイダを使用します。
(2)次に、クエリ文(SQL文)の入力を受け付けます。ここでは処理を簡単にするために、インプットボックスに直接クエリ文を入力してもらうことにしました。入力するクエリ文は、データベース側で事前に抽出用クエリを作成し、そのSQL文を入力するだけ済みます。
インプットボックスは、InteractionクラスのInputBoxメソッドを使用し、ユーザーに1行入力ができるダイアログを表示します。引数にプロンプトとタイトル、表示位置などを指定し、ユーザーが入力してOKボタンを押すと入力文字列を返してきます。キャンセルボタンが押されると空白の文字列を返してきますのでこれを判断し、文字列が入力された場合のみ文字列を変数に格納します。キャンセルボタンが押されれば処理を中止します。
なお、InputBoxメソッドは、Visual Basicでは簡単に使用でき引数を省略しても大丈夫なのですが、C#の場合は引数を省略してしまうとエラーになりますので引数の個数が一致するように記述します。
(3)クエリを実行しDataSetにデータを取り込みます。接続文字列とクエリ文が作成できたら、OleDbDataAdapterクラスのインスタンスを作成します。コンストラクタの引数には、作成した接続文字列とクエリ文を指定します。
そして、Fillメソッドを実行します。引数にはDataSetオブジェクトを作成し指定します。Fillメソッドは、指定したデータテーブルからクエリを実行してデータを抽出し、DataSetオブジェクト内にクエリの結果セットをテーブルとして作成します。
(4)作成した結果セットのテーブルを、C1FlexGridコントロールのDataSourceプロパティにセットします。これで、グリッドにクエリの結果が格納されます。
Accessデータベースのテーブルデータは、先頭列にインデックス番号が主キーとして付加されている場合が多いので(今回のサンプルデータも先頭列が主キーのインデックスになっています)、これをグリッドから削除しておきます。
以上で、C1FlexGridコントロールのデータ連結処理はでき上がりです。
'★ 名前空間を追加 Imports System.Data.OleDb '★ 新規追加処理-グリッドのデータ接続 Private Sub Button5_Click(sender As System.Object, e As System.EventArgs) Handles Button5.Click '(1)DBファイル名の取得と接続文字の作成 Dim dbname As String = "" If OpenFileDialog1.ShowDialog() = Windows.Forms.DialogResult.OK Then dbname = OpenFileDialog1.FileName else Exit Sub End If Dim conn As String = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & dbname 'サンプルデータベース用クエリ文字列 'SELECT chart_data.* FROM chart_data 'SELECT 台風発生個数の推移.* FROM 台風発生個数の推移 '(2)SQL文の入力 Dim sqlstr As String = InputBox("クエリのSQL文字列を入力してください", "テーブルの取り込み") If sqlstr = "" Then Exit Sub End If '(3)クエリを実行しDataSetにデータを取り込む Dim data_adap As OleDbDataAdapter = New OleDbDataAdapter(sqlstr, conn) Dim data_sset As DataSet = New DataSet() data_adap.Fill(data_sset) '(4)グリッドにデータを接続 C1FlexGrid1.DataSource = data_sset.Tables(0) C1FlexGrid1.Cols.Remove(1) 'キー列を削除 End Sub
// ★ 名前空間を追加 using System.Data.OleDb; // ★ 新規追加処理-グリッドのデータ接続 private void button5_Click(object sender, EventArgs e) { // (1)DBファイル名の取得と接続文字の作成 string dbname = ""; if (openFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK) { dbname = openFileDialog1.FileName; } else { return; } string conn = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" + dbname; // サンプルデータベース用クエリ文字列 // SELECT chart_data.* FROM chart_data // SELECT 台風発生個数の推移.* FROM 台風発生個数の推移 //(2)SQL文の入力 string sqlstr = Microsoft.VisualBasic.Interaction.InputBox("クエリのSQL文字列を入力してください", "テーブルの取り込み", "", 200, 100); if(sqlstr == "") { return; } //(3)クエリを実行しDataSetにデータを取り込む OleDbDataAdapter data_adap = new OleDbDataAdapter(sqlstr, conn); DataSet data_sset = new DataSet(); data_adap.Fill(data_sset); //(4)グリッドにデータを接続 c1FlexGrid1.DataSource = data_sset.Tables[0]; c1FlexGrid1.Cols.Remove(1); //キー列を削除 }
public static string InputBox( string Prompt, string Title, string DefaultResponse, int XPos, int YPos )
Prompt
必須。ダイアログボックスにメッセージとして表示するString式です。Promptの最大長は、約1024文字です。使用される文字の幅によって変わります。Promptが複数の行で構成される場合、復帰文字(Chr(13))、ラインフィード文字(Chr(10))、または復帰とラインフィードの組み合わせ(Chr(13)およびChr(10))を各行の間で使用して、行を分割できます。
Title
省略可能。ダイアログボックスのタイトルバーに表示されるString型の式。Titleを省略した場合、タイトルバーにはアプリケーションの名前が表示されます。
DefaultResponse
省略可能。他に入力がない場合に、テキストボックスに既定値として表示されるString型の式。DefaultResponseを省略すると、表示されるテキストボックスは空になります。
XPos
省略可能。ダイアログボックスの左端から画面の左端までの距離をtwip単位で指定する数式です。XPosを省略すると、ダイアログボックスの水平位置が中央になります。
YPos
省略可能。ダイアログボックスの上端から画面の上端までの距離をtwip単位で指定する数式です。YPosを省略すると、ダイアログボックスは垂直方向に対して画面の上端から約1/3の位置に配置されます。