VB.NET で ComboBox のプルダウンリストに項目をセットする方法。
DB のマスタからデータ読み込んできて、そのコードと名前をセットしようとすると、
Me.CodeComboBox.SetBinding(ds.address, "address_code", "address_name")
みたいにバインディングしてしまうのが一番楽だが(これで、プルダウンのところに "コード|名前"のように表示される)、マスタの中身そのままではなく、後ろに「まとめコード」だったり「その他コード」だったり、マスタにないコードを追加したい時がある。
マスタを読み込んだデータセットの最後にレコードを追加してやってから SetBinding するという裏技的なことも可能だが、Null が許されてない項目にダミーの値をセットしたり面倒くさい。
そんな時は、素直にバインディング用の新しいテーブルセットを作って処理する方が結果的に簡単。
Dim codeTbl As New DataTable()codeTbl.Columns.Add("address_code", GetType(Integer))codeTbl.Columns.Add("address_name", GetType(String))Dim row As DataRow = NothingFor Each dr In ds.addressrow = codeTbl.NewRow()row("address_code") = dr.address_coderow("address_name") = dr.address_namecodeTbl.Rows.Add(row)Next' 合計コード(0)の追加row = codeTbl.NewRow()row("address_code") = 0row("address_name") = "合計"codeTbl.Rows.Add(row)codeTbl.AcceptChanges()Me.CodeComboBox.SetBinding(codeTbl, "address_code", "address_name")
これで、無事一番下に 0 の項目が追加される。(FormatString="000" で)
随分行数は増えるが、コードとして美しい。うっとり。
コメントする