2015-02-05 3 views
1

데이터 바인딩 된 datagridview가 있습니다. 어떤 조건이 충족되지 않으면 어떻게 datagridview에서 체크되고있는 체크 박스를 취소 할 수 있습니까?DataGridView의 체크 박스를 체크 표시 취소하는 방법

private void dataGridViewStu_CellContentClick(object sender, DataGridViewCellEventArgs e) 
{ 
    dataGridViewStu.CommitEdit(DataGridViewDataErrorContexts.Commit); 
} 

private void dataGridViewStu_CellValueChanged(object sender, DataGridViewCellEventArgs e) 
{ 
} 

답변

2

한 가지 가능한 방법은 DataGridViewCurrentCellDirtyStateChanged 이벤트를 처리하는 것입니다. 조건을 확인하고 현재 셀이 CheckBoxCell인지 확인한 다음 두 조건이 모두 충족되면 CancelEdit으로 전화하십시오.

private void dataGridView1_CurrentCellDirtyStateChanged(object sender, EventArgs e) 
{ 
    if (youShouldCancelCheck && 
     this.dataGridView1.IsCurrentCellDirty && 
     this.dataGridView1.CurrentCell is DataGridViewCheckBoxCell) 
    { 
    this.dataGridView1.CancelEdit(); 
    // Addition code here. 
    } 
} 

편집

나는 셀이 CancelEdit하고 추가 코드를 실행하기 전에 더러운 있는지 확인하는 if 문에 추가 조건을 추가했습니다. 더 이상 두 번 실행해서는 안됩니다. 무슨 일이 있었는지 :

  1. 사용자 클릭 확인란. IsCurrentCellDirty = trueCurrentCellDirtyStateChanged이 해고되었습니다.
  2. 조건이 충족됩니다. CancelEdit이 실행되면 모든 변경 사항이 취소되고 IsCurrentCellDirty = false으로 설정됩니다. 따라서 CurrentCellDirtyStateChanged이 다시 시작됩니다.

CurrentCellDirtyStateChanged은 두 번 계속 실행되지만 조건부 코드는 더티 일 때만 실행됩니다.

+1

나는 코드를 시도했는데 "작동"하지만 CancelEdit 메서드 바로 다음에 여분의 코드를 실행해야하며 여분의 코드를 두 번 실행하는 것으로 보입니다. 한 번만 실행해야합니다. – Jnr

+0

@Jnr 오류를 재현 할 수 있도록 추가 코드를 어디에 실행하고 있습니까? 나는 내일 그것을 볼 것이다. – OhBeWise

+0

당신이 내 뜻을 볼 수 있도록 답안에서 당신의 코드를 편집하게하십시오. – Jnr

관련 문제