Winform Drag Drop根据目的地复制或移动

时间:2014-11-28 17:11:39

标签: winforms datagridview drag-and-drop copy move

我想在3个Datagridview dgv1,dgv2和dgv3之间实现拖放。

当在dgv1和dgv2之间执行DragDrop时,它将是一个移动动作。源dgv中的元素将被删除并添加到目标dgv。

从dgv1或dgv2拖动到dgv3时,它只是一个副本。当dgv3是源时,反向,元素将不会添加到dgv1或dgv2。它们已经存在于dgv1或dgv2中。

目前删除源元素是在源的MouseDown事件中。我怎么能根据目的地dgv操纵动作?

    private void _columnGrid_MouseDown(object sender, MouseEventArgs e)
    {
        if (e.Clicks == 1)
        {
            int rowIndex = _columnGrid.HitTest(e.X, e.Y).RowIndex;
            if (rowIndex < 0)
                return;

            DragDropEffects dde1 = DoDragDrop(_columnGrid.Rows[rowIndex].DataBoundItem as ItemFormula, DragDropEffects.All);

            if (dde1 == DragDropEffects.All)
            {
                _columnGrid.Rows.RemoveAt(rowIndex);
            } 
        }
    }

对于问题的第一部分,当dgv3是目的地时,我可以通过将DragDropEffect设置为dgv3中的Copy来实现。

    private void _lineGrid_DragOver(object sender, DragEventArgs e)
    {
        //copy only
        e.Effect = DragDropEffects.Copy;
    }

当我想从dgv3拖放回dgv1或dgv2时,第二部分怎么样?

提前致谢。

0 个答案:

没有答案