IT/C#

[C#] DataGridView ComboBoxCell Column Create & SelectedIndexChanged Event & Reset (feat. 가계부 프로그램 업데이트)

Ella.J 2023. 3. 24. 16:29
728x90
반응형

 

안녕하세요 ELLA입니다!

 

제가 진짜 정말 계속 진심 기다리던 애플페이!!❤❤

이번에 개시하자마자 바로 현대카드 만들고~ 그날 저녁에 야근하고(ㅋㅋ) 집 가는 길에 편의점에서 바~로 써봤습니다.

아 좋더라구요 ㅎㅎ 와우 ㅎㅎ

그래서 신용카드를 새로 만든 김에 제가 만들어서 쓰던 가계부도 나름대로 프로그램 업데이트 진행해 봤습니다.

(가계부 만들기 포스팅 보러 가기)

2020.02.29 - [IT/C#] - [C#] 가계부 프로그램 만들기 DAY2. 프로그램 UI 생성 및 가계부 기본 설정하기

 

그리고 프로그램 개발하면서 DataGridView 몇 가지 활용법을 포스팅으로 써봤습니다.

동영상은 가계부 프로그램에서의 ComboBoxCell SelectedIndexChanged 기능 영상으로 만들어보았습니다.

(영상편집을 최초로 도전해 봤는데 ㅋㅋㅋ 넘 웃기네요 ㅋㅋㅋ)

기존에 가계부 프로그램 포스팅을 보시고 따라 하셨던 분들, 이 포스팅 보시고 업데이트해보시면 좋을 것 같네요 : )

아무튼 보시고 궁금하신 점, 질문 있으시면 언제든지 댓글 남겨주세요 : )

 

 


 

🍎 DataGridView ComboBoxCell Column Create

첫 번째 '신용카드사' 컬럼을 ComboBoxCell Column으로 변경하고 싶다.

1. DataGridViewComboBoxCell을 만들고, 신용카드사 리스트를 ComboBox 아이템으로 추가해 준다.

2. 생성한 ComboBoxCell을 가지는 DataGridViewColumn을 만들어 현재 dataGridView1에 0번째 Column으로 추가한다. 3. 기존 0번째 Column은 1번째로 밀리기 때문에, 기존의 1번째 '신용카드사' 컬럼 데이터를 추가한 ComboBox Column으로 복사한다.

4. 기존 '신용카드사' 컬럼은 안 보이게 처리한다.

//1.
DataGridViewComboBoxCell creditbc = new DataGridViewComboBoxCell();
creditbc.Items.AddRange(CreditBankName);

//2.
DataGridViewColumn creditcc = new DataGridViewColumn(creditbc);
dataGridView1.Columns.Insert(0, creditcc);

//3.
dataGridView1.Columns[0].HeaderText = dataGridView1.Columns[1].HeaderText; //ComboBoxCell
foreach (DataGridViewRow item in dataGridView1.Rows)
{
    item.Cells[0].Value = item.Cells[1].Value;
}

//4.
dataGridView1.Columns[1].Visible = false; //TextBoxCell
public static string[] CreditBankName = { "KB국민","우리","신한","현대","삼성",
    "롯데","하나","NH농협","씨티","SC", "수협","MG","우체국","K뱅크","카카오" };

 


 

🍎 DataGridView ComboBoxCell SelectedIndexChanged Event

이번엔 출금일 ComboBoxCell을 만들어서 출금일에 따른 사용실적기간을 자동으로 입력하고 싶다.

1. dataGridView1.EditingControlShowing 이벤트를 추가한다.

dataGridView1.EditingControlShowing += 
	new DataGridViewEditingControlShowingEventHandler(dv_EditingControlShowing);

2. dv_EditingControlShowing 이벤트를 다음과 같이 만들고, 해당 Cell이 ComboBox인지 확인하여 SelectedIndexChanged 이벤트를 호출해 준다. 이벤트핸들러 중복 방지를 위해 이벤트 해제 후 다시 등록해 준다.

(위 사진을 보면 ComboBox Column을 두 개 만들었기 때문에, 현재 Cell이 '출금일' 컬럼인지 아닌지 한 번 더 체크했다.)

public void dv_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
    ComboBox combo = e.Control as ComboBox;
    if (combo != null && dataGridView1.CurrentCell.ColumnIndex == 1)
    {
        combo.SelectedIndexChanged -= new EventHandler(ComboBox_SelectedIndexChanged);
        combo.SelectedIndexChanged += new EventHandler(ComboBox_SelectedIndexChanged);
    }
}

3. SelectedIndexChanged 이벤트를 다음과 같이 만들어 준다.

('출금일'에 따른 '사용실적기간을' 자동으로 입력하기 위해서 '출금일' ComboBox SelectedIndex 값에 해당하는 '사용실적기간(CreditTermList)'을 입력해 주었다.)

private void ComboBox_SelectedIndexChanged(object sender, EventArgs e)
{
    ComboBox cb = (ComboBox)sender;
    var row = dataGridView1.CurrentRow.Index;
    if (CreditDateList.Contains(cb.SelectedItem))
    {
        string creditTerm = CreditTermList[cb.SelectedIndex];
        dataGridView1.Rows[row].Cells[7].Value = creditTerm;
    }
}
public static string[] CreditDateList = { "1일","5일","10일","12일","15일",
                                            "20일","23일","24일","25일","26일"};
public static string[] CreditTermList = { 
	"전전월 20일 ~ 전월 19일","전전월 24일 ~ 전월 23일","전전월 29일 ~ 전월 28일",
	"전월 01일 ~ 전월 31일","전월 04일 ~ 당월 03일", "전월 09일 ~ 당월 08일",
    "전월 12일 ~ 당월 11일","전월 13일 ~ 당월 12일", "전월 14일 ~ 당월 13일",
    "전월 13일 ~ 당월 12일"};

 


 

🍎 DataGridView Reset

처음에 DataSource로 데이터를 가져와서 DataGridView에 넣고, ComboBox Column을 추가하고 했었는데, 완전 초기화하는 방법을 몰라 많이 헤맸다.. 다음과 같이 하면 위 사진처럼 완전 DataGridView 처음 상태로 돌아간다.

private void button1_Click(object sender, EventArgs e)
{
    dataGridView1.Columns.Clear();
    dataGridView1.DataSource = null;
    dataGridView1.Refresh();
}

 

 

728x90
반응형