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.
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; }
}
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
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'";
DataGird
type. La suite est le meilleur que j'ai trouvé:
- Option 1: que j'utilise personnellement: filtrage automatique de DataGrid de la boîte à outils du FPF
- Option 2:filtre Automatique pour Microsoft WPF DataGrid
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