C#/winform

[C#][WinForm]DataGridView 데이터 포맷 설정하기(숫자 ',' 표시 / 날짜 형식)

ㅋㅋ! 2021. 7. 1. 13:07
테스트에 사용된 데이터

DataGridView에 표시되는 데이터들을 알아보기 쉽게 포맷을 설정해보자.

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

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

 


데이터 생성

DataTable로 데이터를 생성한다

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

            
            dt.Rows.Add("연필", "3500", "20200501");
            dt.Rows.Add("지우개", "2000", "20210301");
            dt.Rows.Add("GTX3090", "200", "20210808");
            
            dataGridView1.DataSource=dt;
            
            dataGridView1.Columns["Item"].HeaderText = "품목";
            dataGridView1.Columns["Stock"].HeaderText = "재고";
            dataGridView1.Columns["Date"].HeaderText = "날짜";


데이터 포맷 설정

dataGridView의 CellFormatting 이벤트를 사용한다.


숫자형

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

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

 

날짜형

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

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

 

이벤트 작성

위 코드를 이벤트에 작성 하여 각 컬럼별 데이터 포맷(형식)을 변경 할 수 있다.

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

private void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
        { 
            if (e.RowIndex != this.dataGridView1.NewRowIndex)
            {
                switch (e.ColumnIndex)
                {
                    case 1:
                        string num = e.Value.ToString();
                        int intNum;
                        if (Int32.TryParse(num, out intNum))
                        {
                            e.Value = string.Format("{0:#,###}", intNum);
                        }
                        else
                        {
                            e.Value = num;
                        }
                        break;

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

끝.