DevExpress XtraGridControl 拖拽调整行顺序

来源:互联网 发布:微信炸金花源码 编辑:程序博客网 时间:2024/05/29 13:23
using System;using System.Data;using System.Drawing;using System.Windows.Forms;using DevExpress.XtraGrid;using DevExpress.XtraGrid.Views.Grid;using DevExpress.XtraGrid.Views.Grid.ViewInfo;namespace SwapRows{    /// <summary>    /// Summary description for Form1.    /// </summary>    public class Form1 : System.Windows.Forms.Form    {        private DevExpress.XtraGrid.GridControl gridControl1;        private DevExpress.XtraGrid.Views.Grid.GridView gridView1;        private System.Data.DataSet dataSet1;        private System.Data.DataTable dataTable1;        private System.Data.DataColumn dataColumn1;        private System.Data.DataColumn dataColumn2;        private System.Data.DataColumn dataColumn3;        private System.Windows.Forms.Button button1;        private System.Windows.Forms.Button button2;        /// <summary>        /// Required designer variable.        /// </summary>        private System.ComponentModel.Container components = null;        public Form1()        {            //            // Required for Windows Form Designer support            //            InitializeComponent();            //            // TODO: Add any constructor code after InitializeComponent call            //        }        /// <summary>        /// Clean up any resources being used.        /// </summary>        protected override void Dispose(bool disposing)        {            if ( disposing )            {                if ( components != null )                {                    components.Dispose();                }            }            base.Dispose(disposing);        }        #region Windows Form Designer generated code        /// <summary>        /// Required method for Designer support - do not modify        /// the contents of this method with the code editor.        /// </summary>        private void InitializeComponent()        {            this.gridControl1 = new DevExpress.XtraGrid.GridControl();            this.gridView1 = new DevExpress.XtraGrid.Views.Grid.GridView();            this.dataSet1 = new System.Data.DataSet();            this.dataTable1 = new System.Data.DataTable();            this.dataColumn1 = new System.Data.DataColumn();            this.dataColumn2 = new System.Data.DataColumn();            this.dataColumn3 = new System.Data.DataColumn();            this.button1 = new System.Windows.Forms.Button();            this.button2 = new System.Windows.Forms.Button();            ((System.ComponentModel.ISupportInitialize)(this.gridControl1)).BeginInit();            ((System.ComponentModel.ISupportInitialize)(this.gridView1)).BeginInit();            ((System.ComponentModel.ISupportInitialize)(this.dataSet1)).BeginInit();            ((System.ComponentModel.ISupportInitialize)(this.dataTable1)).BeginInit();            this.SuspendLayout();            //             // gridControl1            //             this.gridControl1.AllowDrop = true;            this.gridControl1.Dock = System.Windows.Forms.DockStyle.Left;            this.gridControl1.Location = new System.Drawing.Point(0, 0);            this.gridControl1.MainView = this.gridView1;            this.gridControl1.Name = "gridControl1";            this.gridControl1.Size = new System.Drawing.Size(419, 310);            this.gridControl1.TabIndex = 0;            this.gridControl1.ViewCollection.AddRange(new DevExpress.XtraGrid.Views.Base.BaseView[] {            this.gridView1});            this.gridControl1.DragOver += new System.Windows.Forms.DragEventHandler(this.gridControl1_DragOver);            this.gridControl1.DragDrop += new System.Windows.Forms.DragEventHandler(this.gridControl1_DragDrop);            //             // gridView1            //             this.gridView1.GridControl = this.gridControl1;            this.gridView1.Name = "gridView1";            this.gridView1.OptionsBehavior.Editable = false;            this.gridView1.OptionsView.NewItemRowPosition = DevExpress.XtraGrid.Views.Grid.NewItemRowPosition.Bottom;            this.gridView1.MouseMove += new System.Windows.Forms.MouseEventHandler(this.gridView1_MouseMove);            this.gridView1.MouseDown += new System.Windows.Forms.MouseEventHandler(this.gridView1_MouseDown);            //             // dataSet1            //             this.dataSet1.DataSetName = "NewDataSet";            this.dataSet1.Locale = new System.Globalization.CultureInfo("en-US");            this.dataSet1.Tables.AddRange(new System.Data.DataTable[] {            this.dataTable1});            //             // dataTable1            //             this.dataTable1.Columns.AddRange(new System.Data.DataColumn[] {            this.dataColumn1,            this.dataColumn2,            this.dataColumn3});            this.dataTable1.TableName = "Table1";            //             // dataColumn1            //             this.dataColumn1.ColumnName = "ID";            this.dataColumn1.DataType = typeof(int);            //             // dataColumn2            //             this.dataColumn2.ColumnName = "Keyword";            //             // dataColumn3            //             this.dataColumn3.ColumnName = "Order";            this.dataColumn3.DataType = typeof(decimal);            //             // button1            //             this.button1.Location = new System.Drawing.Point(425, 12);            this.button1.Name = "button1";            this.button1.Size = new System.Drawing.Size(62, 20);            this.button1.TabIndex = 1;            this.button1.Text = "&Up";            this.button1.Click += new System.EventHandler(this.button1_Click);            //             // button2            //             this.button2.Location = new System.Drawing.Point(425, 46);            this.button2.Name = "button2";            this.button2.Size = new System.Drawing.Size(62, 20);            this.button2.TabIndex = 2;            this.button2.Text = "&Down";            this.button2.Click += new System.EventHandler(this.button2_Click);            //             // Form1            //             this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);            this.ClientSize = new System.Drawing.Size(499, 310);            this.Controls.Add(this.button2);            this.Controls.Add(this.button1);            this.Controls.Add(this.gridControl1);            this.Name = "Form1";            this.Text = "Form1";            this.Load += new System.EventHandler(this.Form1_Load);            ((System.ComponentModel.ISupportInitialize)(this.gridControl1)).EndInit();            ((System.ComponentModel.ISupportInitialize)(this.gridView1)).EndInit();            ((System.ComponentModel.ISupportInitialize)(this.dataSet1)).EndInit();            ((System.ComponentModel.ISupportInitialize)(this.dataTable1)).EndInit();            this.ResumeLayout(false);        }        #endregion        /// <summary>        /// The main entry point for the application.        /// </summary>        [STAThread]        static void Main()        {            Application.Run(new Form1());        }        void FillDataSet()        {            dataTable1.Rows.Add(new object[] { 1, "abstract", 1 });            dataTable1.Rows.Add(new object[] { 2, "event", 2 });            dataTable1.Rows.Add(new object[] { 3, "new", 3 });            dataTable1.Rows.Add(new object[] { 4, "struct", 4 });            dataTable1.Rows.Add(new object[] { 5, "as", 5 });            dataTable1.Rows.Add(new object[] { 6, "explicit", 6 });            dataTable1.Rows.Add(new object[] { 7, "null", 7 });            dataTable1.Rows.Add(new object[] { 8, "switch", 8 });            dataTable1.Rows.Add(new object[] { 9, "base", 9 });            dataTable1.Rows.Add(new object[] { 10, "extern", 10 });            dataTable1.Rows.Add(new object[] { 11, "object", 11 });            dataTable1.Rows.Add(new object[] { 12, "this", 12 });            dataTable1.Rows.Add(new object[] { 13, "bool", 13 });            dataTable1.Rows.Add(new object[] { 14, "false", 14 });            dataTable1.Rows.Add(new object[] { 15, "operator", 15 });            dataTable1.Rows.Add(new object[] { 16, "throw", 16 });            dataTable1.Rows.Add(new object[] { 17, "break", 17 });            dataTable1.AcceptChanges();        }        private void Form1_Load(object sender, System.EventArgs e)        {            FillDataSet();            gridControl1.DataSource = dataTable1;            gridView1.PopulateColumns();            gridView1.Columns[OrderFieldName].SortOrder = DevExpress.Data.ColumnSortOrder.Ascending;            gridView1.OptionsCustomization.AllowSort = false;            gridView1.OptionsView.ShowGroupPanel = false;        }        const string OrderFieldName = "Order";        private void button1_Click(object sender, System.EventArgs e)        {            GridView view = gridView1;            view.GridControl.Focus();            int index = view.FocusedRowHandle;            if ( index <= 0 )                return;            DataRow row1 = view.GetDataRow(index);            DataRow row2 = view.GetDataRow(index - 1);            object val1 = row1[OrderFieldName];            object val2 = row2[OrderFieldName];            row1[OrderFieldName] = val2;            row2[OrderFieldName] = val1;            view.FocusedRowHandle = index - 1;        }        private void button2_Click(object sender, System.EventArgs e)        {            GridView view = gridView1;            view.GridControl.Focus();            int index = view.FocusedRowHandle;            if ( index >= view.DataRowCount - 1 )                return;            DataRow row1 = view.GetDataRow(index);            DataRow row2 = view.GetDataRow(index + 1);            object val1 = row1[OrderFieldName];            object val2 = row2[OrderFieldName];            row1[OrderFieldName] = val2;            row2[OrderFieldName] = val1;            view.FocusedRowHandle = index + 1;        }        GridHitInfo downHitInfo = null;        private void gridView1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)        {            GridView view = sender as GridView;            downHitInfo = null;            GridHitInfo hitInfo = view.CalcHitInfo(new Point(e.X, e.Y));            if ( Control.ModifierKeys != Keys.None )                return;            if ( e.Button == MouseButtons.Left && hitInfo.InRow && hitInfo.RowHandle != GridControl.NewItemRowHandle )                downHitInfo = hitInfo;        }        private void gridView1_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)        {            GridView view = sender as GridView;            if ( e.Button == MouseButtons.Left && downHitInfo != null )            {                Size dragSize = SystemInformation.DragSize;                Rectangle dragRect = new Rectangle(new Point(downHitInfo.HitPoint.X - dragSize.Width / 2,                    downHitInfo.HitPoint.Y - dragSize.Height / 2), dragSize);                if ( !dragRect.Contains(new Point(e.X, e.Y)) )                {                    view.GridControl.DoDragDrop(downHitInfo, DragDropEffects.All);                    downHitInfo = null;                }            }        }        private void gridControl1_DragOver(object sender, DragEventArgs e)        {            if ( e.Data.GetDataPresent(typeof(GridHitInfo)) )            {                GridHitInfo downHitInfo = e.Data.GetData(typeof(GridHitInfo)) as GridHitInfo;                if ( downHitInfo == null )                    return;                GridControl grid = sender as GridControl;                GridView view = grid.MainView as GridView;                GridHitInfo hitInfo = view.CalcHitInfo(grid.PointToClient(new Point(e.X, e.Y)));                if ( hitInfo.InRow && hitInfo.RowHandle != downHitInfo.RowHandle && hitInfo.RowHandle != GridControl.NewItemRowHandle )                    e.Effect = DragDropEffects.Move;                else                    e.Effect = DragDropEffects.None;            }        }        private void gridControl1_DragDrop(object sender, System.Windows.Forms.DragEventArgs e)        {            GridControl grid = sender as GridControl;            GridView view = grid.MainView as GridView;            GridHitInfo srcHitInfo = e.Data.GetData(typeof(GridHitInfo)) as GridHitInfo;            GridHitInfo hitInfo = view.CalcHitInfo(grid.PointToClient(new Point(e.X, e.Y)));            int sourceRow = srcHitInfo.RowHandle;            int targetRow = hitInfo.RowHandle;            MoveRow(sourceRow, targetRow);        }        private void MoveRow(int sourceRow, int targetRow)        {            if ( sourceRow == targetRow || sourceRow == targetRow + 1 )                return;            GridView view = gridView1;            DataRow row1 = view.GetDataRow(targetRow);            DataRow row2 = view.GetDataRow(targetRow + 1);            DataRow dragRow = view.GetDataRow(sourceRow);            decimal val1 = (decimal)row1[OrderFieldName];            if ( row2 == null )                dragRow[OrderFieldName] = val1 + 1;            else            {                decimal val2 = (decimal)row2[OrderFieldName];                dragRow[OrderFieldName] = (val1 + val2) / 2;            }        }    }}

0 0
原创粉丝点击