3

私は2つのコンボボックスを持っています。combobox1のデータソースは、固定されている文字列のリストです。Combobox2のデータソースは、combobox1の選択に依存する文字列のリストになります。これは、次のような一般的なケースと非常によく似ています。最初に国を入力し、入力に応じて、2番目のコンボボックスに国内の大学のリストが表示されます。

'Change selection of first combobox
Private Sub cbxClient_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cbxClient.SelectedIndexChanged
  Try
    If cbxClient.SelectedIndex <> -1 Then
      GetAccount()
    End If
  Catch
    Throw
  End Try
End Sub

'Based on selection of first combobox, update the data sorce of second combobox
Private Sub GetAccount()
  Try
    m_listAccount.Clear()

    Dim strClient As String = cbxClient.SelectedItem.ToString

    For i As Integer = 0 To m_listDS.Count - 1
      If m_listDS(i).Client.Tostring = strClient Then
        m_ds = m_listDS(i)
        Exit For
      End If
    Next

    If Not m_ds Is Nothing Then
      For Each row As DataRow In m_ds.Tables("Account").Rows
        m_listAccount.Add(row("account").ToString)
      Next
    End If

    cbxAccount.DataSource = m_listAccount

  Catch ex As Exception
  End Try
End Sub

私の問題は、m_listAccountが更新されても(正しい情報があります)、cbxAccountに表示される選択肢がm_listAccountに従って更新されない(間違った情報がある)ことです。なぜこれが起こるのかわかりません。

注:m_listAccountの古い文字列は{"old1"}(リストには1つの文字列のみ)であり、更新後、m_listAccountの文字列は{"new"}であると想定します。ブレークポイントを介して、次のようになります。

cbxAccount.DataSorce={"new"}
cbxAccount.SelectedItem={"old1"}

フォームでは、cbxAccountは「old1」文字列を示します。

4

2 に答える 2

1

これを試して、

cbxAccount.DataSource = Nothing
cbxAccount.DataSource = m_listAccount

同じリストオブジェクトを更新するだけの場合、データソースは自動的に更新されない可能性がありますが、ポインターがデータソースに変更された場合は更新されます。

または、m_listAccount.AcceptChanges()を試すこともできます

m_listAccountの場合DataTable

于 2012-05-15T16:43:46.587 に答える
0

実際にdatabindメソッドを呼び出しているようには見えません。

cbxAccount.DataBind()

データソースを設定した直後に配置してみてください。

于 2012-05-15T15:58:43.203 に答える