C# 在DataGridView中搜索匹配项或部分匹配项
试图筛选谷歌的搜索结果;不走运。我试图做的是,在文本框中给定一些文本:在我的DataGridView的任何列中搜索至少一个部分匹配,并让控件选择它遇到该部分匹配的第一行(将其显示为顶行并高亮显示) 以下是我对DataGridView数据源的声明以及列的组织方式:C# 在DataGridView中搜索匹配项或部分匹配项,c#,.net,linq,datagridview,C#,.net,Linq,Datagridview,试图筛选谷歌的搜索结果;不走运。我试图做的是,在文本框中给定一些文本:在我的DataGridView的任何列中搜索至少一个部分匹配,并让控件选择它遇到该部分匹配的第一行(将其显示为顶行并高亮显示) 以下是我对DataGridView数据源的声明以及列的组织方式: var queryData = from va in xdoc.Descendants("language") select new {
var queryData = from va in xdoc.Descendants("language")
select new
{
StringID = va.Parent.Parent.Attribute("id").Value,
Language = va.Attribute("name").Value,
LanguageData = va.Element("value").Value,
};
var organizedData = from x in queryData
group x by x.StringID into xg
select new
{
StringID = xg.Key,
English = xg.SingleOrDefault(x => x.Language == "ENGLISH_US").LanguageData,
Custom = xg.SingleOrDefault(x => x.Language == languageBox.SelectedItem.ToString()).LanguageData,
};
mainView.DataSource = organizedData.ToList();
以下是处理点击“搜索”按钮的函数的当前定义:
private void searchButton_Click(object sender, EventArgs e)
{
int currentIndex = mainView.CurrentRow.Index;
if (searchBox.Text.Length == 0)
{
mainView.CurrentCell = mainView[0,0];
mainView.Focus();
return;
}
}
像这样的事情可能会让你接近:
string searchForText = "whatever";
DataGridViewRow rowFound = mainView.Rows.OfType<DataGridViewRow>()
.FirstOrDefault(row => row.Cells.OfType<DataGridViewCell>()
.Any(cell => ((dynamic)cell.Value).StringID.Contains(searchForText)));
if (rowFound != null) {
mainView.Rows[rowFound.Index].Selected = true;
mainView.FirstDisplayedScrollingRowIndex = rowFound.Index;
}
string searchForText=“无论什么”;
DataGridViewRowFound=mainView.Rows.OfType()的
.FirstOrDefault(row=>row.Cells.OfType())
.Any(cell=>((动态)cell.Value).StringID.Contains(searchForText));
if(rowfind!=null){
mainView.Rows[rowfind.Index].Selected=true;
mainView.FirstDisplayedScrollingRowIndex=rowFound.Index;
}
第一次尝试正确表达您的问题时,可能会出现重复。花点时间在上面。如果没有,请编辑它,不要重新发布。谢谢Henk,不过这是两个不同的问题。请试着更仔细地检查被问的问题,而不是简单地假设问题之间的重复内容意味着重复的问题。再次,我大笑,因为这两个问题是如此明显的不同,哪怕是粗略地看一眼。嗯,这做得很好,但是出于某种原因,它没有进入一行,比如,第一列包含文本。谢谢你的回复!古怪的第一栏有什么特别之处吗?它是一个组合框还是其他类似的东西?嗯,不是。这是OP中Linq查询的“StringID”匿名类型。此外,如果可能,连续单击“搜索”按钮应将DataGridView的选定行前进到下一个潜在候选行。我已经更新了搜索StringID的帐户(希望如此);但是,连续搜索会循环搜索下一个结果,然后再搜索下一个结果,我将留给您。这将是一个有点痛苦,但它应该是可行的。您必须跟踪搜索词是否已更改,并跟踪当前搜索词的最近一行。再次感谢您的帮助,Adam。