TextBox、ComboBoxコントロールを使ったクエリ処理
TextBox、ComboBoxコントロールを使用してクエリを実行します。クエリの条件は「収穫量」とし、テキストボックスに数値を入力してもらい、比較演算子と野菜名を選んで実行ボタンをクリックすると、クエリ文を作成して実行し結果セットをグリッドに表示します。
TextBoxコントロールに入力があった場合のみ処理を実行し、テキストボックスの入力値と2つのドロップダウンリストの選択項目から、クエリ用のSQL文を作成します。
クエリ文が作成できれば、前述のクエリ実行処理と同じ処理を行い、結果セットを「C1TrueDBGrid2」にセットします。
そして、列「ID」の列幅調整と列「収穫量(t)」のグラデーション処理を実行します。
また、取得したレコード数をグリッドのRowCountプロパティから取得し、Labelコントロールで表示します。
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
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」を設定すると元のグリッド表示に戻ります。
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
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; } }
メンバ | 値 | 設定値 |
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コントロールの機能を使ったアプリケーションを作成する予定です。