【发布时间】:2017-08-03 16:05:17
【问题描述】:
我正在尝试根据搜索框过滤所选列的数据。到目前为止,我有这个,基于这篇文章:filter wpf datagrid values from a textbox
数据网格集合:
public ICollectionView DataGridCollection
{
get { return _dataGridCollection; }
set { _dataGridCollection = value; NotifyPropertyChanged("DataGridCollection"); }
}
过滤器集合:
private void FilterCollection()
{
if (_dataGridCollection != null)
{
_dataGridCollection.Refresh();
}
}
数据来源:
DataTable pixsellOrders = SqlConnect(query);
Grid.Dispatcher.Invoke(DispatcherPriority.Normal, (ThreadStart)delegate { DataGridCollection = CollectionViewSource.GetDefaultView(pixsellOrders); });
DataGridCollection.Filter = new Predicate<object>(filter);
过滤按钮(右击):
private void MenuItem_Click(object sender, RoutedEventArgs e)
{
string filter = "";
FilterBox.Dispatcher.Invoke(DispatcherPriority.Normal, (ThreadStart)delegate { filter = FilterBox.Text; });
if (filter == "")
{
Console.WriteLine("no filter");
return;
}
else
{
Console.WriteLine(filter);
FilterCollection();
}
}
基于示例:
private bool filter(object item)
{
if (item.Subject.Contains(_searchstr) || item.Reference.Contains(searchstr))
{
return true;
}
return false;
}
XAML:
<Grid DataContext="{Binding ElementName=ResultsWindow}">
<DataGrid x:Name="Grid" HorizontalAlignment="Stretch" Height="Auto" Margin="20,45,20,60" VerticalAlignment="Stretch" Width="Auto" ItemsSource="{Binding DataGridCollection}" >
<DataGrid.Resources>
<ContextMenu x:Key="DataGridColumnHeaderContextMenu">
<MenuItem Header="Filter" Click="MenuItem_Click"/>
</ContextMenu>
<Style TargetType="{x:Type DataGridColumnHeader}">
<Setter Property="ContextMenu"
Value="{StaticResource DataGridColumnHeaderContextMenu}"/>
</Style>
</DataGrid.Resources>
</DataGrid>
<Button x:Name="BtnBack" Content="Back" HorizontalAlignment="Right" Margin="0,0,20,20" VerticalAlignment="Bottom" Width="76" Click="BtnBack_Click"/>
<TextBox Height="27" Margin="65,10,0,0" TextWrapping="Wrap" VerticalAlignment="Top" HorizontalAlignment="Left" Width="524" Name="FilterBox"/>
<Label Content="Filter" HorizontalAlignment="Left" Margin="20,10,0,0" VerticalAlignment="Top"/>
</Grid>
在示例中,列在过滤器(私有布尔过滤器)中显式声明。我想仅对选定的列进行过滤(右键单击列标题并从上下文菜单中选择过滤器)。我该如何调整我必须做的事情?不幸的是,我对 XAML 没有太多经验。
【问题讨论】:
标签: c# wpf search visual-studio-2017 wpfdatagrid