需要在WPF表单中绑定/填充组合框,理想情况下是值和显示

时间:2013-05-14 13:35:08

标签: wpf vb.net xaml combobox

由于其他原因我的应用程序没有使用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

1 个答案:

答案 0 :(得分: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"