private DataGridViewSelectedRowCollection SelRows;
private void dgvAllReg_MouseMove(object sender, MouseEventArgs e)
{
if ((e.Button & MouseButtons.Right) == MouseButtons.Right)
{
DragDropEffects dropEffect = dgvAllReg.DoDragDrop(this.TabText, DragDropEffects.Move);//|DragDropEffects .Copy SelRows this.TabText
}
}
private int rowIndexOfItemUnderMouseToDrop;
private void dgvAllReg_DragDrop(object sender, DragEventArgs e)
{
System.Diagnostics.Debug.WriteLine(this.TabText + " DragDrop");
SetForm setFrm = (SetForm)Program.m_MainForm.GetContentFromPersistString(e.Data.GetData(DataFormats.Text).ToString());//e.Data.GetData(DataFormats.Text).ToString()//列表视图
if (this.TabText.Equals(e.Data.GetData(DataFormats.Text).ToString()))//this.dtBand.Equals(Program.m_MainForm.AllRegDataSet.Tables["SetReg"])
{
//由于鼠标的位置是与屏幕相关的,它必须转换为与客户端相匹配的点
Point clientPoint = dgvAllReg.PointToClient(new Point(e.X, e.Y));
//获取鼠标按下时的行的索引值
rowIndexOfItemUnderMouseToDrop = dgvAllReg.HitTest(clientPoint.X, clientPoint.Y).RowIndex;
DataRow dgvRow;
for (int i = 0; i < SelRows .Count; i++)
{
dgvRow = ((SelRows[i]).DataBoundItem as DataRowView).Row;
DataRow drr = this.dtBand.NewRow();
drr.ItemArray = dgvRow.ItemArray;
dtBand.Rows.Remove(dgvRow);
dtBand.Rows.InsertAt(drr, (rowIndexOfItemUnderMouseToDrop) );
}
this.dgvAllReg.ClearSelection();
}
else
{
DataTable dt = (DataTable)this.dgvAllReg.DataSource;
int nAdd = 0;
this.dgvAllReg.ClearSelection();
foreach (DataGridViewRow dgr in setFrm.dgvAllReg.SelectedRows)
{
if (dgr.DataBoundItem != null)
{
Boolean bHave = false;
foreach (DataGridViewRow tdgr in this.dgvAllReg.Rows)
{
if (tdgr != null)
{
if (((DataRowView)tdgr.DataBoundItem).Row["地址"].Equals(((DataRowView)dgr.DataBoundItem).Row["地址"]))
{
tdgr.Selected = true;
bHave = true;
break;
}
}
}
if (bHave == false)
{
DataRow dr = dt.NewRow();
dr.ItemArray = ((DataRowView)dgr.DataBoundItem).Row.ItemArray;
dt.Rows.Add(dr);
nAdd++;
}
}
}
for (int i = 0; i < nAdd; i++)
{
this.dgvAllReg.Rows[this.dgvAllReg.Rows.Count - 1 - i].Selected = true;
}
setFrm.dgvAllReg.ClearSelection();
}
}
private void dgvAllReg_DragEnter(object sender, DragEventArgs e)
{
e.Effect = DragDropEffects.Move;
}
private void dgvAllReg_MouseUp(object sender, MouseEventArgs e)
{
SelRows = dgvAllReg.SelectedRows;
}
private void dgvAllReg_DragOver(object sender, DragEventArgs e)
{
e.Effect = DragDropEffects.Move;
}
private int dragRowFromMouseDown;
private void dgvAllReg_MouseDown(object sender, MouseEventArgs e)
{
if (dgvAllReg.HitTest(e.X, e.Y).ColumnIndex == -1 && dgvAllReg.HitTest(e.X, e.Y).RowIndex != -1)
{
dgvAllReg.Columns["单位"].SortMode = DataGridViewColumnSortMode.Automatic ;//Automatic;
dragRowFromMouseDown = dgvAllReg.HitTest(e.X, e.Y).RowIndex;
}
if (dgvAllReg.HitTest(e.X, e.Y).RowIndex == -1 && dgvAllReg.HitTest(e.X, e.Y).ColumnIndex != -1)
{
dgvAllReg.Columns[dgvAllReg.HitTest(e.X, e.Y).ColumnIndex].SortMode = DataGridViewColumnSortMode.Automatic;
}
}
可以实现多行移动和复制,用心试的童靴会发现里面有个问题,不知道你们发现了没???