반응형
* 데이터그리드뷰 체크박스 값 이벤트 적용은 어떻게 해야할까?
데이터그리드에 체크박스 적용 후 체크박스 값에 따라 셀 백그라운드 색상을 변경을 위해서
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 값을 전달한다.
참고문헌
*결과
반응형
'IT 개발일지' 카테고리의 다른 글
C# MYSQL HOW TO SELECT UPDATE DELETE 쿼리하기 (0) | 2022.12.26 |
---|---|
C# HOW TO CONNECT MYSQL DATABASE 연결하기 (0) | 2022.12.26 |
C# 윈폼 how to vs2019 community rdlc report designer 보고서 디자인 사용하기 (0) | 2021.10.26 |
[EXCEL] 숫자 자릿수 채우기 (0) | 2020.06.30 |
C# datagridview 컬럼 셋팅 2가지 (0) | 2020.04.13 |
댓글