- ベストアンサー
コンボボックスで表示とソース内での値を代えたい
DBからA列 B列を取得して コンボボックスにA列 B列をセットします 画面のコンボにはA列を表示させておき A列のhogeが選択されたら内部的には B列を使って処理をさせたいと考えています 今の所A列のみのセットは出来ているのですがB列も同時に扱うための 方法がわかりません 何がご存知の方居ましたらご教授お願いします。 環境は Visual Studio 2005 の VB 2005を使用しています。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
コンボ/リストボックスの [表示/内部データ]の切り替えは ・DisplayMember ・ValueMember ・DataSource がキーワードです。 簡単なサンプルです。 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim l_dtb As DataTable = データテーブル() '表示値を設定 Me.ComboBox1.DisplayMember = l_dtb.Columns(0).ColumnName '内部値を設定 Me.ComboBox1.ValueMember = l_dtb.Columns(1).ColumnName 'データソースにテーブルを指定 Me.ComboBox1.DataSource = l_dtb End Sub Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged If ComboBox1.SelectedItem Is Nothing Then Return End If Me.Text = String.Format( _ "表示項目:{0} 内部値:{1} ", _ Me.ComboBox1.Text, _ Me.ComboBox1.SelectedValue _ ) End Sub Private Function データテーブル() As DataTable Dim l_dtbデータテーブル As New DataTable() Dim l_drwデータロウ As DataRow Dim i As Integer l_dtbデータテーブル.Columns.Add("キャラ", System.Type.GetType("System.String")) l_dtbデータテーブル.Columns.Add("コード", System.Type.GetType("System.Int32")) For i = Asc("A") To Asc("Z") l_drwデータロウ = l_dtbデータテーブル.NewRow l_drwデータロウ.Item("キャラ") = Chr(i) l_drwデータロウ.Item("コード") = i l_dtbデータテーブル.Rows.Add(l_drwデータロウ) Next Return l_dtbデータテーブル End Function
お礼
回答ありがとうございます .NET 2.0から追加された機能に表示値と内部値があるのは初めて知りました サンプルソースも動作を確認する上で非常に解りやすく 大変参考になりました