过滤列表框与文本框
本文关键字:文本 过滤 列表 | 更新日期: 2023-09-27 18:05:39
我知道这个问题可能被问了几次,但我环顾四周,我找不到适合我的正确方法。所以,这是我的问题。
我目前有一个列表框,从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"
我试了几样东西,但似乎都不起作用。
谢谢。
不要将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
的TextChanged
事件添加一个事件处理程序:
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);
}