Selecting all filtered rows

Hi!
I want to select all rows that were shown after filtering.
I didn't found any similar questions or solutions yet, so I thought I can ask one here. (I'm using MVVM pattern)

Most important code from my XAML file:

<grid:SfDataGrid.Columns>
                <grid:GridCheckBoxColumn HeaderText="" MappingName="Wybrany" Width="30" IsReadOnly="False"/>
                <grid:GridTextColumn HeaderText="Numer ZP" MappingName="NumerZP" IsReadOnly="True" FilterRowCondition="Contains"/>
                <grid:GridTextColumn HeaderText="Numer ZS" MappingName="NumerZS" IsReadOnly="True" FilterRowCondition="Contains"/>
                <grid:GridTextColumn HeaderText="Klient" MappingName="Kontrahent" IsReadOnly="True" FilterRowCondition="Contains"/>
                <grid:GridTextColumn HeaderText="Nazwa wyrobu" MappingName="Wyrob" IsReadOnly="True" FilterRowCondition="Contains"/>
                <grid:GridTextColumn HeaderText="Planowana ilość" MappingName="Ilosc" IsReadOnly="True" FilterRowCondition="Contains"/>
                <grid:GridTextColumn HeaderText="Pracownik" MappingName="NazwaPracownik" IsReadOnly="True" FilterRowCondition="Contains"/>
                <grid:GridTextColumn HeaderText="Materiał główny" MappingName="MaterialGlowny" IsReadOnly="True" FilterRowCondition="Contains"/>
                <grid:GridTextColumn HeaderText="Plan.termin rozp." MappingName="PlanowanyStart" IsReadOnly="True" FilterRowCondition="Contains"/>
                <grid:GridTextColumn HeaderText="Zamienniki (Materiał wypałki)" MappingName="ZamiennikTech" TextWrapping="Wrap" IsReadOnly="True" FilterRowCondition="Contains"/>
                <grid:GridTextColumn HeaderText="Zamówienie" MappingName="NumerZS" IsReadOnly="True" FilterRowCondition="Contains"/>
            </grid:SfDataGrid.Columns>


And from ContextMenu I want to select all positions:

            <syncfusion:SfDataGrid.ContextMenu>
                <ContextMenu>
                    <MenuItem x:Name="zaznaczWszystko"
                                  Header="Zaznacz wszystkie"
                                  Command="{Binding ZaznaczWszystkoCommand}"/>
                    <MenuItem x:Name="odznaczWszystko"
                                  Header="Odznacz wszystkie"
                                  Command="{Binding OdznaczWszystkoCommand}"/>
                </ContextMenu>
            </syncfusion:SfDataGrid.ContextMenu>

And my .cs code is just checking if the first checkbox is checked. If it is not, It will check it on.
My code is working well with checking any possible position in table, but my goal is to check only filtered rows.

How can I get all the filtered rows?

Best Regards,
Mateusz Kubis







1 Reply

VS Vijayarasan Sivanandham Syncfusion Team June 29, 2021 10:05 AM UTC

Hi Mateusz Kubis,

Thank you for contacting Syncfusion Support.

Based on provided information you can get the filtered records by access the SfDataGrid.View.Records when the filter is applied. The FilterChanged event occurs whenever the filter is changed. Please refer the below code snippet, 
Code snippet XAML: 
<syncfusion:SfDataGrid x:Name="sfDataGrid" 
                               SelectionMode="Extended" 
                               FilterRowPosition="Top"                                
                               ItemsSource="{Binding Orders}"                                
                               AutoGenerateColumns="False"> 
            <interactivity:Interaction.Behaviors> 
                <local:SfDataGridBehavior /> 
            </interactivity:Interaction.Behaviors> 
</syncfusion:SfDataGrid>        

Code snippet C#:
 
public class SfDataGridBehavior : Behavior<SfDataGrid> 
{ 
        protected override void OnAttached() 
        { 
            AssociatedObject.FilterChanged += AssociatedObject_FilterChanged; 
        } 
 
        private void AssociatedObject_FilterChanged(object sender, GridFilterEventArgs e) 
        { 
            //get the filtered records 
            var filteredResult = AssociatedObject.View.Records.Select(recordentry => recordentry.Data); 
            //here customized based on your requirment  
            if ((AssociatedObject.DataContext as ViewModel).Orders.Count() != filteredResult.Count()) 
                AssociatedObject.SelectAll(); 
            else 
                AssociatedObject.ClearSelections(false); 
        } 
 
        protected override void OnDetaching() 
        { 
            AssociatedObject.FilterChanged -= AssociatedObject_FilterChanged; 
       } 
} 

Sample Link: https://www.syncfusion.com/downloads/support/forum/166750/ze/Sample2077959903

For more information related to get the FilteredRecords, please refer the knowledge base guide documentation,

KB Link: https://www.syncfusion.com/kb/2425/how-to-access-the-filtered-records-from-sfdatagrid 

Please let us know if you have any concerns in this. 
 
Regards, 
Vijayarasan S 


Loader.
Up arrow icon