Laden...

[erledigt] DataGridColumnHeader mit Filter-Funktion

Erstellt von ErfinderDesRades vor 11 Jahren Letzter Beitrag vor 11 Jahren 3.006 Views
ErfinderDesRades Themenstarter:in
5.299 Beiträge seit 2008
vor 11 Jahren
[erledigt] DataGridColumnHeader mit Filter-Funktion

Hi!

Ich würde gerne meine Spalten-überschriften um Buttons u. dgl. erweitern, um dem User Spalten-Filter anzubieten.
Stelle ich mir vor wie eine doppelte Kopfzeile: Oben die Spaltenbezeichnung und darunter die Eingabe für den Filter.

Ich kann zwar ein ControlTemplate auf den ColumnHeader draufmachen, aber dann ist die Sortier-Funktionalität weg, also dass der sortiert, wenn man auf den oberen ColumnHeader klickst.

Der frühe Apfel fängt den Wurm.

M
81 Beiträge seit 2009
vor 11 Jahren

Servus,

hab auch eine Zeit lang gesucht, bis ich auf Filtering the WPF DataGrid automatically via the header (inline filtering) gestoßen bin.

Man muss die Sache richtig konfigurieren und der Filter hat keine Probleme bei 600 oder 4000 Elementen.

M
81 Beiträge seit 2009
vor 11 Jahren

ODer suchst du etwas wie die Janus Controls? Die haben zwar nur für Win Forms, aber es wird auch bald eine WPF Lösung angekündigt.
Deren Filterfunktion bzw. deren GridControl ist super gelöst, besonders die Möglichkeit zu suchen und zu filtern.

ErfinderDesRades Themenstarter:in
5.299 Beiträge seit 2008
vor 11 Jahren

Das CodeProject-Teil läuft bei mir nicht, weil meine 2008-er Installation rumzickt.
Und FW4, wassich einsetze, kennt kein DataGridHeaderBorder X(

Edit: auf 2010 konvertiert läufts jetzt doch (sieht bisser komisch aus) - aber ist halt das falsche Framework.

Der frühe Apfel fängt den Wurm.

ErfinderDesRades Themenstarter:in
5.299 Beiträge seit 2008
vor 11 Jahren

mit einem DataTemplate kann man als Header einsetzen, was man will, und das tangiert die Sortier-Funktionalität ühaupt nicht!


    <DataGrid hlp:GridEx.Range="b4 c" ItemsSource="{Binding Path=Logs}" AutoGenerateColumns="False" VirtualizingStackPanel.VirtualizationMode="Recycling"  IsReadOnly="True" >
      <DataGrid.Columns>
        <DataGridTextColumn 
          Binding="{Binding Path=LogLevel}" 
          Header="{Binding Path=Logmonitor.ReadParam, Source={StaticResource MainModel}}" >
          <DataGridTextColumn.HeaderTemplate>
            <DataTemplate DataType="{x:Type my:LogReadParams}">
              <ComboBox ItemsSource="{Binding Path=LogLevels}" DisplayMemberPath="Item1" />
            </DataTemplate>
          </DataGridTextColumn.HeaderTemplate>
        </DataGridTextColumn>
        <DataGridTextColumn Binding="{Binding Path=TimeStamp}" Header="TimeStamp" />
<!-- usw. -->

nervig nur, dass der Xaml-Designer einen total falschen DataContext anbietet, wenn man das Binding für den Header setzen will.

Der frühe Apfel fängt den Wurm.