C#/winform

[C#][WinForm][Dev]GridControl 데이터 형식 설정(숫자 ',' 표시, 날짜 표시)

ㅋㅋ! 2021. 6. 30. 13:42

**본 글은 DevExpress 컴포넌트를 이용한 경우에만 참고 할 수 있다.

 

테스트에 사용된 데이터

화면에 표시해주는 데이터를 알아보기 쉽게 포맷을 변경해보자.

숫자의 경우는 자리수에 맞춰 콤마(,)를 표시해주고,

날짜는 'yyyy년  MM월 dd일' 형태로 변경한다.


데이터 생성

DataTable로 데이터를 생성한다

DataTable dt =new DataTable();
	    dt.Columns.Add("Item");
            dt.Columns.Add("Stock");
            dt.Columns.Add("Date");

            
            dt.Columns["Item"].Caption = "품목";
            dt.Columns["Stock"].Caption = "재고";
            dt.Columns["Date"].Caption = "날짜";

            dt.Rows.Add("연필", "3500", "20200501");
            dt.Rows.Add("지우개", "2000", "20210301");
            dt.Rows.Add("GTX3090", "200", "20210808");
            
            gridControl1.DataSource=dt;


데이터 포맷 설정

GridControl의 데이터 포맷은 Gridview의 CustomColumnDisplayText 이벤트를 이용한다.

 


숫자형

숫자정보는 아래 코드를 참고한다.

string num = e.Value.ToString();
int intNum;
	if (Int32.TryParse(num, out intNum)) //데이터를 int로 변환시도
	{
		e.DisplayText = string.Format("{0:#,###}", intNum);
	}
	else
	{
		e.DisplayText = num;
	}

 

날짜형

날짜정보는 아래 코드를 참고한다.

 string strDate = e.Value.ToString();
 DateTime dateTime;
                    try
                    {
                        dateTime = DateTime.ParseExact(strDate, "yyyyMMdd", null);
                        e.DisplayText = dateTime.ToString("yyyy년 MM월 dd일");
                    }
                    catch
                    {
                        e.DisplayText = strDate;
                    }

 

이벤트 작성

위 코드를 이벤트에 작성 하여 각 컬럼별 DisplayText를 변경 할 수 있다.

Switch문을 이용해 두가지를 동시에 적용한다.(If문을 사용해도된다.)

private void gridView1_CustomColumnDisplayText(object sender, DevExpress.XtraGrid.Views.Base.CustomColumnDisplayTextEventArgs e)
        {
            switch (e.Column.FieldName)
            {
                case "Stock":
                    string num = e.Value.ToString();
                    int intNum;
                    if (Int32.TryParse(num, out intNum))
                    {
                        e.DisplayText = string.Format("{0:#,###}", intNum);
                    }
                    else
                    {
                        e.DisplayText = num;
                    }
                    break;

                case "Date":
                    string strDate = e.Value.ToString();
                    DateTime dateTime;
                    try
                    {
                        dateTime = DateTime.ParseExact(strDate, "yyyyMMdd", null);
                        e.DisplayText = dateTime.ToString("yyyy년 MM월 dd일");
                    }
                    catch
                    {
                        e.DisplayText = strDate;
                    }
                    break;
            }
        }

끝.