【问题标题】:binding textbox to combobox items将文本框绑定到组合框项目
【发布时间】:2016-08-16 07:08:03
【问题描述】:

我在数据表中有 2 列,并且都显示在组合框的下拉列表中(多列下拉列表)。现在我想在组合框中显示一列,在 texbox 中显示另一列(带有数据绑定)。代码有效,但有 1 个问题 - 我希望在表单打开时让我的 combobox.selectedIndex -1 和文本框为空。 Combobox 不是问题,但无法清除 Texbox 中的文本。这是我的代码:

 Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

        Dim SQL As String = "SELECT Name,Surname from MyTable"

        Dim dtb As New DataTable()
        dtb.Columns.Add("Name", System.Type.GetType("System.String"))
        dtb.Columns.Add("Surname", System.Type.GetType("System.String"))

        Using con As OracleConnection = New OracleConnection("Data Source=MyDB;User Id=Lucky;Password=MyPassword;")

            Try

                OraclePovezava.Open()

                Using dad As New OracleDataAdapter(SQL, con)
                    dad.Fill(dtb)

                End Using

                Combobox1.DataSource = dtb
                Combobox1.DisplayMember = "Surname"
                Combobox1.AutoCompleteMode = AutoCompleteMode.Suggest
                Combobox1.AutoCompleteSource = AutoCompleteSource.ListItems
                con.Close()

            Catch ex As Exception
                'MessageBox.Show(ex.Message)
            Finally
                con.Dispose()
            End Try

            TextBox1.DataBindings.Add("Text", dtb, "Name")
            Combobox1.SelectedIndex = -1

       End Using

    End Sub

如您所见,此代码位于表单的加载事件中。我也尝试过使用 If 语句在 Combobox.SelectedIndexChanged 事件中使用 Textbox 数据绑定,但它不起作用。

P.S.:我想要的输出是当用户从组合框中选择某些项目时,两个列值都显示在 texbox 和组合框中。您看到的代码可以正常工作,但文本框不能像表单加载时的组合框一样为空。

有什么建议吗?

【问题讨论】:

  • 您的文本框未绑定到名称列。它绑定到数据表的名称。我想您希望文本框填充组合框中选择的人的名字?
  • 是的,我想要那个。但是你对 Texbox 是什么意思 - 它绑定到 dtb 数据集的“名称”列,不是吗?我看到显示为...
  • 我刚刚尝试了您的代码,它绑定到该字段让我感到非常惊讶。让我修改我的答案

标签: vb.net combobox textbox


【解决方案1】:

您的源数据表中没有包含空白数据的记录,因此您的文本框始终绑定到包含数据的记录之一。我将使用简单的事件处理程序而不是数据绑定来实现这一点。

Private Sub ComboBox1_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
    If ComboBox1.SelectedItem Is Nothing Then
        TextBox1.Text = ""
    Else
        TextBox1.Text = CStr(CType(ComboBox1.SelectedItem, DataRowView)("Name"))
    End If
End Sub

【讨论】:

  • 感谢 FloatingKiwi,这行得通。这里还有一个问题-当我手动删除组合框项目时...-我也可以自动清除 textbox.text 吗?...可能是组合框的 text_changed 事件...
  • 我想通了,我只是将您的建议放在 Text_Changed_event 中。现在一切正常,即使我删除文本。可以吗?
  • 是的,那行得通。您可能还需要考虑如果您在组合文本编辑器中输入的内容不在组合下拉列表中,会发生什么情况。
  • 我也考虑过 - 它删除了 textbox.text,这很好。组合框和文本框将用于将数据保存在我的数据库中,因此如果用户希望输入不在列表中的其他姓名/姓氏,则启用它。谢谢你的帮助!!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多