Filter ein DataGrid-Steuerelement auf ein Textfeld
Ich Suche ein Beispiel oder Beispiel-filter für das WPF-DataGrid-Spalte-Elemente von einem Textfeld.
Etwas ähnliches wie diese (das Beispiel verwendet eine WPFToolkit... anscheinend aufgegeben von Microsoft...)
XAML
<Canvas>
<DataGrid Height="200" Name="dataGrid1" Width="200" Canvas.Top="23" />
<TextBox Name="textBox1" Width="120" />
</Canvas>
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; }
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Filtern Sie die Elemente in der DataGrid-durch Bindung an eine
ICollectionView
, die Filterung unterstützt.Details hier für .NET 4. Der Prozess ist der gleiche für .NET 4.5, aber es scheint in der Dokumentation verloren gegangen. Es gibt eine kleine Erwähnung, es hier unter "Gruppieren, Sortieren und Filtern" - überschrift.
edit: damals war das ursprünglich geschrieben, das WPF-toolkit hatte nicht aufgegeben worden von Microsoft. Die Steuerelemente, die verwendet werden, um Teil davon sind jetzt im Rahmen, und das toolkit war am Leben und wohlauf hier
Habe ich gesehen, an verschiedenen Standorten viel Lärm um diese Sache...
Filtern, wobei letztere ein datagrid mit einer datatable als source, das ist durchaus üblich, um den folgenden code:
Gibt es mehrere Lösungen, aber meiner Meinung nach, die besten Lösungen sind diejenigen, die verwendet nur
DataGrid
Stile, ohne die Erfindung eines neuen geerbtDataGird
geben. Die followings sind die besten die ich gefunden habe:Ich geschrieben habe, meine eigenen FilterDataGrid Kontrolle, es ist viel flexibler als die, die auf CodeProject oder anderswo. Ich kann weder die post den vollständigen code hier, noch kann ich es veröffentlichen.
Aber: Seit Ihrer Datenquelle ist wahrscheinlich eingewickelt in eine ICollectionView ist, können Sie etwas wie das hier tun:
Können Sie implementieren filter-Logik einfach auf diesem Konzept. Sogar sehr, sehr mächtige Filter. Hinweis: ich habe diese Methoden in meiner eigenen Klasse, die von datagrid. Sie können angepasst werden, um die Arbeit außerhalb des Netzes auch, zum Beispiel in einem UserControl