在文本框中筛选DataGrid

ser*_*hio 25 wpf datagrid wpfdatagrid

我搜索示例或示例以通过文本框过滤WPF DataGrid列元素.

替代文字

同样的事情也到这个(给定的例子使用WPFToolkit ...通过微软显然放弃了...)

XAML

<Canvas>
    <DataGrid Height="200" Name="dataGrid1" Width="200" Canvas.Top="23" />
    <TextBox  Name="textBox1" Width="120" />
</Canvas>
Run Code Online (Sandbox Code Playgroud)

CS:

public partial class MainWindow : Window
{
    private List<Personne> persons;
    ICollectionView cvPersonnes;

    public MainWindow()
    {
        InitializeComponent();

        persons = new List<Personne>();

        persons.Add(new Personne() { Id = 1, Nom = "Jean-Michel", Prenom = "BADANHAR" });
        persons.Add(new Personne() { Id = 1, Nom = "Gerard", Prenom = "DEPARDIEU" });
        persons.Add(new Personne() { Id = 1, Nom = "Garfild", Prenom = "THECAT" });
        persons.Add(new Personne() { Id = 1, Nom = "Jean-Paul", Prenom = "BELMONDO" });

        cvPersonnes = CollectionViewSource.GetDefaultView(persons);

        if (cvPersonnes != null)
        {
            dataGrid1.AutoGenerateColumns = true;
            dataGrid1.ItemsSource = cvPersonnes;
            cvPersonnes.Filter = TextFilter;
        }
    }

    public bool TextFilter(object o)
    {
        Personne p = (o as Personne);
        if (p == null) 
            return false;

        if (p.Nom.Contains(textBox1.Text))
            return true;
        else
            return false;
    }

}

public class Personne
{
    public int Id { get; set; }
    public string Nom { get; set; }
    public string Prenom { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

vla*_*lad 25

您可以通过将DataGrid绑定到ICollectionView支持过滤的项来过滤它们.

详情这里的.NET 4的过程是用于.NET 4.5一样的,但似乎文件已经丢失.在"分组,排序和过滤"标题下,这里有一点提及.

编辑:在最初编写时,微软没有放弃WPF工具包.过去作为其一部分的控件现在在框架中,并且工具包在这里运行良好

  • @vlad看起来你很快就说它没有被抛弃. (2认同)

Moi*_*ues 6

我在各个网站上看到过很多关于这个问题...

要使用数据表作为源来过滤后者是数据网格,这在下面的代码中非常常见:

DataTable dt = new DataTable("Table1");

//fill your datatable...

//after fill...
dataGrid1.DataContext = dt;
IBindingListView blv = dt.DefaultView;
blv.Filter = "NAME = 'MOISES'";
Run Code Online (Sandbox Code Playgroud)