选择第一项后,ComboBox / TextBox返回false值

时间:2014-03-13 19:38:09

标签: vb.net winforms

所以这里发生了什么。我目前正在通过Visual Studio 2010运行VB。我为我的团队创建了一个简单的程序,但它给了我适合的功能。我现在卡住的部分是我创建了一个包含2列的访问数据库。第一列具有用户名,第二列具有各自的UserID。前提是当他们从ComboBox中选择用户名时,它会使用用户ID填充文本框。

当你运行该程序时,我得到它的工作,但无论出于何种原因,如果我选择第一个用户是Peter Griffin,它旁边的字段填充PGriffin,如果我选择Bob Belcher,Archer会弹出文本框然而,当我回到彼得格里芬时,虚假出现在文本框中,如果我回到鲍勃,虚假出现在他面前。所以它在第一次选择他们的名字时起作用,但不是第二次。这是我正在使用的代码:

Private Sub FillCombo()
  Dim fillcon As New OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\Jae\Documents\Visual Studio 2010\Projects\WindowsApplication1\WindowsApplication1\SD Members1.accdb")
  Dim query As String = ("SELECT User_Name, User_ID FROM Analysts")
  Dim da As New OleDb.OleDbDataAdapter(query, fillcon)
  Dim ds As New DataSet
  da.Fill(ds)
  ComboBox1.ValueMember = "User_Name"
  ComboBox1.DataSource = ds.Tables(0)
  ComboBox1.SelectedIndex = 0

  TextBox10.DataBindings.Clear()
  TextBox10.DataBindings.Add("Text", ds.Tables(0), "User_ID")    
End Sub

这是在组合框上运行的查询

Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs) Handles ComboBox1.SelectedIndexChanged
  Dim dt As DataTable = ComboBox1.DataSource
  Dim dr As DataRow = dt.Rows(ComboBox1.SelectedIndex)
  TextBox10.Text = IIf(dr.IsNull("User_ID"), "", dr.IsNull("User_ID").ToString)    
End Sub

2 个答案:

答案 0 :(得分:1)

摆脱你的SelectedIndexChanged事件。

'Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs) Handles ComboBox1.SelectedIndexChanged 
'  Dim dt As DataTable = ComboBox1.DataSource
'  Dim dr As DataRow = dt.Rows(ComboBox1.SelectedIndex)
'  TextBox10.Text = IIf(dr.IsNull("User_ID"), "", dr.IsNull("User_ID").ToString)
'End Sub

您已经拥有了DataBinding设置,因此它可以在没有它的情况下工作。

答案 1 :(得分:0)

第一次,SelectedIndexChanged事件可能没有被触发。 我注意到在你的iif中,它返回了isnull的结果,这是假的。

尝试以下方法:

Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged 
        Dim dt As DataTable = ComboBox1.DataSource
        Dim dr As DataRow = dt.Rows(ComboBox1.SelectedIndex)
        TextBox10.Text = IIf(dr.IsNull("User_ID"), "", dr("User_ID").ToString)

End Sub

编辑:LarsTech确实提出了一个有趣的问题。如果您将此事件绑定到User_Id,您是否需要此事件?除非您需要其他功能,否则绑定应该为您提供帮助。