Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在DataGridView中搜索匹配项或部分匹配项_C#_.net_Linq_Datagridview - Fatal编程技术网

C# 在DataGridView中搜索匹配项或部分匹配项

C# 在DataGridView中搜索匹配项或部分匹配项,c#,.net,linq,datagridview,C#,.net,Linq,Datagridview,试图筛选谷歌的搜索结果;不走运。我试图做的是,在文本框中给定一些文本:在我的DataGridView的任何列中搜索至少一个部分匹配,并让控件选择它遇到该部分匹配的第一行(将其显示为顶行并高亮显示) 以下是我对DataGridView数据源的声明以及列的组织方式: var queryData = from va in xdoc.Descendants("language") select new {

试图筛选谷歌的搜索结果;不走运。我试图做的是,在文本框中给定一些文本:在我的DataGridView的任何列中搜索至少一个部分匹配,并让控件选择它遇到该部分匹配的第一行(将其显示为顶行并高亮显示)

以下是我对DataGridView数据源的声明以及列的组织方式:

 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。