我有一个ComboBox
被DataView
绑定了DataTable
。此DataTable
有三列。在DataView
绑定到ComboBox
之前,我添加了另一列并设置了一些值。
Dim table As DataTable = _retrieve.GetAllVersionsTable()
table.Columns.Add("FirstRow", GetType(Boolean))
Dim row As DataRow = table.NewRow()
row("ID") = -1
row("SomeValue") = -1
row("SomeText") = "N/A"
row("FirstRow") = True 'Fort sorting...
Dim view As DataView = New DataView(table)
view.Sort = "FirstRow DESC, SomeText DESC"
table.Rows.InsertAt(row, 0)
comboBox.DataSource = view
comboBox.ValueMember = "ID"
comboBox.DisplayMember = "SomeText"
稍后,我检索相同的数据并创建一个新的DataTable
并将其绑定到另一种形式的DataGridView
。从这个表单中,我为DataGridView
中选定行的标识列设置了一个值。
当我回到第一个表单时,使用ComboBox
,我希望选择具有相同值的ComboBox
行,我从第二个表单中设置,与ValueMember
绑定1}}属性。我认为SelectedValue
可以为此工作,但事实并非如此。我还可以做些什么?
comboBox.SelectedValue = myIdentityValue
由于行不同,我也不能使用SelectedItem
。有没有办法可以选择合适的行而不必遍历所有现有的行?
答案 0 :(得分:2)
根据MSDN:
SelectedValue:获取或设置值 由...指定的成员属性 ValueMember属性。
所以根据文档,做这样的事情应该有效,假设123是组合框中存在的ID,因为ID已被设置为ValueMember:
comboBox.SelectedValue = 123
如果你不能让它工作(也许用DataView绑定不能正常工作?),那么你可以使用总是有效的SelectedIndex。
答案 1 :(得分:0)
对于遇到这个话题的人来说,有像Zolom或我一样的问题。我想我找到了一个没有记录的重要事项:
您必须将相同的数据类型传递给.SelectedValue。如果不是,搜索将在没有任何提示的情况下失败。
假设您使用数据库填充DataSource,并且让整数作为value-field,您必须将整数传递给SelectedIndex。如果是字符串,则传递一个字符串。
我希望这会有所帮助......
答案 2 :(得分:0)
您可以在设置之前解决设置为 Nothing 属性数据源的问题 数据源:
Combobox.datasource=nothing
Combobox.DisplayMember="Data";
Combobox.ValueMember="ID";
Combobox.datasource = NewDataTable;
Combobox.SelectedValue = 4;
答案 3 :(得分:-2)
使用Combobox.text=""
。它会自动将selectedvalue属性更改为您输入的文本。