WPF DataGrid filter

je recherche un exemple ou un échantillon pour filtrer les éléments de la colonne DataGrid WPF à l'aide d'une boîte de texte.

alt text

quelque Chose de similaire à (l'exemple utilise un WPFToolkit... apparemment abandonné par Microsoft...)

EDIT

Mise À Jour Du Code

XAML

<Canvas>
    <DataGrid Height="200" Name="dataGrid1" Width="200" Canvas.Top="23" />
    <TextBox  Name="textBox1" Width="120" />
</Canvas>

c:

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; }
}
25
demandé sur serhio 2010-11-12 18:52:39

4 réponses

Vous pouvez filtrer les éléments dans le DataGrid en le liant à un ICollectionView qui supporte le filtrage.

Détails ici pour. NET 4. Le processus est le même pour .NET 4.5, mais il semble que la documentation ait été perdue. Il y a une petite mention à cela ici sous la rubrique" groupage, tri et filtrage".

edit: au moment de la rédaction initiale, la boîte à outils WPF n'avait pas été abandonnée par Microsoft. Les contrôles que l'habitude d'être une partie est maintenant dans le cadre, et la boîte à outils était vivante et fonctionnait bien ici

25
répondu vlad 2015-07-23 03:00:46

j'ai vu sur différents sites beaucoup de bruit à ce sujet...

pour filtrer ce dernier étant un datagrid en utilisant un datatable comme source, ce qui est assez commun pour faire le code ci-dessous:

DataTable dt = new DataTable("Table1");

//fill your datatable...

//after fill...
dataGrid1.DataContext = dt;
IBindingListView blv = dt.DefaultView;
blv.Filter = "NAME = 'MOISES'";
6
répondu Moises Marques 2012-02-15 07:37:02
DataGrid styles sans en inventer un nouveau hérité DataGird type. La suite est le meilleur que j'ai trouvé:

3
répondu Mohammed A. Fadil 2012-01-08 10:13:47

j'ai écrit ma propre commande FilterDataGrid, elle est beaucoup plus flexible que celles fournies sur Codeprojet ou ailleurs. Je ne peux ni afficher le code complet ici, ni le publier.

mais: puisque votre source de données est très probablement enveloppée dans une vue ICollectionView, vous pouvez faire quelque chose comme ceci:

    public void ApplyFilters()
    {
        ICollectionView view = CollectionViewSource.GetDefaultView(ItemsSource);
        if (view != null)
        {
            view.Filter = FilterPredicate; 
        }
    }

    private bool FilterPredicate(object item)
    {
        var yourBoundItemOrRow = item as BoundItemType;

        return aFilterObject.Matches(yourBoundItemOrRow);
    }

Vous pouvez implémenter n'importe quelle logique de filtre facilement basé sur ce concept. Même des filtres très puissants. Note: j'ai ces méthodes dans ma propre classe dérivées de datagrid. Ils peuvent être adaptés pour fonctionner en dehors de la grille, aussi, par exemple dans un UserControl

0
répondu Falcon 2010-11-12 16:02:39