تغییر ترتیب سطرهای DataGridView با استفاده از Drag&Drop

یک برنامه ویندوزی ایجاد کرده و یک کنترل دیتاگرید بر روی آن قرار دهید.خاصیت AllowDrop دیتاگرید را به True تغییر دهید و با دوبار کلیک بر روی رویدادهای DragDrop ،DragOver ،MouseDown و MouseMove از دیتاگرید و همچنین رویداد Load فرم، کدهای زیر را در داخل رویدادهای مربوطه بنویسید :

using System;
using System.Drawing;
using System.Windows.Forms;

namespace DragRow
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

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

        private void Form1_Load(object sender, EventArgs e)
        {
            this.dataGridView1.ColumnCount = 2;
            this.dataGridView1.Rows.Add(new object[] { "younes", "ebrahimi" });
            this.dataGridView1.Rows.Add(new object[] { "yahya", "ghobadi" });
            this.dataGridView1.Rows.Add(new object[] { "ali", "bamdadi" });
        }

        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 = e.Data.GetData(typeof(DataGridViewRow)) as DataGridViewRow;
                dataGridView1.Rows.RemoveAt(rowIndexFromMouseDown);
                dataGridView1.Rows.Insert(rowIndexOfItemUnderMouseToDrop, rowToMove);
            }
        }

        private void dataGridView1_DragOver(object sender, DragEventArgs e)
        {
            e.Effect = 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_MouseMove(object sender, MouseEventArgs e)
        {
            if ((e.Button & MouseButtons.Left) == MouseButtons.Left)
            {
                if (dragBoxFromMouseDown != Rectangle.Empty &&
                !dragBoxFromMouseDown.Contains(e.X, e.Y))
                {                 
                    DragDropEffects dropEffect = dataGridView1.DoDragDrop(
                          dataGridView1.Rows[rowIndexFromMouseDown],
                          DragDropEffects.Move);
                }
            }
        }
    }
}

حال برنامه را اجرا کرده و یک سطر را انتخاب کنید و ان را با Drag ماوس به بالا و پایین حرکت دهید.