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

728x90
반응형
728x170

TestProject.zip
다운로드

▶ MainForm.cs

using System.Data.OleDb;
using System.Drawing;

using DevExpress.Utils;
using DevExpress.XtraEditors;
using DevExpress.XtraVerticalGrid;
using DevExpress.XtraVerticalGrid.Events;
using DevExpress.XtraVerticalGrid.Rows;

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

        #region Field

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

        /// <summary>
        /// 모양 객체 배열
        /// </summary>
        private AppearanceObject[] appearanceObjectArray;

        #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.LayoutStyle                    = LayoutViewStyle.SingleRecordView;
            this.gridControl.OptionsView.MinRowAutoHeight   = 25;
            this.gridControl.RowHeaderWidth                 = 50;
            this.gridControl.RecordWidth                    = 150;
            this.gridControl.OptionsBehavior.DragRowHeaders = true;

            #region 일반 카테고리 행을 설정한다.

            CategoryRow generalCategoryRow = new CategoryRow();

            generalCategoryRow.Name               = "generalCategoryRow";
            generalCategoryRow.Properties.Caption = "일반";

            this.gridControl.Rows.Add(generalCategoryRow);

            #endregion
                #region 주문 ID 에디터 행을 설정한다.

                EditorRow orderIDEditorRow = new EditorRow();

                orderIDEditorRow.Name                 = "orderIDEditorRow";
                orderIDEditorRow.Properties.Caption   = "주문 ID";
                orderIDEditorRow.Properties.FieldName = "OrderID";
                orderIDEditorRow.Properties.AllowEdit = false;

                generalCategoryRow.ChildRows.Add(orderIDEditorRow);

                #endregion
                #region 고객 ID 에디터 행을 설정한다.

                EditorRow customerIDEditorRow = new EditorRow();

                customerIDEditorRow.Name                 = "customerIDEditorRow";
                customerIDEditorRow.Properties.Caption   = "고객 ID";
                customerIDEditorRow.Properties.FieldName = "CustomerID";
                customerIDEditorRow.Properties.AllowEdit = false;

                generalCategoryRow.ChildRows.Add(customerIDEditorRow);

                #endregion
                #region 직원 ID 에디터 행을 설정한다.

                EditorRow employeeIDEditorRow = new EditorRow();

                employeeIDEditorRow.Name                 = "employeeIDEditorRow";
                employeeIDEditorRow.Properties.Caption   = "직원 ID";
                employeeIDEditorRow.Properties.FieldName = "EmployeeID";
                employeeIDEditorRow.Properties.AllowEdit = false;

                generalCategoryRow.ChildRows.Add(employeeIDEditorRow);

                #endregion
                #region 요청일 에디터 행을 설정한다.

                EditorRow requiredDateEditorRow = new EditorRow();

                requiredDateEditorRow.Name                 = "requiredDateEditorRow";
                requiredDateEditorRow.Properties.Caption   = "요청일";
                requiredDateEditorRow.Properties.FieldName = "RequiredDate";
                requiredDateEditorRow.Properties.AllowEdit = false;

                generalCategoryRow.ChildRows.Add(requiredDateEditorRow);

                #endregion
                #region 선적일 에디터 행을 설정한다.

                EditorRow shippedDateEditorRow = new EditorRow();

                shippedDateEditorRow.Name                 = "shippedDateEditorRow";
                shippedDateEditorRow.Properties.Caption   = "선적일";
                shippedDateEditorRow.Properties.FieldName = "ShippedDate";
                shippedDateEditorRow.Properties.AllowEdit = false;

                generalCategoryRow.ChildRows.Add(shippedDateEditorRow);

                #endregion
                #region 선적 수단 에디터 행을 설정한다.

                EditorRow shipViaEditorRow = new EditorRow();

                shipViaEditorRow.Name                 = "shipViaEditorRow";
                shipViaEditorRow.Properties.Caption   = "선적 수단";
                shipViaEditorRow.Properties.FieldName = "ShipVia";
                shipViaEditorRow.Properties.AllowEdit = false;

                generalCategoryRow.ChildRows.Add(shipViaEditorRow);

                #endregion
            #region 선적 카테고리 행을 설정한다.

            CategoryRow shipCategoryRow = new CategoryRow();

            shipCategoryRow.Name               = "shipCategoryRow";
            shipCategoryRow.Properties.Caption = "선적";

            this.gridControl.Rows.Add(shipCategoryRow);

            #endregion
                #region 선적명 에디터 행을 설정한다.

                EditorRow shipNameEditorRow = new EditorRow();

                shipNameEditorRow.Name                 = "shipNameEditorRow";
                shipNameEditorRow.Properties.Caption   = "선적명";
                shipNameEditorRow.Properties.FieldName = "ShipName";
                shipNameEditorRow.Properties.AllowEdit = false;

                shipCategoryRow.ChildRows.Add(shipNameEditorRow);

                #endregion
                #region 선적 우편 번호 에디터 행을 설정한다.

                EditorRow shipPostalCodeEditorRow = new EditorRow();

                shipPostalCodeEditorRow.Name                 = "shipPostalCodeEditorRow";
                shipPostalCodeEditorRow.Properties.Caption   = "선적 우편 번호";
                shipPostalCodeEditorRow.Properties.FieldName = "ShipPostalCode";
                shipPostalCodeEditorRow.Properties.AllowEdit = false;

                shipCategoryRow.ChildRows.Add(shipPostalCodeEditorRow);

                #endregion
                #region 선적 주소 멀티 에디터 행을 설정한다.

                MultiEditorRow shipAddressMultiEditorRow = new MultiEditorRow();

                shipAddressMultiEditorRow.Name          = "shipAddressMultiEditorRow";
                shipAddressMultiEditorRow.SeparatorKind = SeparatorKind.VertLine;

                shipCategoryRow.ChildRows.Add(shipAddressMultiEditorRow);

                #endregion
                    #region 선적 국가 멀티 에디터 행 속성을 설정한다.

                    MultiEditorRowProperties shipCountryMultiEditorRowProperties = new MultiEditorRowProperties();

                    shipCountryMultiEditorRowProperties.Name      = "shipCountryMultiEditorRowProperties";
                    shipCountryMultiEditorRowProperties.CellWidth = 25;
                    shipCountryMultiEditorRowProperties.Caption   = "국가";
                    shipCountryMultiEditorRowProperties.FieldName = "ShipCountry";

                    shipAddressMultiEditorRow.PropertiesCollection.Add(shipCountryMultiEditorRowProperties);

                    #endregion
                    #region 선적 도시 멀티 에디터 행 속성을 설정한다.

                    MultiEditorRowProperties shipCityMultiEditorRowProperties = new MultiEditorRowProperties();

                    shipCityMultiEditorRowProperties.Name      = "shipCityMultiEditorRowProperties";
                    shipCityMultiEditorRowProperties.CellWidth = 25;
                    shipCityMultiEditorRowProperties.Caption   = "도시";
                    shipCityMultiEditorRowProperties.FieldName = "ShipCity";

                    shipAddressMultiEditorRow.PropertiesCollection.Add(shipCityMultiEditorRowProperties);

                    #endregion
                    #region 선적 주소 멀티 에디터 행 속성을 설정한다.

                    MultiEditorRowProperties shipAddressMultiEditorRowProperties = new MultiEditorRowProperties();

                    shipAddressMultiEditorRowProperties.Name      = "shipAddressMultiEditorRowProperties";
                    shipAddressMultiEditorRowProperties.CellWidth = 25;
                    shipAddressMultiEditorRowProperties.Caption   = "주소";
                    shipAddressMultiEditorRowProperties.FieldName = "ShipAddress";

                    shipAddressMultiEditorRow.PropertiesCollection.Add(shipAddressMultiEditorRowProperties);

                    #endregion
                    #region 선적 지역 멀티 에디터 행 속성을 설정한다.

                    MultiEditorRowProperties shipRegionMultiEditorRowProperties = new MultiEditorRowProperties();

                    shipRegionMultiEditorRowProperties.Name      = "shipRegionMultiEditorRowProperties";
                    shipRegionMultiEditorRowProperties.CellWidth = 25;
                    shipRegionMultiEditorRowProperties.Caption   = "지역";
                    shipRegionMultiEditorRowProperties.FieldName = "ShipRegion";

                    shipAddressMultiEditorRow.PropertiesCollection.Add(shipRegionMultiEditorRowProperties);

                    #endregion

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

            this.gridControl.BestFit();

            this.pictureBox.Visible = false;

            this.gridControl.StartDragRow   += gridControl_StartDragRow;
            this.gridControl.ProcessDragRow += gridControl_ProcessDragRow;
            this.gridControl.EndDragRow     += gridControl_EndDragRow;
        }

        #endregion

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

        #region 그리드 컨트롤 행 드래그 시작하기 - gridControl_StartDragRow(sender, e)

        /// <summary>
        /// 그리드 컨트롤 행 드래그 시작하기
        /// </summary>
        /// <param name="sender">이벤트 발생자</param>
        /// <param name="e">이벤트 인자</param>
        private void gridControl_StartDragRow(object sender, StartDragRowEventArgs e)
        {
            if(e.Row is MultiEditorRow)
            {
                this.pictureBox.Visible = true;
            }
        }

        #endregion
        #region 그리드 컨트롤 행 드래그 처리하기 - gridControl_ProcessDragRow(sender, e)

        /// <summary>
        /// 그리드 컨트롤 행 드래그 처리하기
        /// </summary>
        /// <param name="sender">이벤트 발생자</param>
        /// <param name="e">이벤트 인자</param>
        private void gridControl_ProcessDragRow(object sender, DragRowEventArgs e)
        {
           Point clientPoint = this.pictureBox.PointToClient(e.ScreenLocation);

           if(this.pictureBox.ClientRectangle.Contains(clientPoint))
           {
              e.Effect = RowDragEffect.InsertBefore;
           }
        }

        #endregion
        #region 그리드 컨트롤 행 드래그 종료하기 - gridControl_EndDragRow(sender, e)

        /// <summary>
        /// 그리드 컨트롤 행 드래그 종료하기
        /// </summary>
        /// <param name="sender">이벤트 발생자</param>
        /// <param name="e">이벤트 인자</param>
        private void gridControl_EndDragRow(object sender, EndDragRowEventArgs e)
        {
            VGridControl gridControl = sender as VGridControl;

            Point clientPoint = this.pictureBox.PointToClient(e.ScreenLocation);

            if(this.pictureBox.ClientRectangle.Contains(clientPoint))
            {
                MultiEditorRow multiEditorRow = e.Row as MultiEditorRow;

                if(multiEditorRow != null)
                {
                    for(int i = 0; i < multiEditorRow.PropertiesCollection.Count; i++)
                    {
                        EditorRow editorRow = new EditorRow();

                        editorRow.Properties.Caption   = multiEditorRow.PropertiesCollection[i].Caption;
                        editorRow.Properties.FieldName = multiEditorRow.PropertiesCollection[i].FieldName;

                        gridControl.Rows.Add(editorRow);
                    }

                    if(multiEditorRow.ParentRow == null)
                    {
                        gridControl.Rows.Remove(multiEditorRow);
                    }
                    else
                    {
                        multiEditorRow.ParentRow.ChildRows.Remove(multiEditorRow);
                    }
                }
            }

            this.pictureBox.Visible = false;
        }

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

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

[DEVEXPRESS/WINFORM] VGridControl 클래스 : CustomDrawRowValueCell 이벤트를 사용해 행 값 셀 커스텀 그리기  (0) 2020.05.01
[DEVEXPRESS/WINFORM] VGridControl 클래스 : CustomDrawTreeButton 이벤트를 사용해 트리 버튼 커스텀 그리기  (0) 2020.05.01
[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
Posted by 사용자 icodebroker

댓글을 달아 주세요