2012-12-21 1 views
2

개체의 인스턴스로 설정되지 않았습니다 개체 :
What is a NullReferenceException in .NET?웹 양식을 참조 가능한 중복이

내가 필요로 한 페이지에 레이블의 무리가 업데이트 될 때 페이지로드. 나는 라벨의 ID가 "Label1"- "Label8"이라는 것을 알고 있지만 다음 스 니펫을 실행하면 "객체 참조가 객체의 인스턴스로 설정되지 않습니다."라는 메시지가 나타납니다. Label.Text 줄에 레이블을 찾을 수 없다고 가정합니다.

int i = 1; 
foreach (string sel in selArr) 
{ 
    string labelId = "Label" + i.ToString(); 
    MySqlCommand cmd = new MySqlCommand(sel, conn); 
    MySqlDataReader reader = cmd.ExecuteReader(); 
    while (reader.Read()) 
    { 
     Label label = (Label)FindControl(labelId); 
     label.Text = "(" + reader["c"] + ")"; 
    } 
    reader.Close(); 
    i++; 
} 

저는 아직 C#을 처음 사용하기 때문에 그다지 많이 시도하지 않았습니다.

+0

거의 모든 NullReferenceException의 경우가 같습니다. 일부 힌트는 "[.NET의 NullReferenceException은 무엇입니까?] (http://stackoverflow.com/questions/4660142/what-is-a-nullreferenceexception-in-net)"를 참조하십시오. –

답변

3

FindControl 메서드는 페이지의 최상위 계층만을 검색합니다. 전체 페이지를 반복적으로 검색하지 않습니다.

+0

고마워, 나는 무언가를 알아 내야 할 것 같아, 아마 긴 길을 가다가 스위치 또는 뭔가를 할 수있을 것이다. – smarble

1

당신이했던 것과 같은 양식 ID에 액세스 할 수 있습니다. 일어날 수있는 일종의 부패가있을 수 있습니다. 아래의 것들을 시도하십시오.

해결 방법 1 : 파일이 labels.If 거기 후 수동으로 추가 아니에요 라인의 종류 아래 가진 당신의 designer.cs 여부를

확인합니다.

protected global::System.Web.UI.WebControls.Label Label3; 

해결 방법 2

  1. designer.cs는
  2. 바로 부모 영문 파일을 클릭하여 파일 삭제를 선택
  3. 이것은 designer.cs을 다시해야한다 "웹 응용 프로그램으로 변환" 모든 해당 항목이 들어있는 파일

이것은 당신에게 도움이 될 것입니다. 그것은 같은 것,

protected Control RecursiveFindControl(Control targetControl, string findControlId) 
    { 
     if (targetControl.HasControls()) 
     { 
      foreach(Control childControl in targetControl.Controls) 
      { 
       if (childControl.ID == findControlId) 
       { 
        return childControl; 
       } 

       RecursiveFindControl(childControl, findControlId); 
      } 
     } 

     return null; 
    } 

사용하려면 : 레이블 컨트롤이 다른 컨트롤 내에있는 경우

+0

"웹 응용 프로그램으로 변환"이 사용 가능한 옵션이 아닌 경우를 제외합니다. – vapcguy

+0

designer.cs 파일을 삭제하지 않고 프로젝트를 다시 빌드하면 designer.cs도 다시 빌드됩니다. 삭제하면 삭제되지 않습니다. – vapcguy

0

, 당신은 당신의 목표를 찾기 위해 페이지에있는 모든 컨트롤을 통해 재귀하기 위해 다음과 같은 방법을 사용할 수 있습니다 이 :

Label label = (Label)RecursiveFindControl(Page, labelId); 
관련 문제