2012-06-12 6 views
1

다음에 대한 제안을 감사하십시오. CBL_categ라는 체크리스트에 20 개가 넘는 항목이 있습니다. 그 중 일부 항목을 선택하고 아래 코드 블록을 버튼을 눌러 연결하십시오. 결국 합계는 0입니다. 왜?체크 박스 목록에서 선택한 항목 처리

protected void FButton_Click(object sender, EventArgs e) 
     { 
      int sum=0; 

      for (int i = 1; i < 20; i++) 
      { 
       if (CBL_categ.Items[i].Selected) 
        sum = sum + 1; 
      } 
      statusLabel.Text += " " + sum; 

     } 
+1

가 디버깅을 시도 해 봤나 : 귀하를 Page_Load가 생겼

경우이 문제를 해결하기 위해 다음과 같습니다 있도록 수정? for 및 if 문에 중괄호를 추가하여 이해를 명확히합니다. 그러나 당신의 논리는 나에게 맞는 것 같습니다. 내 유일한 추측은 귀하의 항목이 어떤 이유로 선택되지 않은 것입니다. –

+0

Gracias! 나는 중괄호를 추가했지만 여전히 똑같습니다. 확인란 목록에 Page_Load 내부에 값이 채워지도록 지정해야합니다. 문제가 될 수 있습니까? 반면에이 메서드 (FButton_Click)는 Page_Load와 같은 수준에 있습니다. –

+0

이 예를 살펴보십시오. 도움이 될 수 있습니다 : http://www.ezineasp.net/post/Getting-Values-of-ASP-Net-CheckBoxList-Selected-Items.aspx –

답변

3

제공하신 코드를 사용하지 않겠습니다. 그 목록은 항상에 20 개의 항목이 있다고 가정합니다. 이로 인해 범위를 벗어난 오류가 발생할 수 있으며 모든 항목이 계산되는 것은 아닙니다. 나는 다음과 같이 사용할 것입니다 :

실제로이 방법을 사용하기 전에 ListBox를 리 바인딩하는 것으로 들립니다. 따라서 예를 들어, Page_Load 메소드가 다음과 같이 보이는 경우 :

protected void Page_Load(object sender, EventArgs e) 
{ 
     //This gets called before your event on postback and will erase your selected items. 
     BindListBox(); 
} 

의미가 있습니까?

편집 :

protected void Page_Load(object sender, EventArgs e) 
{ 
     if(!Page.IsPostBack){ 
      BindListBox(); 
     } 
} 
1

당신이 당신의 체크 박스 목록을 채울 때 페이지가 다른 (! Page.IsPostBack) {목록을 채우는} 경우 같은 당신이 의지를 Page_Load 검사를 다시 즉, 게시물에없는 경우 당신은 또한 체크되어 있는지 확인 그냥 선택을 덮어 씁니다.

관련 문제