【问题标题】:how can I show concatenated string into autocomplete textbox如何将连接的字符串显示到自动完成文本框中
【发布时间】:2015-10-29 05:44:20
【问题描述】:

我正在尝试将连接的字符串显示到自动完成文本框中 当用户开始输入时,它将按姓氏搜索。查询将在数据库中查找全名包含...并在自动建议中显示全名,公司

.
如果我只是按姓氏搜索 并输入姓氏

MyCollection.Add(reader("last_name").ToString())

显示结果 但是下面的代码什么也没有显示

这是我的代码

谁能建议我如何解决这个问题?

Dim strauto As String

       Dim name As String
       name = Trim(txtCompanyKeyContacts.Text)
       If name = "" Then Exit Sub
       Dim cnString As String = ConfigurationManager.ConnectionStrings("dbcon").ConnectionString
       Dim con As New SqlConnection(cnString)

       Using con
           strauto = "SELECT (FULL_NAME + ',' + Company + ',' + Status) as contact  FROM name where FULL_NAME like '%" & Replace(name, "'", "''") & "%' "
           'SELECT last_name,FULL_NAME + ',' + Company + ',' + Status as contact FROM name"
           con.Open()
           Dim cmd As New SqlCommand(strauto, con)

           Dim reader As SqlDataReader = cmd.ExecuteReader()
           Dim MyCollection As New AutoCompleteStringCollection()

           If reader.HasRows = True Then
               While reader.Read()


                   ' MyCollection.Add(reader("FULL_NAME + ',' + Company + ',' + Status").ToString())
                   MyCollection.Add(reader("contact").ToString())
               End While
           End If



           txtCompanyKeyContacts.AutoCompleteCustomSource = MyCollection
           con.Close()
       End Using

【问题讨论】:

  • 标准的自动完成功能要求控件本身的文本实际上与自动完成列表中项目的开头相匹配。如果你想要别的东西,那么你必须自己实现它。
  • MyCollection.Add(reader("contact").ToString())中的contact 是什么意思
  • Ops that quot 随机出现.. 实际代码是 MyCollection.Add(reader("contact").ToString())
  • jmcilhinney- 问题是它显示一些记录不是全部......但是当我在 sql svr 中运行相同的查询时,它显示了预期的结果

标签: vb.net winforms autocompletebox


【解决方案1】:

这个建议是不同的方向……

我会改用 ComboBox 来让人们看到建议列表。这会稍微放松一下,并导致 IMO 更有可能成功

    Dim sName As String = "elizibeth"
    Dim SQL As String = <x>
    SELECT [ContactName] + ' - ' + [CompanyName] Name
      FROM [northwind].[dbo].[Contacts] 
      WHERE soundex(ContactName) = soundex('<%= sName %>')
    </x>.Value
    Dim dt As DataTable = Gen.GetDataTable(SQL, sConnectNorthwind) ' my libray for a read-only datatable
    ComboBox1.DataSource = dt
    ComboBox1.DisplayMember = "Name"

【讨论】:

  • 非常接近...但是当我使用它时,我无法在组合框中输入多个单词
  • 自动完成并不完美。最好与单个单词或代码等简单的事物一起使用。在某些情况下,我会监视 TextChanged 并等待 3 或 4 个字符,然后再向用户显示选项列表。这大大缩小了列表的范围。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-25
  • 2013-11-02
  • 2016-05-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多