Перетащите строку в DataGridView
У меня есть форма окна с DataGridView, и мне нужно включить перетаскивание строк в этом DataGridView.
Заполняется из базы данных. Мой код не работает должным образом, потому что после первого перетаскивания я не могу опустить строку в нужную позицию.
ЭтоLoad
формы гдеDataGridView
заполняется из базы данных
DataTable bsPeople;
Rectangle dragBoxFromMouseDown;
int rowIndexFromMouseDown;
int rowIndexOfItemUnderMouseToDrop;
private void Form1_Load(object sender, EventArgs e)
{
DataGridView1.AllowDrop = true;
bsPeople= objPeople.ReturnPeople(); // fill data from SQL Server
DataGridView1.DataSource = bsPeople;
}
Это события Drag and Drop
private void dataGridView1_MouseMove(object sender, MouseEventArgs e)
{
if (((e.Button ==MouseButtons.Left)))
{
if (((dragBoxFromMouseDown != Rectangle.Empty)
&& !dragBoxFromMouseDown.Contains(e.X, e.Y)))
{
DragDropEffects dropEffect = DataGridView1.DoDragDrop(DataGridView1.Rows[rowIndexFromMouseDown], DragDropEffects.Move);
}
}
}
private void dataGridView1_MouseDown(object sender, MouseEventArgs e)
{
rowIndexFromMouseDown = DataGridView1.HitTest(e.X, e.Y).RowIndex;
if ((rowIndexFromMouseDown != -1))
{
Size dragSize = SystemInformation.DragSize;
dragBoxFromMouseDown = new Rectangle(new Point(e.X - (dragSize.Width / 2), e.Y - (dragSize.Height / 2)), dragSize);
}
else
{
dragBoxFromMouseDown = Rectangle.Empty;
}
}
private void dataGridView1_DragOver(object sender, DragEventArgs e)
{
e.Effect = DragDropEffects.Move;
}
private void dataGridView1_DragDrop(object sender, DragEventArgs e)
{
Point clientPoint = DataGridView1.PointToClient(new Point(e.X, e.Y));
rowIndexOfItemUnderMouseToDrop = DataGridView1.HitTest(clientPoint.X, clientPoint.Y).RowIndex;
if ((e.Effect == DragDropEffects.Move))
{
DataGridViewRow rowToMove = (DataGridViewRow)e.Data.GetData(typeof(DataGridViewRow));
object[] celldata=new object[DataGridView1.ColumnCount];
for (int col = 0; (col
<= (rowToMove.Cells.Count - 1)); col++)
{
celldata[col] = rowToMove.Cells[col].Value;
}
DataRow row = bsPeople.NewRow();
row.ItemArray = celldata;
bsPeople.Rows.InsertAt(row, rowIndexOfItemUnderMouseToDrop);
rowToMove.DataGridView.Rows.Remove(rowToMove);
}
}
}