CodeZine(コードジン)

特集ページ一覧

グリッドコントロールを使いデータベースを操作する.NETアプリケーションを作る

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

  • ブックマーク
  • LINEで送る
  • このエントリーをはてなブックマークに追加
2012/12/12 14:00
目次

TextBox、ComboBoxコントロールを使ったクエリ処理

 TextBox、ComboBoxコントロールを使用してクエリを実行します。クエリの条件は「収穫量」とし、テキストボックスに数値を入力してもらい、比較演算子と野菜名を選んで実行ボタンをクリックすると、クエリ文を作成して実行し結果セットをグリッドに表示します。

 TextBoxコントロールに入力があった場合のみ処理を実行し、テキストボックスの入力値と2つのドロップダウンリストの選択項目から、クエリ用のSQL文を作成します。

 クエリ文が作成できれば、前述のクエリ実行処理と同じ処理を行い、結果セットを「C1TrueDBGrid2」にセットします。

 そして、列「ID」の列幅調整と列「収穫量(t)」のグラデーション処理を実行します。

 また、取得したレコード数をグリッドのRowCountプロパティから取得し、Labelコントロールで表示します。

Visual Basic
Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
    Dim value As String = "", yasaimei As String = "", sqlStr As String = ""

    'SQL文字列の作成とDataAdapterの作成
    If TextBox2.Text <> "" Then
        Select Case ComboBox1.SelectedIndex
            Case 0
                value = ">=" & TextBox2.Text
            Case 1
                value = "<=" & TextBox2.Text
            Case 2
                value = "=" & TextBox2.Text
            Case 3
                value = "<" & TextBox2.Text
            Case 4
                value = ">" & TextBox2.Text
        End Select

        If ComboBox2.SelectedItem = "全て" Then
            sqlStr = "SELECT 収穫量一覧.ID, 収穫量一覧.地方名, 収穫量一覧.都道府県, 収穫量一覧.野菜名, " & _
                     "収穫量一覧.[収穫量(t)] FROM 収穫量一覧 WHERE (((収穫量一覧.[収穫量(t)])" & _
                     value & "));"
        Else
            yasaimei = " AND " & "((収穫量一覧.野菜名)='" & ComboBox2.SelectedItem & "'));"
            sqlStr = "SELECT 収穫量一覧.ID, 収穫量一覧.地方名, 収穫量一覧.都道府県, 収穫量一覧.野菜名, " & _
                     "収穫量一覧.[収穫量(t)] FROM 収穫量一覧 WHERE (((収穫量一覧.[収穫量(t)])" & _
                     value & ")" & yasaimei
        End If
        Dim adapter As New SqlClient.SqlDataAdapter(sqlStr, Me.収穫量一覧TableAdapter.Connection)

        'DataSetオブジェクトの作成
        Dim ds As DataSet = New DataSet()
        ds.Clear()

        'クエリを実行し結果セットをC1TrueDBGrid2のDataSourceプロパティに設定
        Try
            adapter.Fill(ds, "クエリー結果")
            C1TrueDBGrid2.DataSource = Nothing
            C1TrueDBGrid2.ClearFields()
            C1TrueDBGrid2.DataSource = ds.Tables("クエリー結果")
        Catch ex As Exception
            MessageBox.Show("SQL文のエラー")
        End Try

        '列「ID」のみ列幅を自動調節
        C1TrueDBGrid2.Splits(0, 0).DisplayColumns(0).AutoSize()

        Label3.Text = "抽出結果:合計" & C1TrueDBGrid2.RowCount & "件のデータを取得しました"

        'グラデーションの設定
        C1TrueDBGrid2.Splits(0).DisplayColumns("収穫量(t)").Style.GradientMode = C1.Win.C1TrueDBGrid.GradientModeEnum.ForwardDiagonal
        C1TrueDBGrid2.Splits(0).DisplayColumns("収穫量(t)").Style.BackColor = Color.Orange
        C1TrueDBGrid2.Splits(0).DisplayColumns("収穫量(t)").Style.BackColor2 = Color.BlanchedAlmond
   End If
End Sub
C#
private void button2_Click(object sender, EventArgs e)
{
    string value = "", yasaimei = "", sqlStr = "";

    //SQL文字列の作成とDataAdapterの作成
    if (textBox2.Text != "")
    {
        switch (comboBox1.SelectedIndex)
        {
            case 0:
                value = ">=" + textBox2.Text;
                break;
            case 1:
                value = "<=" + textBox2.Text;
                break;
            case 2:
                value = "=" + textBox2.Text;
                break;
            case 3:
                value = "<" + textBox2.Text;
                break;
            case 4:
                value = ">" + textBox2.Text;
                break;
        }


        if (comboBox2.SelectedItem.ToString() == "全て")
        {
            sqlStr = "SELECT 収穫量一覧.ID, 収穫量一覧.地方名, 収穫量一覧.都道府県, 収穫量一覧.野菜名, 収穫量一覧.[収穫量(t)] FROM 収穫量一覧 WHERE (((収穫量一覧.[収穫量(t)])" + value + "));";
        }
            else
        {
            yasaimei = " AND " + "((収穫量一覧.野菜名)='" + comboBox2.SelectedItem + "'));";
            sqlStr = "SELECT 収穫量一覧.ID, 収穫量一覧.地方名, 収穫量一覧.都道府県, 収穫量一覧.野菜名, 収穫量一覧.[収穫量(t)] FROM 収穫量一覧 WHERE (((収穫量一覧.[収穫量(t)])" + value + ")" + yasaimei;
        }
        SqlDataAdapter adapter = new SqlDataAdapter(sqlStr, 収穫量一覧TableAdapter.Connection);

        //DataSetオブジェクトの作成
        DataSet ds = new DataSet();
        ds.Clear();

        //クエリを実行し結果セットをC1TrueDBGrid2のDataSourceプロパティに設定
        try
        {
            adapter.Fill(ds, "クエリー結果");
            c1TrueDBGrid2.DataSource = null;
            c1TrueDBGrid2.ClearFields();
            c1TrueDBGrid2.DataSource = ds.Tables["クエリー結果"];
        }
        catch
        {
            MessageBox.Show("SQL文のエラー");
        }

        //列「ID」のみ列幅を自動調節
        c1TrueDBGrid2.Splits[0, 0].DisplayColumns[0].AutoSize();

        label3.Text = "抽出結果:合計" + c1TrueDBGrid2.RowCount + "件のデータを取得しました";

        //グラデーションの設定
        c1TrueDBGrid2.Splits[0].DisplayColumns["収穫量(t)"].Style.GradientMode = C1.Win.C1TrueDBGrid.GradientModeEnum.ForwardDiagonal;
        c1TrueDBGrid2.Splits[0].DisplayColumns["収穫量(t)"].Style.BackColor = Color.Orange;
        c1TrueDBGrid2.Splits[0].DisplayColumns["収穫量(t)"].Style.BackColor2 = Color.BlanchedAlmond;
    }
}

フォーム表示の切り替え処理

 最後に、グリッドの表示をフォーム表示に切り替える処理を作成します。これは、CheckBoxコントロールのCheckedChangedイベントハンドラで行います。チェックボックスにチェックが付くとフォーム表示に、チェックが外れると元のグリッド表示になるようにします。

 グリッドのフォーム表示は、C1TrueDBGridクラスのDataViewプロパティを使用します。設定値はDataViewEnum 列挙体のメンバです。このメンバの「Form」を設定すると、フォーム表示になります。「Normal」を設定すると元のグリッド表示に戻ります。

Visual Basic
Private Sub CheckBox1_CheckedChanged(sender As System.Object, e As System.EventArgs) Handles CheckBox1.CheckedChanged
    If sender.checked = True Then
        C1TrueDBGrid2.DataView = C1.Win.C1TrueDBGrid.DataViewEnum.Form
    Else
        C1TrueDBGrid2.DataView = C1.Win.C1TrueDBGrid.DataViewEnum.Normal
    End If
End Sub
C#
private void checkBox1_CheckedChanged(object sender, EventArgs e)
{
    if(checkBox1.Checked == true)
    {
        c1TrueDBGrid2.DataView = C1.Win.C1TrueDBGrid.DataViewEnum.Form;
    }
    else
    {
        c1TrueDBGrid2.DataView = C1.Win.C1TrueDBGrid.DataViewEnum.Normal;
    }
}
DataViewEnum列挙体のメンバ
メンバ 設定値
Normal 0 グリッドにはフラットファイルだけが表示され、階層ビューはサポートされません。
データソースが階層化データセットの場合、
グリッドにはマスターテーブルのデータだけが表示されます。
Inverted 1 行は水平に、列は垂直に表されます。
Form 2 データは簡単なデータ入力フォームで表示されます。
GroupBy 3 グループ化領域はグリッドの最上部に作成され、
この領域に置かれる列はすべてGroupedColumnコレクションに含まれます。
グループモードでは、AddおよびRemoveAtメソッドを使用して、
それぞれグリッド列を追加または削除できます。列を選択してドラッグし、
グループに入れたり、グループから出すことによって、
同じ操作を実行することもできます。
スタイルを指定してグループ化された行の表示をカスタマイズしたり、
グループ化された列の集計を自動的に計算できます。
グループの展開/折りたたみの状態も指定できます。
MultipleLines 4 グリッドには、複数ラインを使用して現在のグリッド領域に
すべてのフィールドが表示されます。
Hierarchical 5 グリッドではDataSetが階層形式で表示されます。
ツリー表示に類似したインターフェースを使用して、
階層レコードセットBandsを実行時に展開/折りたたむことができます。
MultipleLinesFixed 6 グリッドには、複数ラインを使用して
現在のグリッド領域にすべてのフィールドが表示されます。
サブ行の数は、一度設定すると変更されません。
サブ行の数はLinesPerRowプロパティを使用して設定します。

まとめ

 C1TrueDBGridコントロールは、大変多くの機能を持っているデータグリッドコントロールです。今回は、その機能のごく一部を利用したアプリケーションを作成しました。

 プログラム実行時にクエリを行う処理は、その結果セットのデータ表示に苦労しますが、C1TrueDBGridコントロールはすべて自動で行ってくれます。プログラマはクエリ用SQL文を作成することと、データオブジェクトへの接続とデータセットの作成をするだけで、あとはC1TrueDBGridコントロールがすべて行ってくれますから、プログラマの負担はぐっと軽くなり、開発工数も少なくて済みます。データベースブラウザの開発に苦労している方は、導入を検討してみてはいかがでしょうか。

 次回は、さらにC1TrueDBGridコントロールの機能を使ったアプリケーションを作成する予定です。

参考資料



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

著者プロフィール

  • 瀬戸 遥(セト ハルカ)

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

バックナンバー

連載:ComponentZine(ComponentOne Studio)

もっと読む

All contents copyright © 2005-2020 Shoeisha Co., Ltd. All rights reserved. ver.1.5