Record context flyout on multi-selected details view
I am attempting to use a context flyout when multi-selecting several rows within a details view, but on mouse right click, all selected rows are unselected, and only the row being right clicked is selected.
How can I make the context flyout work the same was as the main data grid, where right clicking doesn't change the current selected rows?
<dataGrid:SfDataGrid
x:Name="schematicsGrid"
AllowEditing="False"
AllowFiltering="True"
AllowResizingColumns="True"
AutoGenerateColumns="True"
AutoGenerateRelations="False"
ColumnWidthMode="AutoWithLastColumnFill"
EnableDataVirtualization="True"
HideEmptyGridViewDefinition="True"
ItemsSource="{x:Bind ViewModel.Schematics.Data, Mode=OneWay}"
SelectedItems="{x:Bind ViewModel.SelectedSchematics, Mode=TwoWay}"
SelectionMode="Extended"
SelectionUnit="Row">
<dataGrid:SfDataGrid.DetailsViewDefinition>
<dataGrid:GridViewDefinition RelationalColumn="PreviousRevisions">
<dataGrid:GridViewDefinition.DataGrid>
<dataGrid:SfDataGrid
x:Name="prevRevisionsGrid"
AllowResizingColumns="True"
AutoGenerateColumns="True"
ColumnWidthMode="AutoWithLastColumnFill"
GridLinesVisibility="Both"
SelectedItems="{x:Bind ViewModel.PrevRevisionSelectedSchematics, Mode=TwoWay}"
SelectionMode="Extended"
SelectionUnit="Row">
<dataGrid:SfDataGrid.RecordContextFlyout>
<MenuFlyout>
<MenuFlyoutItem
x:Name="flyoutDetailDownload"
Click="flyoutDownload_Click"
CommandParameter="{Binding}"
Text="Download" />
<MenuFlyoutItem
x:Name="flyoutDetailDownloadProject"
Click="flyoutDownloadProject_Click"
CommandParameter="{Binding}"
IsEnabled="{x:Bind ViewModel.CanDownloadProject, Mode=OneWay}"
Text="Download as Project" />
<MenuFlyoutItem
x:Name="flyoutDetailChgVersion"
Click="flyoutChgVersion_Click"
CommandParameter="{Binding}"
Text="Change Version" />
<MenuFlyoutItem
x:Name="flyoutDetailChgTag"
Click="flyoutChgTag_Click"
CommandParameter="{Binding}"
Text="Change Tag" />
<MenuFlyoutItem
x:Name="flyoutDetailDelete"
Click="flyoutDelete_Click"
CommandParameter="{Binding}"
Text="Delete" />
<MenuFlyoutSeparator />
<MenuFlyoutItem
x:Name="flyoutDetailCopyCells"
Click="flyoutCopyCells_Click"
CommandParameter="{Binding}"
Text="Copy Cell(s)" />
<MenuFlyoutItem
x:Name="flyoutDetailCopyRows"
Click="flyoutCopyRows_Click"
CommandParameter="{Binding}"
Text="Copy Row(s)" />
</MenuFlyout>
</dataGrid:SfDataGrid.RecordContextFlyout>
</dataGrid:SfDataGrid>
</dataGrid:GridViewDefinition.DataGrid>
</dataGrid:GridViewDefinition>
</dataGrid:SfDataGrid.DetailsViewDefinition>
<dataGrid:SfDataGrid.TableSummaryRows>
<dataGrid:GridTableSummaryRow Title=" Row Count : {RowCount}" ShowSummaryInRow="True">
<dataGrid:GridSummaryRow.SummaryColumns>
<dataGrid:GridSummaryColumn
Name="RowCount"
Format="'{Count:d}'"
MappingName="Id"
SummaryType="CountAggregate" />
</dataGrid:GridSummaryRow.SummaryColumns>
</dataGrid:GridTableSummaryRow>
</dataGrid:SfDataGrid.TableSummaryRows>
<dataGrid:SfDataGrid.RecordContextFlyout>
<MenuFlyout>
<MenuFlyoutItem
x:Name="flyoutDownload"
Click="flyoutDownload_Click"
CommandParameter="{Binding}"
Text="Download" />
<MenuFlyoutItem
x:Name="flyoutDownloadProject"
Click="flyoutDownloadProject_Click"
CommandParameter="{Binding}"
IsEnabled="{x:Bind ViewModel.CanDownloadProject, Mode=OneWay}"
Text="Download as Project" />
<MenuFlyoutItem
x:Name="flyoutChgVersion"
Click="flyoutChgVersion_Click"
CommandParameter="{Binding}"
Text="Change Version" />
<MenuFlyoutItem
x:Name="flyoutChgTag"
Click="flyoutChgTag_Click"
CommandParameter="{Binding}"
Text="Change Tag" />
<MenuFlyoutSeparator />
<MenuFlyoutItem
x:Name="flyoutDelete"
Click="flyoutDelete_Click"
CommandParameter="{Binding}"
Text="Delete" />
<MenuFlyoutItem
x:Name="flyoutDeletePrevRevisions"
Click="flyoutDeletePrevRevisions_Click"
CommandParameter="{Binding}"
Text="Delete All Previous Revisions" />
<MenuFlyoutItem
x:Name="flyoutDeleteRevisions"
Click="flyoutDeleteRevisions_Click"
CommandParameter="{Binding}"
Text="Delete All Revisions" />
<MenuFlyoutSeparator />
<MenuFlyoutItem
x:Name="flyoutCopyCells"
Click="flyoutCopyCells_Click"
CommandParameter="{Binding}"
Text="Copy Cell(s)" />
<MenuFlyoutItem
x:Name="flyoutCopyRows"
Click="flyoutCopyRows_Click"
CommandParameter="{Binding}"
Text="Copy Row(s)" />
</MenuFlyout>
</dataGrid:SfDataGrid.RecordContextFlyout>
</dataGrid:SfDataGrid>
Hi Javier Escajeda,
Your requirement to “Open the context flyout along with the multi-row selection” will be achievable by restricting the selection with the right click overriding the ProcessPointerPressed by using the custom SelectionController as shown below,
|
this.dataGrid.DetailsViewLoading += OnDetailsViewLoading; { // Creating the custom selection controller for the details view datagrid. e.DetailsViewDataGrid.SelectionController = new GridSelectionControllerExt(e.DetailsViewDataGrid); } { public GridSelectionControllerExt(SfDataGrid dataGrid) : base(dataGrid) { }
protected override void ProcessPointerPressed(PointerRoutedEventArgs args, RowColumnIndex rowColumnIndex) { // Disabling the right click selection in details view datagrid. var properties = args.GetCurrentPoint(DataGrid).Properties; if (properties.IsRightButtonPressed) { args.Handled = true; } else base.ProcessPointerPressed(args, rowColumnIndex); } } |
Here, we have prepared the sample with the above suggestion, please have a look at this. For more information related to customizing selection for DetailsViewDataGrid, please refer to the below user guide documentation link,
UG Link: https://help.syncfusion.com/winui/datagrid/master-details-view?cs-save-lang=1&cs-lang=csharp#customizing-selection-for-detailsviewdatagrid
Regards,
Dhanasekar M.
If this post is helpful, please consider Accepting it as the solution so that other members can locate it more quickly.
Attachment: SfDataGridDemo_2abfbab3.zip
- 1 Reply
- 2 Participants
-
JE Javier Escajeda
- May 19, 2023 04:41 PM UTC
- May 22, 2023 12:40 PM UTC