代码之家  ›  专栏  ›  技术社区  ›  Paul Mendoza

如何在winforms中重新绑定组合框?

  •  3
  • Paul Mendoza  · 技术社区  · 15 年前

    我有一个winforms应用程序,当窗体加载时,组合框将其数据源设置为datatable。数据在组合框中显示良好。

    然后,在用户单击按钮之后,我想创建一个新的数据表,并将该数据表指定为组合框的数据源。

    问题是,将数据源设置为新的数据表后,组合框中的项不会更改。这是我正在使用的代码。

    dlCustomer.DataSource = Nothing
            dlCustomer.DataSource = dtCustomers
            dlCustomer.DisplayMember = "Name"
            dlCustomer.Refresh()
    

    是否有人知道如何在我第二次为组合框分配数据源时将正确的数据显示在组合框中?

    1 回复  |  直到 15 年前
        1
  •  5
  •   STW    15 年前

    它应该有用的,至少在我做的一个快速测试中有用。下面是代码;它只需要一个带有组合框和按钮的表单:

        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