첨부 소스 코드는 나눔고딕코딩 폰트를 사용합니다.
728x90
반응형
728x170

TestProject.zip
다운로드

▶ SeverityValueProvider.cs

using DevExpress.XtraGauges.Win.Base;

namespace TestProject
{
    /// <summary>
    /// 심각도 값 공급자
    /// </summary>
    public class SeverityValueProvider : IValueProvider
    {
        //////////////////////////////////////////////////////////////////////////////////////////////////// Property
        ////////////////////////////////////////////////////////////////////////////////////////// Public

        #region 값 - Value

        /// <summary>
        /// 값
        /// </summary>
        public object Value { get; set; }

        #endregion
    }
}

 

728x90

 

▶ MainForm.cs

using System.Drawing;

using DevExpress.Data;
using DevExpress.Utils;
using DevExpress.XtraEditors;
using DevExpress.XtraEditors.CustomEditor;
using DevExpress.XtraGauges.Core.Model;
using DevExpress.XtraGauges.Win;
using DevExpress.XtraGauges.Win.Gauges.State;
using DevExpress.XtraGrid.Columns;
using DevExpress.XtraGrid.Views.Base;
using DevExpress.XtraGrid.Views.Grid;

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

        #region 생성자 - MainForm()

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

            #region 게이지 컨트롤을 설정한다.

            GaugeControl gaugeControl = new GaugeControl();

            gaugeControl.Size = new Size(100, 200);

            #endregion
            #region 상태 지시자 게이지를 설정한다.

            StateIndicatorGauge stateIndicatorGauge = gaugeControl.AddStateIndicatorGauge();

            #endregion
            #region 상태 지시자 컴포넌트를 설정한다.

            StateIndicatorComponent stateIndicatorComponent = stateIndicatorGauge.AddIndicator();

            stateIndicatorComponent.Size = new SizeF(100, 200);

            StateIndicatorShapeType[] stateIndicatorShapeTypeArray = new StateIndicatorShapeType[]
            {
                StateIndicatorShapeType.TrafficLight1,
                StateIndicatorShapeType.TrafficLight2,
                StateIndicatorShapeType.TrafficLight3,
                StateIndicatorShapeType.TrafficLight4
            };

            stateIndicatorComponent.States.Clear();

            foreach(StateIndicatorShapeType stateIndicatorShapeType in stateIndicatorShapeTypeArray)
            {
                IndicatorState indicatorState = new IndicatorState();

                indicatorState.ShapeType = stateIndicatorShapeType;

                stateIndicatorComponent.States.Add(indicatorState);
            }

            stateIndicatorComponent.StateIndex = 1;

            #endregion
            #region 그리드 컨트롤을 설정한다.

            this.gridView.InitializeView
            (
                true,                           // Multi Select
                GridMultiSelectMode.CellSelect, // Grid Multi Select Mode
                DrawFocusRectStyle.CellFocus,   // Draw Focus Rect Style
                true,                           // Show Indicator
                true,                           // Show Column Headers
                true,                           // Allow Column Moving
                true,                           // Allow Column Resizing
                true,                           // Allow Filter
                true,                           // Allow Sort
                false,                          // Allow Cell Merge
                EditorShowMode.Default,         // Editor Show Mode
                false                           // Editable
            );

            this.gridView.OptionsBehavior.AutoPopulateColumns = true;

            this.gridControl.DataSource = SampleTaskList.GetSampleTaskList();

            GridColumn gridColumn = new GridColumn();

            gridColumn.Caption     = "Severity Indicator";
            gridColumn.FieldName   = "SeverityGauge";
            gridColumn.UnboundType = UnboundColumnType.Object;
            gridColumn.Visible     = true;

            this.gridView.Columns.Add(gridColumn);

            RepositoryItemAnyControl repositoryItemAnyControl = new RepositoryItemAnyControl();

            repositoryItemAnyControl.Control = gaugeControl;

            this.gridControl.RepositoryItems.Add(repositoryItemAnyControl);

            this.gridView.Columns["SeverityGauge"].ColumnEdit = repositoryItemAnyControl;   

            this.gridView.BestFitColumns();

            this.gridView.CustomUnboundColumnData += gridView_CustomUnboundColumnData;

            #endregion
        }

        #endregion

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

        #region 그리드 뷰 언바운드 컬럼 데이터 커스텀 설정하기 - gridView_CustomUnboundColumnData(sender, e)

        /// <summary>
        /// 그리드 뷰 언바운드 컬럼 데이터 커스텀 설정하기
        /// </summary>
        /// <param name="sender">이벤트 발생자</param>
        /// <param name="e">이벤트 인자</param>
        private void gridView_CustomUnboundColumnData(object sender, CustomColumnDataEventArgs e)
        {
            Task task = e.Row as Task;

            switch(e.Column.FieldName)
            {
                case "SeverityGauge" :

                    e.Value = new SeverityValueProvider() { Value = task.Severity };

                    break;
            }
        }

        #endregion
    }
}
728x90
반응형
그리드형(광고전용)
Posted by icodebroker

댓글을 달아 주세요