본문 바로가기
IT 개발일지

C# how to datagridview checkbox value 변경 이벤트 적용하기

by (주)삼우기공 2022. 2. 10.
반응형

* 데이터그리드뷰 체크박스 값 이벤트 적용은 어떻게 해야할까?

데이터그리드에 체크박스 적용 후 체크박스 값에 따라 셀 백그라운드 색상을 변경을 위해서

CellContentClick을 사용하여 적용 해 보았다.

 

private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
    if (Convert.ToBoolean(dataGridView1.Rows[e.RowIndex].Cells["chk"].Value))
    {
        dataGridView1.Rows[e.RowIndex].DefaultCellStyle.BackColor = Color.Yellow;
    }
    else
    {
        dataGridView1.Rows[e.RowIndex].DefaultCellStyle.BackColor = Color.White;
    }
}

 

위 내용만 적용하였을 경우 체크 여부에 바로 적용 되지 않았다.

다른 셀을 클릭 후 다시 체크되어진 셀을 클릭 시 적용 되는 문제점이 있었다.

 

내가 원하는 것은 변경 사항을 즉시 처리하기를 원한다.

* 해결방법

private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
    if (Convert.ToBoolean(dataGridView1.Rows[e.RowIndex].Cells["chk"].Value))
    {
        dataGridView1.Rows[e.RowIndex].DefaultCellStyle.BackColor = Color.Yellow;
    }
    else
    {
        dataGridView1.Rows[e.RowIndex].DefaultCellStyle.BackColor = Color.White;
    }
}

// 추가코드
private void dataGridView1_CurrentCellDirtyStateChanged(object sender, EventArgs e)
{
    dataGridView1.CommitEdit(DataGridViewDataErrorContexts.Commit);
}

 

위 내용으로 수정하여 문제를 해결하였다.

 

stackoverflow 및 다른 문서에는 dataGridViewSites_CellValueChanged 이벤트에 적용하였지만,

데이터 로드시 먼저 이벤트가 발생되어 에러를 출력하였다.

 

* 참고문헌 REMARK 번역분

DataGridView.CellValueChanged 이벤트 는 사용자 지정 값이 커밋될 때 발생하며 일반적으로 포커스가 셀에서 나갈 때 발생합니다.


그러나 체크박스 셀의 경우 일반적으로 변경 사항을 즉시 처리하기를 원할 것입니다.
셀을 클릭할 때 변경 사항을 커밋하려면 DataGridView.CurrentCellDirtyStateChanged 이벤트를 처리해야 합니다. 핸들러에서 현재 셀이 체크박스 셀이면 DataGridView.CommitEdit 메서드를 호출하고 Commit 값을 전달한다.

참고문헌

https://docs.microsoft.com/ko-kr/dotnet/api/system.windows.forms.datagridview.cellvaluechanged?view=windowsdesktop-6.0

 

DataGridView.CellValueChanged Event (System.Windows.Forms)

Occurs when the value of a cell changes.

docs.microsoft.com

 

*결과

적용결과

반응형

댓글