Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
需要在WPF表单中绑定/填充combobox,最好使用值和显示_Wpf_Vb.net_Xaml_Combobox - Fatal编程技术网

需要在WPF表单中绑定/填充combobox,最好使用值和显示

需要在WPF表单中绑定/填充combobox,最好使用值和显示,wpf,vb.net,xaml,combobox,Wpf,Vb.net,Xaml,Combobox,由于其他原因,我的应用程序没有使用MVVM体系结构进行设置,目前无法使用。我现在唯一需要修改的是从数据库中填充一个组合框(它存储在OracleDataReader中)。我只想通过编程将项目添加到组合框中,使其不通过OracleDataReader循环,或者以某种方式绑定它 Public Sub LoadLocationCombo() Dim rs As OracleDataReader Dim dt As New DataTable() Dim dr As DataRow

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

首先,DataTable的DefaultView将返回DataView类型的对象,DataView没有名为“description”或“value\u id”的属性。这就是为什么不选择任何内容,也不显示任何内容

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

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
然后是组合框绑定

cboLocation.ItemsSource = listToFillCombo 
cboLocation.DisplayMemberPath = "Value"
cboLocation.SelectedValuePath = "Key"

您确定您的DataTable在绑定到组合框时包含数据吗?是的,我已进行了双重检查,确实如此。请参阅我的最新编辑。您有什么问题吗?如果要查看是否添加了第一行,请将dr(“description”)=“”行更改为dr(“description”)=“test”然后再添加一行cblLocation.SelectedIndex=0。确保数据库使用dt.rows.Count返回了一些行。