在c#Winform(实体框架)中搜索记录
我有一个带有文本框的c#winform,通过实体框架连接到一个名为候选表(它有700条记录)的表。 我正在使用名为在c#Winform(实体框架)中搜索记录,c#,winforms,entity-framework,search,full-text-search,C#,Winforms,Entity Framework,Search,Full Text Search,我有一个带有文本框的c#winform,通过实体框架连接到一个名为候选表(它有700条记录)的表。 我正在使用名为candidatesBindingSource的BindingSource。一切都按我的要求进行 只有一件事。我正在尝试用姓氏搜索候选人。所以我有一个文本框,叫做textNames,还有一个带有这个代码的按钮 用于搜索我的记录: var searchResults = (from a in _context.Candidates where (a.Surname.Contains(t
candidatesBindingSource
的BindingSource。一切都按我的要求进行
只有一件事。我正在尝试用姓氏搜索候选人。所以我有一个文本框,叫做textNames,还有一个带有这个代码的按钮
用于搜索我的记录:
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
实际上是作为recordcount工作的(在我的表中为700)
并且无法转到第2638号记录(而不是具有此Id的记录)。我说得对吗?那么,如何使用找到的Id实现GOTO记录呢?
我真的必须使用For循环和MoveNext
命令来比较我搜索的Id和所有Id吗
任何提示都将不胜感激。我认为您应该设置为candidatesBindingSource。项目的位置索引,而不是id。 这篇文章将帮助您正确地获取项目的索引,而无需再次读取整个数据。
您还可以尝试从绑定源获取索引。好的,这就是初始化绑定源的方法
candidatesBindingSource.DataSource = _context.Candidates.ToList();
然后,您不需要搜索数据库,您可以使用以下命令搜索数据源列表:
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;
var candidateList=(List)candidatesBindingSource.DataSource;
var searchText=textNames.Text;
var firstMatchIndex=candidateList.FindIndex(c=>c.lasname.Contains(searchText));
如果(firstMatchIndex>=0)
candidatesBindingSource.Position=firstMatchIndex;
如果根据上下文创建列表,它将具有与表单上设置的数据绑定相同的索引。要将表单设置为查看搜索结果,可以使用列表的FindIndex()方法中的a match,然后将.Position设置为该索引
using (Candidates _context = new Candidates())
{
var candidateList = _context.Candidate.ToList();
var firstCandidateMatchIndex = candidateList.FindIndex(c =>
c.Surname.Contains(textSurname.Text));
if (firstCandidateMatchIndex >= 0)
candidateBindingSource.Position = firstCandidateMatchIndex;
}
您在
candidatesBindingSource.DataSource
中放了什么?这一行使我的Bindingsource:candidatesBindingSource.DataSource=_context.Candidates.ToList()