none
SelectedValueの設定について RRS feed

  • 質問

  • お世話になっております。

     

    早速ですが質問させて頂きます。

    知識が足りない為、馬鹿な質問をした際はご勘弁ください。

     

    コンボボックスに対し、DataSourceを設定しSelectedValueにキーを設定しています。

     

    コンボボックスを選択した際に、DBで使用するキーが取得できるメリットもそうですが

    逆にDBから取得したキーから、値を取得する際に

    クエリを発行するのではなく、既存のコンボボックスから値を逆引き出来ないかと

    考えました。

     

    単純に【設定したキーから値を取得できる】メソッド等を探したのですが見付からず、

    現在のSelectedValueを退避させておき、

    値を知りたいキーを、SelectedValueに設定

    値を取得後、退避させておいたSelectedValueを適用。

     

    と何やら訳のわからない事をしようと試みたのですが

     

    SelectedValueが設定できません、どうやらDataSouceで設定している為に

    起こっているもよう。

     

    何か方法はありませんでしょうか?

    クエリを投げれば済む話なのですが。。

    2010年12月17日 6:23

回答

すべての返信

  • 直接コンボボックスのDataSourceを参照したらよいのではないでしょうか。
    • 回答としてマーク segment 2010年12月17日 6:37
    2010年12月17日 6:33
  • げはっ。。。

     

    ほんとに、馬鹿な質問をしてしまいました。。

     

    馬鹿な質問にも回答頂き、ありがとうございました!

    2010年12月17日 6:37
  • すでに解決済みになっていましたが、せっかく書いちゃったんで乗せておきます。

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
      ' データを作成
      Dim dt As New DataTable()
      dt.Columns.Add("key", GetType(Integer))
      dt.Columns.Add("text", GetType(String))
      For i As Integer = 0 To 10
        dt.Rows.Add(i, i.ToString() + "です")
      Next
      ' コンボボックスに設定
      Me.ComboBox1.DataSource = dt
      Me.ComboBox1.ValueMember = "key"
      Me.ComboBox1.DisplayMember = "text"
    End Sub
    
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
      ' 選択中のキーを取得
      MessageBox.Show("key:" + Me.ComboBox1.SelectedValue.ToString())
    End Sub
    
    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
      ' 検索したいキー
      Dim key As Integer = 5
    
      ' キーから値を取得
      Dim text = From r In CType(Me.ComboBox1.DataSource, DataTable).AsEnumerable() _
            Where r.Field(Of Integer)("key") = key _
            Select r.Field(Of String)("text")
      If text.Count() = 0 Then
        MessageBox.Show("該当なし")
      Else
        MessageBox.Show("text:" + text.First())
      End If
    End Sub
    
    

    2010年12月17日 6:42