【问题标题】:Searching a DataGridView for a match or partial match在 DataGridView 中搜索匹配或部分匹配
【发布时间】:2011-08-08 22:13:17
【问题描述】:

试图筛选谷歌搜索结果;没运气。我想要做的是,给定 TextBox 中的一些文本:在我的 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;
        }
    }

【问题讨论】:

  • Filtering this Linq query 的可能重复项
  • 尝试在第一时间正确表达您的问题。花一些时间在上面。如果没有,请编辑它并且不要转发。
  • 谢谢 Henk,但这是两个不同的问题。请尝试更仔细地检查所提出的问题,而不是简单地假设问题中的重复内容表示重复的问题。
  • 再说一次,我大声笑,因为这两个问题即使粗略一看也有明显的不同。

标签: c# .net linq datagridview


【解决方案1】:

这样的事情可能会让你接近:

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;
}

【讨论】:

  • 嗯,这做得很好,但是由于某种原因,它没有转到第一列包含文本的行。顺便谢谢你的回复!
  • 奇数。第一列有什么特别之处吗?它是一个组合框还是其他类似的东西?
  • 嗯,不。它是 OP 中该 Linq 查询的“StringID”匿名类型。此外,如果可能,连续单击“搜索”按钮应将 DataGridView 的选定行推进到下一个潜在候选者。
  • 好吧,我已经更新了我对(希望)帐户搜索 StringId 的答案;但是,连续搜索会在下一个结果中循环,而下一个结果将留给您。这会有点痛苦,但它应该是可行的。您必须跟踪搜索词是否已更改,并跟踪为当前搜索词找到的最新行
  • 再次感谢您的帮助,亚当。
猜你喜欢
  • 2017-04-26
  • 2013-09-11
  • 1970-01-01
  • 1970-01-01
  • 2012-10-05
  • 2019-10-20
  • 1970-01-01
  • 2017-03-02
  • 1970-01-01
相关资源
最近更新 更多