昨天摸索了下午,看了网上的很多实例代码,发现真心不能用,哪是什么拖拽,明明就是直接的删除嘛,基本的代码写的都一样,所以自己写啦,试着摸索
今天上午终于做出来了,这些天,杂事太多,导致我都没好好弄。嘿嘿,昨天网站抽奖中了个磁疗腰带准备送爸妈的,结果 鸭子飞了。
嘿嘿,说正事吧,我看了很多别人写的行的拖拽的方法,在我这里都试着不行,具体也不清楚是为什么,后来解决了msdn打不开的问题,就在msdn上找资料了,嘿嘿,找到了,并且修改过,现在已经确定能用了,嘿嘿,顿时happy起来了。
//本身窗行的口的拖动, 先做这个
private Rectangle dragBoxFromMouseDown;
private int rowIndexFromMouseDown;
private int rowIndexOfItemUnderMouseToDrop;
private void dgvAllReg_MouseMove(object sender, MouseEventArgs e)
{
if ((e.Button & MouseButtons.Left) == MouseButtons.Left)
{
//如果鼠标移动到矩形框外面,开始拖拽
if (dragBoxFromMouseDown != Rectangle.Empty && !dragBoxFromMouseDown.Contains(e.X, e.Y))
{
//执行tt拖拽,传入数据
DragDropEffects dropEffect = dgvAllReg.DoDragDrop(dgvAllReg.Rows[rowIndexFromMouseDown], DragDropEffects.Move);
}
}
}
private void dgvAllReg_MouseDown(object sender, MouseEventArgs e)
{
//获取鼠标按下时行的索引值
rowIndexFromMouseDown = dgvAllReg.HitTest(e.X, e.Y).RowIndex;
if (rowIndexFromMouseDown != -1)
{
//记录按下鼠标的点
//DragSize指示在开始拖动操作前鼠标可以移动的范围
Size dragSize = SystemInformation.DragSize;
//用DragSize创建一个以鼠标为中心的矩形
dragBoxFromMouseDown = new Rectangle(new Point(e.X - (dragSize.Width / 2), e.Y - (dragSize.Height / 2)), dragSize);
}
else
{
//如果鼠标不在datagridview上,重置矩形
dragBoxFromMouseDown = Rectangle.Empty;
}
}
private void dgvAllReg_DragOver(object sender, DragEventArgs e)
{
e.Effect = DragDropEffects.Move;
}
private void dgvAllReg_DragDrop(object sender, DragEventArgs e)
{
//由于鼠标的位置是与屏幕相关的,它必须转换为与客户端相匹配的点
Point clientPoint = dgvAllReg.PointToClient(new Point(e.X, e.Y));
//获取鼠标按下时的行的索引值
rowIndexOfItemUnderMouseToDrop = dgvAllReg.HitTest(clientPoint.X, clientPoint.Y).RowIndex;
//如果拖放的行为为从将某一行移动然后移除,插入到某一行
if (e.Effect == DragDropEffects.Move)
{
DataGridViewRow rowToMove = e.Data.GetData(typeof(DataGridViewRow)) as DataGridViewRow;
DataRow dr = ((rowToMove).DataBoundItem as DataRowView).Row;
DataRow drr = dtBand.NewRow();
drr.ItemArray = dr.ItemArray;
dtBand.Rows.RemoveAt(rowIndexFromMouseDown);
dtBand.Rows.InsertAt(drr, rowIndexOfItemUnderMouseToDrop - 1);
}
}
不过只能拖拽一行,不能多行选中,这个可以再研究,出来了再贴上来
这是msdn 这个资源的地址,大家也可以看看
http://social.msdn.microsoft.com/forums/zh-CN/bffbfe12-ecd3-4854-956c-f02a0ec696c3/windows-forms#FAQ22
但是像我这样做了之后,你会发现,当同时用左键和右键,用作不同DataGridView或者一个DataGridView行的拖拽时,就会互相影响,到时最后什么都做不了,这当然是我代码的问题,不能什么东西都扔到一起混在一起。