【问题标题】:Sorting a WPF datagrid by word preceding search word按搜索词前的词对 WPF 数据网格进行排序
【发布时间】:2014-02-14 05:03:07
【问题描述】:

我有一个我正在尝试排序的数据网格。数据网格有一列字符串。在此列中,我按搜索字符串执行过滤。完成后,我想按单元格内搜索字符串前面的单词或后面的单词对数据网格进行排序。我将如何进行这样的排序?

更新

这是我到目前为止所得到的。

private void tbSearch_TextChanged(object sender, TextChangedEventArgs e)
    {
        TextBox tb = sender as Textbox;
        _searchstr = tb.Text;
        ICollectionView view = CollectionViewSource.GetDefaultView(SentenceLists);
        view.Filter = new Predicate<object>(FilterBySearch);
    }

这是过滤器功能,我正在考虑向我的 SentenceLists 对象添加另一个名为 sortWord 的属性并对其进行排序。但我无法让它工作。

private bool FilterBySearch(object item)
    {
        ServiceTemplateController.SentenceList sl = item as ServiceTemplateController.SentenceList;
        if (_searchstr.ToUpper() == "") return true;
        if (sl.sentence.Contains(_searchstr.ToUpper()))
        {
            string[] strArray = sl.sentence.Split(' ');
            for (int i = 0 ; i < strArray.Count(); i++)
            {
                if (strArray[i].Contains(_searchstr.ToUpper()))
                {
                    if (radioBefore.IsChecked == true)
                    {
                        if (i == 0) sl.sortWord = strArray[i];
                        else sl.sortWord = strArray[i - 1];
                    }
                    else  //radio after is selected then.
                    {
                        if (i == strArray.Count() - 1) sl.sortWord = strArray[i];
                        else sl.sortWord = strArray[i + 1];
                    }
                }
            }
            return true;
        }
        return false;
    }

【问题讨论】:

  • 你尝试过的...
  • 您能否提供一个示例以便我们提供解决方案?

标签: c# wpf sorting datagrid


【解决方案1】:

最终变得非常容易。刚刚将另一个隐藏列添加到绑定到 sortWord 的数据网格中。然后,我将使用 ICollectionView 排序描述按此列排序。 代码如下

private void tbSearchRun()
    {
        TextBox textbox = tbSearch as TextBox;
        if (textbox != null)
        {
            _searchstr = textbox.Text;
            if (_searchstr == null) return;
            ICollectionView view = CollectionViewSource.GetDefaultView(SentenceLists);
            view.Filter = new Predicate<object>(FilterBySearch);
            view.SortDescriptions.Clear();
            view.SortDescriptions.Add(new SortDescription("sortWord", ListSortDirection.Ascending));
            view.Refresh();
        }
    }
private bool FilterBySearch(object item)
    {
        ServiceTemplateController.SentenceList sl = item as ServiceTemplateController.SentenceList;
        if (_searchstr.ToUpper() == "") return true;
        if (sl.sentence.Contains(_searchstr.ToUpper()))
        {
            string[] strArray = sl.sentence.Split(' ');
            for (int i = 0; i < strArray.Count(); i++)
            {
                if (strArray[i].Contains(_searchstr.ToUpper()))
                {
                    if (radioBefore.IsChecked == true)
                    {
                        if (i == 0) sl.sortWord = strArray[i];
                        else sl.sortWord = strArray[i - 1];
                    }
                    else  //radio after is selected then.
                    {
                        if (i == strArray.Count() - 1) sl.sortWord = strArray[i];
                        else sl.sortWord = strArray[i + 1];
                    }
                    break;
                }
            }
            return true;
        }
        return false;
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-23
    • 2011-12-07
    • 2023-02-06
    • 2011-09-22
    • 1970-01-01
    相关资源
    最近更新 更多