在特定列上键入关键字时搜索

时间:2015-08-14 07:21:04

标签: c# wpf datagridview

我正在尝试使用带有以下代码的c#在WPF中使用gridview.keydown事件来实现一个功能

string searchText = e.Key.ToString();

PropertyInfo[] properties = typeof(MarketWatchOM).GetProperties();
foreach (PropertyInfo property in properties)
{
    if (!string.IsNullOrEmpty(SearchPreferanceMarketWatch) && property.Name.ToUpper().Equals(SearchPreferanceMarketWatch.ToUpper()))
    {
        var item = this.MktWatchGrid.Items.Cast<MarketWatchOM>().Any(selectedRow =>
    selectedRow.CustomSymbol.StartsWith(searchText, StringComparison.OrdinalIgnoreCase));
        if (item == null)
            return;

        this.MktWatchGrid.CurrentItem = item;
        this.MktWatchGrid.ScrollIntoView(item);
        break;
    }
}

在这里,我能够捕捉到的是一次击键。你能否建议任何方法来获取一个完整的单词&#39;然后该方法将在列中搜索该完整的单词。

如何更改我的代码以获得所需的单词?

2 个答案:

答案 0 :(得分:0)

您必须将每次按键保存到某处的某个字段,直到找到指示该字词结尾的内容。在您的方法之外,有一个私有字段:

private string _searchText = "";

然后将代码的第一行更改为:

_searchText += e.Key.ToString();

最后,将对searchText的所有引用更改为_searchText

这将跟踪所有按键。

您可能还需要包含一个计时器,并且在没有打字2-3秒后,“忘记”&#39;用户已输入的内容。这类似于文件/列表搜索在其他应用程序中的工作方式。

答案 1 :(得分:0)

除了皮特的回答,这里还有一些关于使用计时器的说明:

使用DispatcherTimer。创建一个计时器的单个实例,将间隔设置为3秒并订阅它的TickEvent。每按一次键启动/重启计时器。在TickEvent处理程序中停止计时器并清除searchtextstring。 DispatcherTimer教程wpf-tutorial.com/misc/dispatchertimer