تغییر ترتیب سطرهای 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 ماوس به بالا و پایین حرکت دهید.