개발(IT)/DevExpress(WinForm)

[GridView] Column 값에 따라 컬러바(Color Bar) 표시하기

isony 2023. 9. 2. 22:51
반응형

데이터를 표시하다가 보면 컬러에 숫자와 컬러바가 같이 표시하고자 하실때 사용

값에 따라 표시하는 색상를 다르게도 할수 있어 참고하시고 응용하셔도 좋습니다.

using System;
using System.Data;
using System.Drawing;
using System.Windows.Forms;

using DevExpress.XtraGrid.Views.Grid;
using DevExpress.XtraEditors.Repository;

namespace WinFormTest
{
    public partial class Form1 : Form
    {
        private RepositoryItemProgressBar pbRed = new RepositoryItemProgressBar();
        private RepositoryItemProgressBar pbGreen = new RepositoryItemProgressBar();

        public Form1()
        {
            InitializeComponent();

            gridView1.CustomRowCellEdit += gridview_CustomRowCellEdit;

            // 초기화 선언
            this.Shown += WinFormTest_Shown;
        }

        private void WinFormTest_Shown(object sender, EventArgs e)
        {
            initGridControl();
            this.gridControl1.DataSource = GetData();
        }

        private void initGridControl()
        {
            GridView gv = this.gridControl1.MainView as GridView;
            gv.OptionsView.ShowGroupPanel = false;
            gv.OptionsBehavior.Editable = false;

            // 컬럼 바 색상 초기화 (Red) - 50미만일때 사용
            pbRed.LookAndFeel.UseDefaultLookAndFeel = false;
            pbRed.LookAndFeel.Style = DevExpress.LookAndFeel.LookAndFeelStyle.Flat;
            pbRed.ProgressViewStyle = DevExpress.XtraEditors.Controls.ProgressViewStyle.Solid;
            pbRed.Minimum = 0;
            pbRed.Maximum = 100;
            pbRed.StartColor = Color.Red;
            pbRed.EndColor = Color.Red;
            pbRed.PercentView = false;
            pbRed.ShowTitle = true;

            // 컬럼 바 색상 초기화 (Green) - 50이상일때 사용
            pbGreen.LookAndFeel.UseDefaultLookAndFeel = false;
            pbGreen.LookAndFeel.Style = DevExpress.LookAndFeel.LookAndFeelStyle.Flat;
            pbGreen.ProgressViewStyle = DevExpress.XtraEditors.Controls.ProgressViewStyle.Solid;
            pbGreen.Minimum = 0;
            pbGreen.Maximum = 100;
            pbGreen.StartColor = Color.Green;
            pbGreen.EndColor = Color.Green;
            pbGreen.PercentView = false;
            pbGreen.ShowTitle = true;
        }

        private DataTable GetData()
        {
            DataTable dt = new DataTable();
            dt.Columns.Add("Name");
            dt.Columns.Add("Age");
            dt.Columns.Add("Sex");
            dt.Columns.Add("Score");

            dt.Rows.Add(new string[] { "조조", "28", "남성", "100" });
            dt.Rows.Add(new string[] { "유비", "28", "여성", "45" });
            dt.Rows.Add(new string[] { "황선홍", "56", "여성", "10" });
            dt.Rows.Add(new string[] { "안정환", "34", "남성", "78" });
            dt.Rows.Add(new string[] { "설기현", "33", "남성", "53" });
            dt.Rows.Add(new string[] { "박지성", "24", "남성", "10" });

            return dt;
        }

        private void gridview_CustomRowCellEdit(object sender, CustomRowCellEditEventArgs e)
        {
            if (gridView1.GetDataRow(e.RowHandle) == null) return;
            if (e.Column.FieldName != "Score") return;

            string isScroe = gridView1.GetDataRow(e.RowHandle)["Score"].ToString();
            if (Convert.ToInt32(isScroe) < 50)
                e.RepositoryItem = pbRed;
            else
                e.RepositoryItem = pbGreen;
        }
    }
}

 

<결과화면>

반응형