0

由于其他原因,我的应用程序没有使用 MVVM 架构设置,我目前无法设置。我现在唯一需要修改的是要从数据库中填充的组合框(它存储在 OracleDataReader 中)。我想通过循环通过这个 OracleDataReader 以编程方式将项目添加到组合框中,或者以某种方式绑定它。

Public Sub LoadLocationCombo()
    Dim rs As OracleDataReader
    Dim dt As New DataTable()
    Dim dr As DataRow
    Dim lstItems As New ArrayList

    rs = objClsDB.LocationCombo

    dt.Load(rs)

    dt.Columns("description").AllowDBNull = True
    dt.Columns("value_id").AllowDBNull = True
    dt.Columns("description").DefaultValue = ""
    dt.Columns("value_id").DefaultValue = 0

    dr = dt.NewRow

    dr("description") = ""
    dr("value_id") = 0

    dt.Rows.InsertAt(dr, 0)

    cboLocation.ItemsSource = dt.DefaultView
    cboLocation.DisplayMemberPath = "description"
    cboLocation.SelectedValuePath = "value_id"

End Sub

这是我目前的方法,我也在尝试在顶部添加一个空白行。这使得组合看起来像多行但没有任何内容在选定的值中并且没有任何显示。

编辑:如果我删除 cboLocation.DisplayMemberPath 和 .SelectedValuePath 然后组合框充满了一堆 System.Data.Common.DataRecordInternal

4

1 回答 1

2

首先,DataTable 的 DefaultView 会返回一个 DataView 类型的对象,而 DataView 没有称为“description”或“value_id”的属性。这就是为什么没有选择任何内容,也没有显示任何内容。

您可以构建一些列表并用数据表值填充它,例如:

Dim listToFillCombo As New List(Of KeyValuePair(Of Integer, String))

For Each dr As DataRow In dt.Rows
    listToFillCombo .Add(New KeyValuePair(Of Integer, String)(CInt(dr("value_id")), dr("description").ToString))
Next

然后是comboBox绑定

cboLocation.ItemsSource = listToFillCombo 
cboLocation.DisplayMemberPath = "Value"
cboLocation.SelectedValuePath = "Key"
于 2013-05-14T17:10:59.103 回答