【发布时间】:2012-03-23 18:24:14
【问题描述】:
我在 VS 2010 中使用 VB.Net 构建了一个 WinForms 应用程序,但我正在为以下问题摸不着头脑。
我有一个带有组合框的表单,该组合框在加载表单时绑定到数据源:
With Me.cboCompany
.DataBindings.Clear()
.DataSource = Me.m_dsBidResults.Tables("Company")
.ValueMember = "company_id"
.DisplayMember = "company_name"
.DataBindings.Add("SelectedValue", Me.m_dsBidResults, Company.company_id")
End With
我正在使用 cboCompany.SelectionChangeCommitted 事件按所选公司 ID 过滤 datagridview:
Private Sub cboCompany_SelectionChangeCommitted(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cboCompany.SelectionChangeCommitted
Dim intCompanyIDN As Integer
intCompanyIDN = CInt(cboCompany.SelectedValue)
SelectBidder(intCompanyIDN) ' sub to filter datagridview, update labels
End Sub
这似乎工作正常,只要用户不将焦点切换到其他控件然后返回组合框。切换焦点后,如果用户随后将组合框选择更改为下拉列表中的第一项 (SelectedIndex = 0),则将触发 SelectionChangeCommitted 事件,但 SelectedValue 仍设置为先前选择的值。我已经通过在上面的事件处理程序中添加一个消息框来验证这一点,并排显示 SelectedIndex 和 SelectedValue。
'add this to SelectionChangeCommitted event handler
MsgBox(String.Format("Selected Index: {0}, Selected Value: {1}", cboCompany.SelectedIndex, cboCompany.SelectedValue))
如果用户将 SelectedIndex 更改为 0 以外的任何值,则不会发生这种情况;一切都按预期进行。我已验证我绑定的表包含 company_id 和 company_name 的唯一值。
我是否需要使用其他事件来验证 SelectedValue 是否已实际更改?或者,欢迎提出可靠解决方法的想法。
【问题讨论】:
-
您是否尝试过其他事件,您能否给 SelectedValueChanged 和 SelectedIndexChanged 一个 go,而不是在从下拉列表中选择项目并且下拉列表关闭时触发的 SelectionChangeCommitted 事件?跨度>
-
Jeremy - 是的,我尝试过 SelectedIndexChanged 和 SelectedValueChanged,结果相同。
标签: .net vb.net winforms visual-studio visual-studio-2010