DataGridView拖動的前提:
this.dgv.AllowDrop = true; this.dgv.MultiSelect = false; this.dgv.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect;
拖動需要幾個事件支持:
DragDrop:拖動事件
DragEnter:控制拖動范圍,影響鼠標狀態
CellMouseMove:鼠標移動觸發拖動事件,個人覺著可以用其他事件替
private void dgv_CellMouseMove(object sender, DataGridViewCellMouseEventArgs e)
{
if ((e.Clicks < 2) && (e.Button == MouseButtons.Left))
{
if (e.RowIndex > -1) //此處可以添加其他限制條件,例如只有在那一列時才允許拖動等
dgv.DoDragDrop(dgv.Rows[e.RowIndex], DragDropEffects.Move);
}
}
private void dgv_DragDrop(object sender, DragEventArgs e)
{
int idx = GetRowFromPoint(e.X, e.Y);
if (idx < 0 || idx == dgv.Rows.Count-1/*這個判斷是在允許用戶添加行時,排除拖動到最后的空白行處的*/) return;
if (e.Data.GetDataPresent(typeof(DataGridViewRow)))
{
DataGridViewRow row = (DataGridViewRow)e.Data.GetData(typeof(DataGridViewRow));
dgv.Rows.Remove(row);
dgvr.Rows.Insert(idx, row);
dgv.CurrentCell = dgvBreakLayer[0, idx];
}
}
private int GetRowFromPoint(int x, int y)
{
for (int i = 0; i < dgv.RowCount; i++)
{
Rectangle rec = dgv.GetRowDisplayRectangle(i, false);
if (dgv.RectangleToScreen(rec).Contains(x, y))
{
return i;
}
}
return -1;
}
private void dgv_DragEnter(object sender, DragEventArgs e)
{
e.Effect = DragDropEffects.Move;
}后期要是發現更好的方法會持續改進,歡迎大家提出寶貴意見!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。