需要在WPF表单中绑定/填充combobox,最好使用值和显示
由于其他原因,我的应用程序没有使用MVVM体系结构进行设置,目前无法使用。我现在唯一需要修改的是从数据库中填充一个组合框(它存储在OracleDataReader中)。我只想通过编程将项目添加到组合框中,使其不通过OracleDataReader循环,或者以某种方式绑定它需要在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
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返回了一些行。