2012/06/26

.NET チェックボックスを読み取り専用にする

フォームにチェックボックスを貼り付けて、読み取り専用にしようとして、プロパティでReadOnlyを探すも見つからず...
Enable を false にするのもなんだかな..ということで調べてみたら

AutoCheck を False

で解決。名前が分かりにくい..

2012/06/15

SQL文 COUNTの凡ミス...

SQLで特定のフィールドがNULLの行を数えようとしてCOUNTを使うときによくやってしまう凡ミス。

select COUNT(Field_Example) from TABLE_A where Field_Example is NULL

これだと0しかかえってこない。正しくは

select COUNT(Field_ID) from TABLE_A where Field_Example is NULL

(※ Field_ID の部分には主キーのフィールドをいれておけば大丈夫)

よくやってしまうミスなので注意しなければ。。。

2012/06/08

VB.NET コントロールなどの色をRGBで指定

コントロールの色などを指定するとき、たとえば以下のように設定できるが、

Object.Style.BackColor = Color.Gray

RGBで指定したいときに、以下のように指定することもできる

Object.Style.BackColor = Color.FromArgb(224, 224, 224)


VB.NET データグリッドビューの指定した位置に行を追加

データグリッドビューの指定した位置に行を追加したいときの処理。

DataGridView1.Rows.Add()

だと、データグリッドの末尾に行が追加されるが、

DataGridView1.Rows.Insert(iIndex)

で iIndex で指定した行の直前に行を挿入することができる。

2012/06/07

VB.NET データグリッドのコンボボックスにDBから選択した複数のデータを格納

データグリッドのセルをコンボボックスにして、そのコンボボックスに文字列だけではなく、複数の値を持たせたいときの処理

たとえば、TALBE_A に以下のようにデータが入っているとする。

TABLE_A: | Field_ID | Field_NAME | | 0001 | あああ | | 0002 | いいい | | 0003 | ううう | | 0004 | えええ | ...

このとき、TALBE_A からデータを取得してコンボボックスには以下のように「Field_NAME」の項目を表示させつつも、項目を選択時には「Field_ID」の値を取得するようにしたい。

コンボボックスのアイテム: | あああ | | いいい | | ううう | | えええ | ...

このとき、TABLE_A からSELECTしたデータを直接コンボボックスに渡して、かつ表示する値と、コンボボックス選択時に取得する値を以下のように設定することができる。

TABLE_A: Dim dt As DataTable 'データの取得 'SelectFromDB ...SQLを実行してDataTableを返す関数をどこかで定義 dt = SelectFromDB("select Field_ID, Field_NAME from TABLE_A order by Field_ID")  'ここでは、DataGridView1 の"ComboCell"という名前の列がコンボボックスになっている Dim comboCol As DataGridViewComboBoxColumn = Me.DataGridView1.Columns("ComboCell") 'データグリッドビューのコンボボックスにデータをバインド comboCol.DataSource = dt 'コンボボックスに表示されるのはTABLE_Aの「Field_NAME」のデータ comboCol.DisplayMember = "Field_NAME" 'コンボボックスの値として扱われるのは「Field_ID」のデータ comboCol.ValueMember = "Field_ID"

データを取得する際は、以下のようになる。

Dim dgvComboBox As DataGridViewComboBoxCell = _ DataGridView1.Rows(iRowNo).Cells("ComboCell") Dim iID As Integer = dgvComboBox.Value Dim strNAME As String = dgvComboBox.FormattedValue

valueとFormattedValueを利用する点に注意。