当搜索框

时间:2018-03-08 13:02:58

标签: c# wpf datagrid

我正在使用collectionviewsource来搜索我的wpf应用程序中的datagrid。我使用实体框架从数据库填充我的数据网格。除搜索功能外,一切正常。我正在使用textchanged事件和collectionviewsource来搜索datagrid itemsource中的文本。发生的事情是我可以进行搜索,datagrid在搜索框中输入时会过滤数据(此处搜索框是文本框),但是当清空搜索框时,数据网格必须填充所有行,但这是我遇到的问题。它显示了最后一个搜索过滤器。这是下面的代码。请帮帮我们..

private void txtSearch_TextChanged(object sender, TextChangedEventArgs e)
    {
        if (txtSearch.Text != String.Empty)
        {
            textSearch = sender as TextBox;
            filterText = textSearch.Text;

            var cv = CollectionViewSource.GetDefaultView(dgDetailedRecordList.ItemsSource);

            if (filterText != null)
            {
                cv.Filter = o =>
                {
                    var emp = o as DetailedReportInventoryTableItems;
                    return (emp.product_name.ToLower().ToString().Contains(filterText.ToLower().ToString())
                    || emp.emp_no.ToLower().ToString().Contains(filterText.ToLower().ToString())
                    );
                };
            }
        }
    }

1 个答案:

答案 0 :(得分:2)

问题可能是已分配的过滤器。如果txtSearch.TextString.Empty,则必须重置过滤器。尝试修改代码,如下所示:

private void txtSearch_TextChanged(object sender, TextChangedEventArgs e)
{
     var cv = CollectionViewSource.GetDefaultView(dgDetailedRecordList.ItemsSource);
     if (txtSearch.Text != String.Empty)
     {
         textSearch = sender as TextBox;
         filterText = textSearch.Text;  
         if (filterText != null)
         {
             // Existing filter here     
         }
     }
     else
     {
        cv.Filter = null;
     }
}

我还没有对代码进行测试,如果有效,请告诉我。

很少有其他改进注意事项:

  • .ToLower()会返回一个字符串,因此无需附加.ToString()
  • 如果您不确定emp.product_name的数据类型,则可以在.ToString()之后使用.ToLower()
  • 所以代码就像emp.product_name.ToString().ToLower().