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?
|
<syncfusion:SfDataGrid x:Name="sfDataGrid"
SelectionMode="Extended"
FilterRowPosition="Top"
ItemsSource="{Binding Orders}"
AutoGenerateColumns="False">
<interactivity:Interaction.Behaviors>
<local:SfDataGridBehavior />
</interactivity:Interaction.Behaviors>
</syncfusion:SfDataGrid> |
|
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;
}
} |