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>


1 Reply

DM Dhanasekar Mohanraj Syncfusion Team May 22, 2023 12:40 PM UTC


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;

private void OnDetailsViewLoading(object sender, DetailsViewLoadingAndUnloadingEventArgs e)

{

    // Creating the custom selection controller for the details view datagrid.

    e.DetailsViewDataGrid.SelectionController = new GridSelectionControllerExt(e.DetailsViewDataGrid);

}

public class GridSelectionControllerExt : GridSelectionController

{

    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

Loader.
Up arrow icon