2014-10-29 3 views
0
나는

왜 항상 true CheckChanged 처리기에서 체크 박스 상태

checkbox = new CheckBox(); 
checkbox.ID = "AreaGroup"; 
checkbox.AutoPostBack = true; 
checkbox.CheckedChanged += new System.EventHandler(this.EHArea_Clicked); 

내가 다음 방법

void EHArea_Clicked(Object sender, EventArgs e) 
{ 
    foreach (RepeaterItem aItem in Repeater1.Items) 
    { 
     checkbox = (CheckBox)aItem.FindControl("TownCheckbox"); 
     if (((CheckBox)sender).Checked) 
     { 
      checkbox.Checked = true; 
     } 
     else 
     { 
      checkbox.Checked = false; 
     } 
    } 
} 
과 뒤에있는 코드에서 EHArea_Clicked의 함수를 선언 다음과 같은 방식으로 선언 한 체크 박스를

내가 가진 문제는

((CheckBox)sender).Checked 

에 관계없이 항상 true로 평가이다 확인란을 선택하거나 선택 취소 할 경우 왜 이런 일이 일어나는 지에 대한 생각을 가진 사람이 있습니까?

+1

"checkbox"변수로 범위 문제가 발생할 수 있습니다. 다시 할당하고 있습니다 : checkbox = (CheckBox) aItem.FindControl ("TownCheckbox"); 확인란을 다시 지정하면 안됩니다. – zam664

+0

AreaGroup CheckBox를 동적으로 생성하는 위치는 어디입니까? – Win

+0

@ zam664 그렇다고 생각하지 않습니다. checkbox 변수와 관련된 모든 기능이 정상적으로 작동합니다. If 조건을! ((CheckBox) 보낸 사람)으로 전환하면. else 절이 항상 올바르게 수행됩니다. – KHeaney

답변

0

귀하의 변수는 checkbox 변수를 재사용한다는 것입니다. 새로운 변수가 필요합니다. 이런 식으로 해보십시오. 또한 if else를 한 줄로 줄일 수 있습니다.

void EHArea_Clicked(Object sender, EventArgs e) 
{ 
    foreach (RepeaterItem aItem in Repeater1.Items) 
    { 
     CheckBox currentCheckBox = (CheckBox)aItem.FindControl("TownCheckbox"); 
     currentCheckBox.Checked = ((CheckBox)sender).Checked; 
    } 
} 
+0

나는 새로운 변수를 선언하고 새로운 체크 박스를 완전히 다시 시도했다. 이 두 가지 방법 모두 항상 true로 평가되는 보낸 사람 확인란의 문제를 해결하지 못했습니다. – KHeaney