2010-01-19 7 views
-1
public static CheckBox[] cb = null; 
int z=0; 
protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!IsPostBack) 
     { 
     cb = new CheckBox[count - k]; 
     //Database code......... 
     while (dr.Read())//read data from access database 
       { 
      cb[z] = new CheckBox(); 
        cb[z].Text = dr["Member_Name"].ToString(); 
         Panel2.Controls.Add(cb[z]); 
         Panel2.Controls.Add(new LiteralControl("</br>")); 
         z = z + 1; 
     } 
    } 
} 
protected void Button6_Click(object sender, EventArgs e) 
{ 
     for (int x = 0; x < cb.Length; x++)//ERROR IS HERE:Object reference not set to an instance of an object. 
     { 
     if (cb[x].Checked == true) 
       { 
       //processing check boxes  
     } 
    } 
} 
+0

시도합니다. 이렇게 읽을 수는 없습니다. – Younes

+0

cb [z] 체크 박스가 있기 때문에 당신이 어떤 체크 박스를 선택하는지 알지 못합니다. – Younes

+0

질문을 게시하고 일부 코드를 게시하지 마세요. –

답변

2

페이지가 처음로드 될 때뿐만 아니라 페이지가 호출 될 때마다 배열을 초기화해야한다.

0

올리버의 대답은 정확합니다. 모든해야 할 일은 페이지의 IsPostBack 속성을 검사하는 if 조건을 제거하는 것입니다. 이유는 다음과 같습니다. 런타임에 컨트롤을 만든 다음 ASP 페이지의 구조에 추가 할 때마다 페이지가 렌더링 될 때마다 렌더링됩니다. 클라이언트에게 전달됩니다. 페이지를 처음 만들 때 요청하면 페이지가 만들어집니다. 페이지가 서버에 다시 게시되면 컨트롤의 객체를 렌더링 순서대로 작성한 다음 이전 상태를 페이지의보기 상태에서로드해야합니다 (예 : ur의 경우 Checked 속성에 대해 true 또는 false)

1

확인란 배열은 페이지 뷰 상태의 일부가 아니므로 다시 게시 할 때 초기화되지 않습니다. 버튼을 클릭하면 포스트가 되돌아 가고 cb 배열은 초기화되지 않습니다.

대신이 작업을 수행 할 수 있습니다 : 코드 상자에 코드를하시기 바랍니다 얻을

foreach (Control ctrl in Panel2.Controls) 
     { 
      CheckBox cb = ctrl as CheckBox; 
      if (cb != null && cb.Checked) 
       { 
       //processing check boxes  
       } 
     } 
관련 문제