IT 개발일지
C# how to datagridview checkbox value 변경 이벤트 적용하기
(주)삼우기공
2022. 2. 10. 16:05
반응형
* 데이터그리드뷰 체크박스 값 이벤트 적용은 어떻게 해야할까?
데이터그리드에 체크박스 적용 후 체크박스 값에 따라 셀 백그라운드 색상을 변경을 위해서
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 값을 전달한다.
참고문헌
DataGridView.CellValueChanged Event (System.Windows.Forms)
Occurs when the value of a cell changes.
docs.microsoft.com
*결과
반응형