C# 如何从文本框中搜索数据库生成的列表框项目
我正在尝试用文本框实现搜索/过滤功能。文本框应该搜索我的列表框,它是通过SQL数据库中的数据填充的 这就是我目前所尝试的C# 如何从文本框中搜索数据库生成的列表框项目,c#,wpf,C#,Wpf,我正在尝试用文本框实现搜索/过滤功能。文本框应该搜索我的列表框,它是通过SQL数据库中的数据填充的 这就是我目前所尝试的 private void Search_TextChanged(object sender, TextChangedEventArgs e) { GetAreas(); } private void GetAreas() { using (SqlConnection sqlCon = new SqlConnection(connectionString))
private void Search_TextChanged(object sender, TextChangedEventArgs e)
{
GetAreas();
}
private void GetAreas()
{
using (SqlConnection sqlCon = new SqlConnection(connectionString))
{
sqlCon.Open();
string query_search = "SELECT * FROM tblAllPostCodes WHERE (Town LIKE @Town)";
SqlCommand com = new SqlCommand(query_search, sqlCon);
com.Parameters.AddWithValue("@Town", "%" + Search.Text + "%");
using (SqlDataAdapter adapter = new SqlDataAdapter(com))
{
DataTable dt = new DataTable();
adapter.Fill(dt);
Area.ItemsSource = dt.DefaultView;
}
sqlCon.Close();
}
}
这是获取我的列表框项目的方式
public void AreaList()
{
DataTable dt = new DataTable();
SqlDataAdapter adpt = new SqlDataAdapter("SELECT DISTINCT Town from tblAllPostCodes", sqlCon);
adpt.Fill(dt);
foreach (DataRow dr in dt.Rows)
{
Area.Items.Add(dr["Town"].ToString());
}
}
我曾尝试过清除项目,但它们最终在搜索时被清除,并且没有填充匹配的文本
任何帮助都可以理解,我已经在这方面工作了一段时间。
< P>而不是在每个TrExchange事件上启动SQL查询,你应该考虑只过滤你的DATAView,比如: 列表框的XAML应如下所示:<ListBox DisplayMemberPath="Town"/>
您只需查询数据库一次,并将结果保存在集合变量中:
private readonly List<string> _allTowns = new List<string>();
public void AreaList()
{
_allTowns.Clear();
using (DataTable dt = new DataTable())
using (SqlDataAdapter adpt = new SqlDataAdapter("SELECT DISTINCT Town from tblAllPostCodes", sqlCon))
{
adpt.Fill(dt);
foreach (DataRow dr in dt.Rows)
{
_allTowns.Add(dr["Town"].ToString());
}
}
Area.ItemsSource = _allTowns;
}
虽然不完全是你的问题的答案,但这里有一个提示,我希望我能更快得到:考虑把你的数据提取到数据对象/模型的列表中,而不是使用数据表。它使数据提取稍微复杂一些,但它使其他一切都简单得多。
private readonly List<string> _allTowns = new List<string>();
public void AreaList()
{
_allTowns.Clear();
using (DataTable dt = new DataTable())
using (SqlDataAdapter adpt = new SqlDataAdapter("SELECT DISTINCT Town from tblAllPostCodes", sqlCon))
{
adpt.Fill(dt);
foreach (DataRow dr in dt.Rows)
{
_allTowns.Add(dr["Town"].ToString());
}
}
Area.ItemsSource = _allTowns;
}
private void GetAreas()
{
Area.ItemsSource = _allTowns.Where(x => x.Contains(Search.Text)).ToArray();
}