첨부 실행 코드는 나눔고딕코딩 폰트를 사용합니다.
본 블로그는 광고를 포함하고 있습니다.
광고 클릭에서 발생하는 수익금은 모두 블로그 콘텐츠 향상을 위해 쓰여집니다.

728x90
반응형
728x170

TestProject.zip
다운로드

▶ MainForm.cs

using System;
using System.Collections.Generic;
using System.Data.OleDb;
using System.Drawing;
using System.Windows.Forms;

using DevExpress.XtraEditors;
using DevExpress.XtraVerticalGrid;

namespace TestProject
{
    /// <summary>
    /// 메인 폼
    /// </summary>
    public partial class MainForm : XtraForm
    {
        //////////////////////////////////////////////////////////////////////////////////////////////////// Field
        ////////////////////////////////////////////////////////////////////////////////////////// Private

        #region Field

        /// <summary>
        /// 연결
        /// </summary>
        private OleDbConnection connection;

        /// <summary>
        /// 시작 드래그 포인트
        /// </summary>
        private Point startDragPoint;

        /// <summary>
        /// 드래그 여부
        /// </summary>
        private bool dragging = false;

        #endregion

        //////////////////////////////////////////////////////////////////////////////////////////////////// Constructor
        ////////////////////////////////////////////////////////////////////////////////////////// Public

        #region 생성자 - MainForm()

        /// <summary>
        /// 생성자
        /// </summary>
        public MainForm()
        {
            InitializeComponent();

            this.connection = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=nwind.mdb");

            this.gridControl.OptionsBehavior.Editable = false;

            this.gridControl.DataSource = Order.GetOrderList(this.connection);

            this.gridControl.BestFit();

            this.gridControl.MouseDown += gridControl_MouseDown;
            this.gridControl.MouseMove += gridControl_MouseMove;
            this.gridControl.MouseUp   += gridControl_MouseUp;
        }

        #endregion

        //////////////////////////////////////////////////////////////////////////////////////////////////// Method
        ////////////////////////////////////////////////////////////////////////////////////////// Private

        #region 그리드 컨트롤 마우스 DOWN 처리하기 - gridControl_MouseDown(sender, e)

        /// <summary>
        /// 그리드 컨트롤 마우스 DOWN 처리하기
        /// </summary>
        /// <param name="sender">이벤트 발생자</param>
        /// <param name="e">이벤트 인자</param>
        private void gridControl_MouseDown(object sender, MouseEventArgs e)
        {
            VGridControl gridControl = sender as VGridControl;

            this.startDragPoint = new Point(e.X, e.Y);

            this.dragging = true;

            this.gridControl.OptionsBehavior.Editable = false;
        }

        #endregion
        #region 그리드 컨트롤 마우스 이동시 처리하기 - gridControl_MouseMove(sender, e)

        /// <summary>
        /// 그리드 컨트롤 마우스 이동시 처리하기
        /// </summary>
        /// <param name="sender">이벤트 발생자</param>
        /// <param name="e">이벤트 인자</param>
        private void gridControl_MouseMove(object sender, MouseEventArgs e)
        {
            VGridControl gridControl = sender as VGridControl;

            if(!this.dragging)
            {
                return;
            }

            int deltaX = e.X - startDragPoint.X;
            int deltaY = e.Y - startDragPoint.Y;

            if((Math.Abs(deltaX) < 10) && (Math.Abs(deltaY) < 10))
            {
                return;
            }

            VGridHitInfo hitInfo = gridControl.CalcHitInfo(startDragPoint);

            int recordIndex = hitInfo.RecordIndex;

            if(recordIndex == -1)
            {
                return;
            }

            GetRecordValuesOperation operation = new GetRecordValuesOperation(gridControl, hitInfo.RecordIndex);

            gridControl.RowsIterator.DoOperation(operation);

            string dragData = operation.CellValueList;

            DragDropEffects effect = gridControl.DoDragDrop(dragData, DragDropEffects.Copy | DragDropEffects.Move);

            if(effect == DragDropEffects.Move)
            {
                List<Order> orderList = gridControl.DataSource as List<Order>;
                
                orderList.RemoveAt(recordIndex);
            }
        }

        #endregion
        #region 그리드 컨트롤 마우스 UP 처리하기 - gridControl_MouseUp(sender, e)

        /// <summary>
        /// 그리드 컨트롤 마우스 UP 처리하기
        /// </summary>
        /// <param name="sender">이벤트 발생자</param>
        /// <param name="e">이벤트 인자</param>
        private void gridControl_MouseUp(object sender, MouseEventArgs e)
        {
            VGridControl gridControl = sender as VGridControl;

            this.dragging = false;

            this.gridControl.OptionsBehavior.Editable = true;
        }

        #endregion
    }
}
728x90
반응형
그리드형

'DevExpress > WinForm' 카테고리의 다른 글

[DEVEXPRESS/WINFORM] VGridControl 클래스 : CustomDrawRowHeaderCell/CustomDrawRowHeaderIndent 이벤트를 사용해 행 헤더 스타일 설정하기  (0) 2020.05.01
[DEVEXPRESS/WINFORM] VGridControl 클래스 : RecordCellStyle 이벤트를 사용해 레코드 셀 스타일 설정하기  (0) 2020.05.01
[DEVEXPRESS/WINFORM] XAppearances 클래스 : LoadScheme 메소드를 사용해 사전 정의된 스타일 체계 설정하기  (0) 2020.05.01
[DEVEXPRESS/WINFORM] VGridControl 클래스 : StartDragRow/ProcessDragRow/EndDragRow 이벤트를 사용해 행 드래그 커스텀 처리하기  (0) 2020.05.01
[DEVEXPRESS/WINFORM] VGridControl 클래스 : DragDrop 이벤트를 사용해 행에 스타일 드래그하기  (0) 2020.05.01
[DEVEXPRESS/WINFORM] VGridControl 클래스 : DoDragDrop 메소드를 사용해 레코드 드래그하기  (0) 2020.05.01
[DEVEXPRESS/WINFORM] VGridControl 클래스 : GetRowPropertiesByFieldName 메소드를 사용해 행 속성 구하기  (0) 2020.05.01
[DEVEXPRESS/WINFORM] VGridControl 클래스 : ActiveFilter 속성을 사용해 필터 정보 구하기  (0) 2020.04.30
[DEVEXPRESS/WINFORM] VGridControl 클래스 : ActiveFilterCriteria 속성을 사용해 활성 필터 기준 설정하기  (0) 2020.04.30
[DEVEXPRESS/WINFORM] VGridControl 클래스 : ActiveFilterString 속성을 사용해 활성 필터 문자열 설정하기  (0) 2020.04.30
[DEVEXPRESS/WINFORM] VGridOptionsFilter 클래스 : PopupExcelFilterGrouping 속성을 사용해 필터 메뉴에서 필터 값 그룹화 데이터 필드 설정하기  (0) 2020.04.30
Posted by 사용자 icodebroker

댓글을 달아 주세요