RadPageView - Reorder page items and DragDrop between RadPageViews

1 Answer 13 Views
PageView
Matthew
Top achievements
Rank 1
Matthew asked on 26 Feb 2025, 02:23 PM | edited on 26 Feb 2025, 02:24 PM
We have a screen with two RadPageViews side by side. We need to allow page items to be reordered within each page view AND to allow page items to be dragged between the two page views.

We have implemented the dragging between the two page views using this approach: https://www.telerik.com/forums/dragdrop-between-radpageviews

However, when we set the ItemDragMode to facilitate the reordering it has no effect. https://docs.telerik.com/devtools/winforms/controls/pageview/drag-and-drop/radpageviewdragdropservice

Is it possible to get these two behaviours to work at the same time?

1 Answer, 1 is accepted

Sort by
0
Dinko | Tech Support Engineer
Telerik team
answered on 27 Feb 2025, 03:11 PM

Hello Matthew,

The custom drag drop behavior interferes with the internal RadDragDropService implementation responsible for reordering the page view items in the strip.

If it fits your setup, I can suggest performing the custom drag-drop operation between the different RadPageView controls by dragging the pages with the right mouse button. The left button will be used for reorder while the right will be used for drag-drop between the controls.

public Form1()
{
    InitializeComponent();
    this.radPageView1.MouseDown += radPageView_MouseDown;
    this.radPageView2.MouseDown += radPageView_MouseDown;

    this.radPageView1.AllowDrop = true;
    this.radPageView1.ViewElement.ItemDragMode = PageViewItemDragMode.Preview;
    this.radPageView2.AllowDrop = true;
    this.radPageView2.ViewElement.ItemDragMode = PageViewItemDragMode.Preview;

    this.radPageView1.DragEnter += radPageView_DragEnter;
    this.radPageView2.DragEnter += radPageView_DragEnter;

    this.radPageView1.DragDrop += radPageView_DragDrop;
    this.radPageView2.DragDrop += radPageView_DragDrop;
}
private void radPageView_DragDrop(object sender, DragEventArgs e)
{
    if (shouldStartOleDragDrop)
    {
        RadPageView target = (RadPageView)sender;
        RadPageViewPage draggedItem = (RadPageViewPage)e.Data.GetData(typeof(RadPageViewPage));
        RadPageView source = draggedItem.Owner;
        if (target != source)
        {
            target.Pages.Add(draggedItem);
        }
    }
}

private void radPageView_DragEnter(object sender, DragEventArgs e)
{
    if (shouldStartOleDragDrop)
    {
        e.Effect = DragDropEffects.Move;
    }
}

bool shouldStartOleDragDrop;
RadPageViewStripItem item;
private void radPageView_MouseDown(object sender, MouseEventArgs e)
{
    if (e.Button == System.Windows.Forms.MouseButtons.Right)
    {
        shouldStartOleDragDrop = true;
        RadPageViewStripItem hitItem = ((RadPageView)sender).ElementTree.GetElementAtPoint(e.Location) as RadPageViewStripItem;
        if (hitItem != null)
        {
            ((RadPageView)sender).DoDragDrop(hitItem.Page, DragDropEffects.Move);
        }
    }
}

I hope that this approach will work for you.

Regards,
Dinko | Tech Support Engineer
Progress Telerik

Enjoyed our products? Share your experience on G2 and receive a $25 Amazon gift card for a limited time!

Tags
PageView
Asked by
Matthew
Top achievements
Rank 1
Answers by
Dinko | Tech Support Engineer
Telerik team
Share this question
or