ComboBox不显示项目(项目在哪里?)

时间:2015-05-07 08:04:37

标签: vb.net combobox datasource

我有一个非常奇怪的问题。我在表单上有一个ComboBox控件。它有一个DataTable的DataSource。它同时设置了DisplayMember和ValueMember。我已经调试并设置了断点,最后一点代码确认数据是在那里。我使用了DataTable可视化工具,行显示了我想要的值。我在调试时在立即窗口中运行命令以检查项目数,确认DisplayMember等一切都没问题。 ComboBox中显示的空白空间会根据我的选择更改大小,但不显示任何文本?非常奇怪。我以完全相同的方式设置了另一个ComboBox,它工作正常。它应该工作!后端告诉我它正在工作,但它根本就没有显示。有任何想法吗? .NET 4,VB.NET,WinForms。有人有这个问题/解决方案吗?

这里是代码(它永远不会出错)。

    Public Sub RefreshContacts(ByVal CustomerKey As Integer)
    Using tContactsTa As New dbQMSTableAdapters.tContactsTableAdapter, tContactsDt As New dbQMS.tContactsDataTable
        Try
            tContactsTa.FillBasicByCustomerKey(tContactsDt, CustomerKey)
            cmbCncts.BeginUpdate()
            With cmbCncts
                .DataSource = tContactsDt
                .ValueMember = "fContactKey"
                .DisplayMember = "fContactName"
            End With
            cmbCncts.EndUpdate()
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        Finally
        End Try
    End Using
End Sub

正如我之前所说,我已经调试并查看了DataTable可视化工具,数据就在那里。当我运行? cmbCncts.Items.Count时,它会反馈正确的值。我还会检查DisplayMemberValueMember属性,这些属性都是正确的。

1 个答案:

答案 0 :(得分:0)

好的,所以我解决了这个问题(我仍然感到恼火,因为我无法解决为什么它没有工作)。我现在以不同的方式做到这一点,所以它按照我想要的方式工作。即便如此,原始方式应该像其他ComboBox控件一样工作,我的工作方式完全相同。新代码:

        Using tContactsTa As New dbQMSTableAdapters.tContactsTableAdapter, tContactsDt As New dbQMS.tContactsDataTable
        Try
            tContactsTa.FillBasicByCustomerKey(tContactsDt, CustomerKey)
            cmbCncts.BeginUpdate()
            cmbCncts.Items.Clear()
            cmbCncts.ValueMember = "fContactKey"
            cmbCncts.DisplayMember = "fContactName"
            For Each rw As dbQMS.tContactsRow In tContactsDt
                cmbCncts.Items.Add(rw)
            Next
            'With cmbCncts
            '    .DataSource = tContactsDt
            '    .ValueMember = "fContactKey"
            '    .DisplayMember = "fContactName"
            'End With
            cmbCncts.EndUpdate()
            If cmbCncts.Items.Count > 0 Then
                cmbCncts.SelectedIndex = 0
            End If
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        Finally
        End Try
    End Using