使用文本框过滤列表框

时间:2016-09-04 12:16:47

标签: c# mysql wpf listbox

我知道这个问题可能会被问过几次,但我环顾四周,找不到适合我的正确方法。 所以,这是我的问题。

我目前有一个列表框,它从mysql数据库中取出“name”列。 应用程序启动后,它会立即加载列表框中的所有名称。 但因为可能有很多名字我想要一个过滤选项。 所以,如果你有列表框中的Mark Jones,Billy Peter,你只需要在文本框中输入Mark,Mark Jones就会出现。

填写列表框初始化组件:

        void fill_listbox()
    {
        string constring = "datasource=localhost;port=3306;username=root;password=xdmemes123";
        string Query = "select * from life.players ;";
        MySqlConnection conDataBase = new MySqlConnection(constring);
        MySqlCommand cmdDataBase = new MySqlCommand(Query, conDataBase);
        MySqlDataReader myReader;
        try
        {
            conDataBase.Open();
            myReader = cmdDataBase.ExecuteReader();

            while (myReader.Read())
            {
                string sName = myReader.GetString("name");
                namelistbox.Items.Add(sName);
            }
        }catch (Exception ex)
        {
            MessageBox.Show("Something went wrong. Error copied to clipboard.");
            Clipboard.SetText(ex.Message);
        }
    }

文本框名为“SrchBox”,列表框名称为“namelistbox”

我尝试了几件事,但它似乎从未奏效。

感谢。

1 个答案:

答案 0 :(得分:0)

不是将SQL查询中的名称直接分配给列表框,而是将它们分配给稍后可以过滤的列表或数组:

List<string> playerNames; 

void fill_listbox()
{
    string constring = "datasource=localhost;port=3306;username=root;password=xdmemes123";
    string Query = "select * from life.players ;";
    MySqlConnection conDataBase = new MySqlConnection(constring);
    MySqlCommand cmdDataBase = new MySqlCommand(Query, conDataBase);
    MySqlDataReader myReader;
    try
    {
        conDataBase.Open();
        myReader = cmdDataBase.ExecuteReader();

        while (myReader.Read())
        {
            string sName = myReader.GetString("name");
            playerNames.Add(sName);
        }

        foreach(string name in playerNames)
        {
            namelistbox.Items.Add(name);
        }

    }catch (Exception ex)
    {
        MessageBox.Show("Something went wrong. Error copied to clipboard.");
        Clipboard.SetText(ex.Message);
    }
}

然后,您可以为TextBox的{​​{3}}添加事件处理程序:

void textBox_TextChanged(object sender, EventArgs e)
{
    // create filtered list from playerNames
    var filteredList = from name in playerNames
                        where CultureInfo.CurrentCulture.CompareInfo.IndexOf(name, textBox.Text, CompareOptions.IgnoreCase) >= 0
                        select name;

    namelistbox.Items.Clear();
    foreach (string name in filteredList)
        namelistbox.Items.Add(name);
}