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コントロールの機能を使ったアプリケーションを作成する予定です。
