SHOEISHA iD

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

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

ComponentZine(ComponentOne)

データベースのデータからバブルチャートを作成する.NETアプリケーションを作る

「PowerTools ComponentOne Studio 2012J」のC1Chart2D/C1FlexGridコントロールを使った.NETアプリケーションの作成 その2

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

データベース連結処理の実装

 まずは、グリッドをデータベースに連結する処理を作成します。この処理は、ボタン「データベースの読み込み」のClickイベントハンドラで行います。

 なお、System.Data.OleDb名前空間への参照を追加しておいてください。

 また、クエリ文の入力にインプットボックスを使用します。これは、Visual BasicのInputBoxメソッドを使用しますので、C#で使う場合はプロジェクトの参照設定に「Microsoft.VisualBasic」を追加しておいてください。

C#は「Microsoft.VisualBasic」への参照を追加しておく
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コントロールのデータ連結処理はでき上がりです。

データベースのテーブルデータがグリッドに格納される
データベースのテーブルデータがグリッドに格納される
VB.NET
'★ 名前空間を追加
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
C#
// ★ 名前空間を追加
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);   //キー列を削除
}
Interaction.InputBoxメソッドの書式
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の位置に配置されます。

次のページ
バブルチャート作成処理

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

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

もっと読む

この記事の著者

瀬戸 遥(セト ハルカ)

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

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

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

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/6831 2012/10/29 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

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

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

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

メールバックナンバー

アクセスランキング

アクセスランキング