【问题标题】:Filtering listbox with textbox使用文本框过滤列表框
【发布时间】:2016-09-04 12:16:47
【问题描述】:

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

我目前有一个从 mysql 数据库中取出列“名称”的列表框。 一旦应用程序启动,它就会加载列表框中的所有名称。 但是因为可能有很多名字,我想要一个过滤选项。 因此,如果您在列表框中有例如 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”

我尝试了几件事,但似乎从来没有奏效。

谢谢。

【问题讨论】:

  • 您是在寻找过滤文本框中的项目,还是过滤 SQL 查询中的项目?
  • 列表框中的项目

标签: c# mysql wpf listbox


【解决方案1】:

不要将 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);
    }
}

然后您可以为TextBoxTextChanged event 添加一个事件处理程序:

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);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-05-25
    • 1970-01-01
    • 2021-11-08
    • 1970-01-01
    • 1970-01-01
    • 2017-10-30
    • 2016-06-14
    • 2016-04-05
    相关资源
    最近更新 更多