我有一个WinForms应用程序和一个combobox的数据源设置为一个DataTable时,窗体加载。 数据显示在combobox中很好。
然后,用户点击一个button后,我想创build一个新的数据表,并指定该数据作为combobox的数据源。
问题是,在将数据源设置为新的数据表后,combobox中的项目不会改变。 这是我正在使用的代码。
dlCustomer.DataSource = Nothing dlCustomer.DataSource = dtCustomers dlCustomer.DisplayMember = "Name" dlCustomer.Refresh()
有谁知道如何使正确的数据显示在combobox第二次为其分配数据源?
它应该工作,至少它在我一起快速测试。 这是代码; 它只是期望一个组合框和按钮的窗体:
Public Class Form1 Private dtOne As DataTable Private dtTwo As DataTable Private Sub InitializeTables() dtOne = New DataTable("TableOne") With dtOne .Columns.Add("Text", GetType(String)) .Columns.Add("Value", GetType(Integer)) End With dtTwo = New DataTable("TableTwo") With dtTwo .Columns.Add("Text", GetType(String)) .Columns.Add("Value", GetType(Integer)) End With Dim newRow As DataRow For index As Integer = 0 To 2 newRow = dtOne.NewRow newRow.ItemArray = (New Object() {SpellIt(index), index}) dtOne.Rows.Add(newRow) Next For index As Integer = 2 To 0 Step -1 newRow = dtTwo.NewRow newRow.ItemArray = (New Object() {SpellIt(index), index}) dtTwo.Rows.Add(newRow) Next dtOne.AcceptChanges() dtTwo.AcceptChanges() End Sub Private Shared Function SpellIt(ByVal int As Integer) As String Select Case int Case 0 : Return "Zero" Case 1 : Return "One" Case 2 : Return "Two" Case Else : Throw New ArgumentOutOfRangeException("Bleh!") End Select End Function Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load InitializeTables() Me.Label1.DataBindings.Add("Text", ComboBox1, "SelectedValue") Me.ComboBox1.DataSource = dtOne Me.ComboBox1.DisplayMember = "Text" Me.ComboBox1.ValueMember = "Value" End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Me.ComboBox1.DataBindings.Clear() Me.ComboBox1.DataSource = Nothing Me.ComboBox1.DataSource = dtTwo Me.ComboBox1.DisplayMember = "Text" Me.ComboBox1.ValueMember = "Value" End Sub End Class