拖放datagridview整行 [英] drag and drop datagridview entire row

查看:61
本文介绍了拖放datagridview整行的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用了这段代码但没有在datagridview中拖放行





 private Rectangle dragBoxFromMouseDown ; 
private int rowIndexFromMouseDown;
private int rowIndexOfItemUnderMouseToDrop;

private void dgvPARs_MouseMove(object sender,MouseEventArgs e)
{


if((e.Button& MouseButtons.Left)== MouseButtons .Left)
{
//如果鼠标移动到矩形外,请开始拖动。
if(dragBoxFromMouseDown!= Rectangle.Empty&&
!dragBoxFromMouseDown.Contains(eX,eY))
{

//继续拖动drop,传入列表项。
DragDropEffects dropEffect = dgvPARs.DoDragDrop(
dgvPARs.Rows [rowIndexFromMouseDown],
DragDropEffects.Move);
}
}

}

private void dgvPARs_MouseDown(object sender,MouseEventArgs e)
{


rowIndexFromMouseDown = dgvPARs.HitTest(eX,eY).RowIndex;
if(rowIndexFromMouseDown!= -1)
{
//记住鼠标按下的位置。
// DragSize指示在应该启动拖动事件之前鼠标可以移动的大小
//。
大小dragSize = SystemInformation.DragSize;

//使用DragSize创建一个矩形,鼠标位置为
//位于矩形的中心。
dragBoxFromMouseDown = new Rectangle(new Point(e.X - (dragSize.Width / 2),
e.Y - (dragSize.Height / 2)),
dragSize);
}
else
//如果鼠标不在ListBox中的项目上,则重置矩形。
dragBoxFromMouseDown = Rectangle.Empty;

}

private void dgvPARs_DragOver(object sender,DragEventArgs e)
{


e.Effect = DragDropEffects。移动;

}

private void dgvPARs_DragDrop(object sender,DragEventArgs e)
{


Point clientPoint = dgvPARs.PointToClient (新点(eX,eY));

//获取鼠标位于下方的项目的行索引。
rowIndexOfItemUnderMouseToDrop =
dgvPARs.HitTest(clientPoint.X,clientPoint.Y).RowIndex;

//如果拖动操作是移动,则删除并插入行。
if(e.Effect == DragDropEffects.Move)
{
DataGridViewRow rowToMove = e.Data.GetData(
typeof(DataGridViewRow))as DataGridViewRow;
dgvPARs.Rows.RemoveAt(rowIndexFromMouseDown);
dgvPARs.Rows.Insert(rowIndexOfItemUnderMouseToDrop,rowToMove);

}

}







< b> [Agent_Spock]已添加代码块

解决方案

查看此文章

http://dotprogramming.blogspot.com/2013/12/moving-datagridview-records-csharp-winforms.html [ ^ ]

I used this code but not getting to drag and drop rows in datagridview


private Rectangle dragBoxFromMouseDown;
        private int rowIndexFromMouseDown;
        private int rowIndexOfItemUnderMouseToDrop;

private void dgvPARs_MouseMove(object sender, MouseEventArgs e)
        {


            if ((e.Button & MouseButtons.Left) == MouseButtons.Left)
            {
                // If the mouse moves outside the rectangle, start the drag.
                if (dragBoxFromMouseDown != Rectangle.Empty &&
                    !dragBoxFromMouseDown.Contains(e.X, e.Y))
                {

                    // Proceed with the drag and drop, passing in the list item.                    
                    DragDropEffects dropEffect = dgvPARs.DoDragDrop(
                    dgvPARs.Rows[rowIndexFromMouseDown],
                    DragDropEffects.Move);
                }
            }

        }

        private void dgvPARs_MouseDown(object sender, MouseEventArgs e)
        {


            rowIndexFromMouseDown = dgvPARs.HitTest(e.X, e.Y).RowIndex;
            if (rowIndexFromMouseDown != -1)
            {
                // Remember the point where the mouse down occurred. 
                // The DragSize indicates the size that the mouse can move 
                // before a drag event should be started.                
                Size dragSize = SystemInformation.DragSize;

                // Create a rectangle using the DragSize, with the mouse position being
                // at the center of the rectangle.
                dragBoxFromMouseDown = new Rectangle(new Point(e.X - (dragSize.Width / 2),
                                                               e.Y - (dragSize.Height / 2)),
                                    dragSize);
            }
            else
                // Reset the rectangle if the mouse is not over an item in the ListBox.
                dragBoxFromMouseDown = Rectangle.Empty;

        }

        private void dgvPARs_DragOver(object sender, DragEventArgs e)
        {


            e.Effect = DragDropEffects.Move;

        }

        private void dgvPARs_DragDrop(object sender, DragEventArgs e)
        {


            Point clientPoint = dgvPARs.PointToClient(new Point(e.X, e.Y));

            // Get the row index of the item the mouse is below. 
            rowIndexOfItemUnderMouseToDrop =
                dgvPARs.HitTest(clientPoint.X, clientPoint.Y).RowIndex;

            // If the drag operation was a move then remove and insert the row.
            if (e.Effect == DragDropEffects.Move)
            {
                DataGridViewRow rowToMove = e.Data.GetData(
                    typeof(DataGridViewRow)) as DataGridViewRow;
                dgvPARs.Rows.RemoveAt(rowIndexFromMouseDown);
                dgvPARs.Rows.Insert(rowIndexOfItemUnderMouseToDrop, rowToMove);

            }

        }




[Agent_Spock] Added Code block

解决方案

See this article
http://dotprogramming.blogspot.com/2013/12/moving-datagridview-records-csharp-winforms.html[^]


这篇关于拖放datagridview整行的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆