繁体   English   中英

VB.Net 2010-从ComboBox检索MemberValue

[英]VB.Net 2010 - Retrieve MemberValue from ComboBox

我已经为此工作了三天,只是找不到一个简单的答案。 (确实很难做到这一点)。 但是现在我再也看不到森林的树木了。

我从SQL数据库中填充了一个组合框,效果很好,数据在Dataset Visualizer中显示良好。

组合列表称为cmbStateList

两个数据库字段DisplayMember“状态” ValueMember“ ID”

我想做的就是简单地从组合框中选择一个项目时返回ValueMember。 当我在cmbStateList_SelectedIndexChanged中使用“ cmbStateList.SelectedValue”时,返回的是项目在列表中的索引或位置,而不是数据的ValueMember(“ ID”)字段。

这是我正在使用的代码,非常希望有人可以解决这个简单的问题

加载状态列表:

SQL = "Select * from State"
Command = New SqlCommand(SQL, CNN)
DA.SelectCommand = Command
DA.Fill(DS, "State")

绑定组合框:

Me.cmbStateList.Items.Clear()
Me.cmbStateList.DataSource = DS.Tables("State")
Me.cmbStateList.DisplayMember = "State"
Me.cmbStateList.ValueMember = "ID"

选择组合框(尝试过DropDownClosed和SelectedIndexChanged):

Private Sub cmbStateList_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles cmbStateList.SelectedIndexChanged
     MsgBox(Me.cmbStateList.SelectedValue)
End Sub

预先感谢克里斯

如果您有大约100000条记录,这将非常缓慢:

Me.cmbStateList.DataSource = Nothing
Me.cmbStateList.DataSource = DS.Tables("State")
Me.cmbStateList.DisplayMember = "State"
Me.cmbStateList.ValueMember = "ID"

这很快,只需更改命令顺序即可:

Me.cmbStateList.DataSource = Nothing
Me.cmbStateList.DisplayMember = "State"
Me.cmbStateList.ValueMember = "ID"
Me.cmbStateList.DataSource = DS.Tables("State")

我不确定100%是否会有所作为,但是我们总是将Member设置在DataSource之前。 我会尝试将您的代码更改为以下内容:

Me.cmbStateList.DataSource = Nothing
Me.cmbStateList.DisplayMember = "State"
Me.cmbStateList.ValueMember = "ID"
Me.cmbStateList.DataSource = DS.Tables("State")

尝试这个:

绑定组合框

Me.cmbStateList.Items.Clear()
Me.cmbStateList.DisplayMember = "State"
Me.cmbStateList.ValueMember = "ID"
Me.cmbStateList.DataSource = DS.Tables("State")
Me.cmbStateList.SelectedIndex = 0

获取选择的值

要测试将其添加到按钮单击事件处理程序上。

MsgBox(Me.cmbStateList.SelectedValue.ToString())

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM