c# - 在 ListBox 中按 DisplayMember 搜索
问题描述
我有一个ListBox
这样填充的:
var dtCustomers = db.GetTableBySQL(query).AsEnumerable().Select(rows =>
new CustomersModel
{
Name = rows.Field<string>("Name"),
ProjectKey = rows.Field<int>("ProjectKey")
});
lstCustomers.DataSource = dtCustomers.ToList();
lstCustomers.DisplayMember = "Name";
lstCustomers.ValueMember = "ProjectKey";
lstCustomers.ClearSelected();
现在我想TextBox
使用搜索按钮创建以查看此列表并按选择的项目搜索:
private void btnSearch_Click(object sender, EventArgs e)
{
lstCustomers.SelectedItems.Clear();
for (int i = lstCustomers.Items.Count - 1; i >= 0; i--)
{
if (lstCustomers.Items[i].ToString().ToLower().Contains(txtSearch.Text.ToLower()))
{
lstCustomers.SetSelected(i, true);
}
}
lblitems.Text = lstCustomers.SelectedItems.Count.ToString() + "items found";
}
问题是它永远找不到任何东西。我认为这是因为它是通过ValueMember
而不是比较DisplayMember
。我可以在列表中搜索DisplayMember
吗?
解决方案
您可以为此使用模式匹配,因为基础项目将是您的CustomersModel
:
private void btnSearch_Click(object sender, EventArgs e)
{
lstCustomers.SelectedItems.Clear();
int matchCount = 0;
for (int i = lstCustomers.Items.Count - 1; i >= 0; i--)
{
if (lstCustomers.Items[i] is CustomersModel customer &&
customer.Name.IndexOf(txtSearch.Text, StringComparison.OrdinalIgnoreCase) > -1)
{
matchCount++;
lstCustomers.SetSelected(i, true);
}
}
lblItems.Text = $"{matchCount} item{(matchCount > 1 ? "s" : "")} found";
}
推荐阅读
- javascript - javascript中的随机项目显示
- java - 用于匹配 XML 标记的 Java 正则表达式
- python - 如何跳过python读取文件代码中的一些块?
- android - Android Retrofit 2.6.1 经常超时
- python - 如何根据 Pandas 中的列值仅从某些列中获取行?
- python - 为什么我的 pygame 说它没有初始化,即使我初始化了它?
- swift - UICollectionView 水平滚动 ui bug
- r - 无法为签名“phylo”找到函数“UniFrac”的继承方法
- python - python 3,二次函数
- python - 如何使用python对百万行数据进行ETL?