Enable を false にするのもなんだかな..ということで調べてみたら
AutoCheck を False
で解決。名前が分かりにくい..AutoCheck を False
で解決。名前が分かりにくい..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 の部分には主キーのフィールドをいれておけば大丈夫)
Object.Style.BackColor = Color.Gray
RGBで指定したいときに、以下のように指定することもできるObject.Style.BackColor = Color.FromArgb(224, 224, 224)
DataGridView1.Rows.Add()
だと、データグリッドの末尾に行が追加されるが、DataGridView1.Rows.Insert(iIndex)
で iIndex で指定した行の直前に行を挿入することができる。このとき、TALBE_A からデータを取得してコンボボックスには以下のように「Field_NAME」の項目を表示させつつも、項目を選択時には「Field_ID」の値を取得するようにしたい。TABLE_A: | Field_ID | Field_NAME | | 0001 | あああ | | 0002 | いいい | | 0003 | ううう | | 0004 | えええ | ...
このとき、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"
valueとFormattedValueを利用する点に注意。Dim dgvComboBox As DataGridViewComboBoxCell = _ DataGridView1.Rows(iRowNo).Cells("ComboCell") Dim iID As Integer = dgvComboBox.Value Dim strNAME As String = dgvComboBox.FormattedValue
TABLE_MEMBERDATA:
| ID | NAME | New_Field | | 001 | aaa | null | | 002 | bbb | null | | 003 | ccc | null | | 004 | ddd | null | ..... .....
ここで、TABLE_MEMBERDATAに新しいフィールド 'New_Field ' を追加してそこにそれぞれの'NAME'に対応する電話番号を一括でコピーして以下のような状態にしたい。TABLE_PHONE_NUM :
| NAME | PHONE_NUM | | aaa | 080-AAAA-YYYY | | bbb | 080-BBBB-YYYY | | ccc | 080-CCCC-YYYY | | ddd | 080-DDDD-YYYY | ..... .....
このときは以下のようにUPDATEすればすべての行を一括で更新できる。TABLE_MEMBERDATA:
| ID | NAME | New_Field | | 001 | aaa | 080-AAAA-YYYY | | 001 | bbb | 080-BBBB-YYYY | | 001 | ccc | 080-CCCC-YYYY | | 001 | ddd | 080-DDDD-YYYY | ..... .....
update TABLE_MEMBERDATA
set New_Field =
(select PHONE_NUM from TABLE_PHONE_NUM
where TABLE_PHONE_NUM.NAME = TABLE_MEMBERDATA.NAME)
このなかで'Field2'で値が重複している列のみをSELECTしたい。| Field1 | Field2 | | 001 | aaa | | 002 | bbb | | 003 | ccc | | 004 | ddd | | 005 | aaa | | 006 | bbb |
select Field2 from TABLE_A
group by Field2 having COUNT( Field2 ) > 1
さらに、上記で取得した値を含んでいる列をすべて取得する。このときINを使う結果: | Field2 | | aaa | | bbb |
select Field2 from TABLE_A where Field2 in
(select Field2 from TABLE_A
group by Field2 having COUNT( Field2 ) > 1)
結果: | Field1 | Field2 | | 001 | aaa | | 002 | bbb | | 005 | aaa | | 006 | bbb |