gpt4 book ai didi

c# - 在 c# Winform( Entity Framework )中搜索记录

转载 作者:太空宇宙 更新时间:2023-11-03 23:26:21 24 4
gpt4 key购买 nike

我有一个带有文本框的 c# winform,通过 Entity Framework 连接到一个名为 Candidates 的表(它有 700 条记录)。我正在使用名为 candidatesBindingSource 的 BindingSource。一切如我所愿。

只有一件事。我正在尝试使用姓氏搜索候选人。所以我有一个名为 textSurname 的文本框和一个带有此代码的按钮用于搜索我的记录:

var searchResults = (from a in _context.Candidates where (a.Surname.Contains(textSurname.Text)) select a.Id).ToList();
if (searchResults.Count > 0)
{
// Id of a record in searchResults is correct
var position = searchResults[0];
// This line moves focus to a wrong record
candidatesBindingSource.Position = position; //
}

如果找到一条记录,我可以获得它的 Id。在这里我有一个问题。如何将我的 candidatesBindingSource 重新定位到使用我的搜索结果中的 ID 进行记录?例如,如果我有一个 Id = 2638,上面的代码会重新定位我的 candidatesBindingSource到最后一条记录。我怀疑这部分 candidatesBindingSource.Position 实际上用作记录计数(我的表中为 700)并且无法进入记录 nr。 2638(不是用这个 Id 记录的)。我对吗?那么如何使用找到的 ID 实现 GOTO 记录呢?我真的必须使用带有 MoveNext 命令的 For 循环来将我搜索到的 ID 与所有 ID 进行比较吗?

任何提示将不胜感激。

最佳答案

好的,这就是你初始化绑定(bind)源的方式

candidatesBindingSource.DataSource = _context.Candidates.ToList();

那你就不用搜索数据库了,可以用List.FindIndex method搜索数据源列表。像这样:

var candidateList = (List<Candidate>)candidatesBindingSource.DataSource;
var searchText = textSurname.Text;
var firstMatchIndex = candidateList.FindIndex(c => c.Surname.Contains(searchText));
if (firstMatchIndex >= 0)
candidatesBindingSource.Position = firstMatchIndex;

关于c# - 在 c# Winform( Entity Framework )中搜索记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33689411/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com