【问题标题】:VB.net Autocomplete Textbox filter using mysql database as custom source使用 mysql 数据库作为自定义源的 VB.net 自动完成文本框过滤器
【发布时间】:2017-12-21 15:30:12
【问题描述】:

我遇到了关于自动完成文本框的问题。首先,我已经将自动完成文本框与 mysql 数据库作为自定义源一起使用,但自动完成的默认文本过滤器是“开始于”而不是“包含”。我想将文本过滤器更改为“包含”,这样当我搜索字符串的任何部分时,包含搜索单词的全名将出现在自动完成建议中。

谁能帮我修复我的代码?

这是我到目前为止所做的代码:

            txtSearch.AutoCompleteMode = AutoCompleteMode.SuggestAppend
            txtSearch.AutoCompleteSource = AutoCompleteSource.CustomSource
            Dim DataCollection As New AutoCompleteStringCollection()
            Dim query As String
            sqlcon = New MySqlConnection
            sqlcon.ConnectionString =
        "server=localhost;userid=root;password=root;database=svfmemberlistdb"

            Try
                sqlcon.Open()
                query = " SELECT Name FROM svfmemberlistdb.svfmemberlist "
                sqlcmd = New MySqlCommand(query, sqlcon)
                sqladr.SelectCommand = sqlcmd
                sqladr.Fill(ds)
                sqladr.Dispose()
                sqlcon.Close()
                For Each row As DataRow In ds.Tables(0).Rows
                    If row.ToString.Contains(txtSearch.Text) Then
                        DataCollection.Add(row(0).ToString())
                    End If
                Next
            Catch ex As Exception

            End Try
            txtSearch.AutoCompleteCustomSource = DataCollection

【问题讨论】:

    标签: mysql vb.net autocomplete


    【解决方案1】:

    我在这里引用 Mitja Bonca 在 MSDN 上的回答。

    在这种情况下,自动完成模式就不行了。它的代码并不意味着 类似的东西。

    您必须编写自己的代码,对每个字母进行过滤 按下。

    所以我建议不要使用自动完成模式,并获取所有数据 (名称)到数据表中。当用户按下某个按钮时(“1”代表 例如),您从过滤开始,通过创建新的数据表 (保持主要的未附加 - 这样您就可以在以下情况下返回所有数据 通过退格键清除组合框),使用 Copy() 方法 - 创建一个完整的 复制原件,并使用 Select 方法进行过滤。

    这应该看起来像在 a 的两侧使用 % simbol 字符串 - 在两者之间进行过滤 - 这就是你想要的!

    DataTable AllNames = new DataTable();
    //fill it up and leave it untouched!
    
    //to filter comboBox with names that contains pressed characters do in 
    private void comboBox1_KeyPress(object sender, KeyPressEventArgs e)
    {
        string name = string.Format("{0}{1}", comboBox1.Text, e.KeyChar.ToString()); //join previous text and new pressed char
        DataRow[] rows = table.Select(string.Format("FieldName LIKE '%{0}%'", name));
       DataTable filteredTable = AllNames.Clone();
       foreach(DataRow r in rows)
           filteredTable.ImportRow(r);
       comboBox1.DataSource = null;
       comboBox1.DataSource = filteredTable.DefaultView;
       comboBox1.DisplayMember = "FieldName";
    }
    

    Reference

    编辑:这当然是c# 的答案,而不是VB.NET,但了解这个概念可能会有所帮助。

    【讨论】:

      猜你喜欢
      • 2011-09-14
      • 1970-01-01
      • 1970-01-01
      • 2019-07-13
      • 2017-09-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-19
      • 1970-01-01
      相关资源
      最近更新 更多