2009-10-12 2 views
1

내 asp.net 응용 프로그램에서 linq2sql 사용하고 있습니다. linq2sqldatasource 객체와 함께 사용할 때 모든 것이 작동합니다. 즉, 아무 것도없는 코드를 detailsview 컨트롤에 바인딩한다는 의미입니다. 내 생각은 detailscontrol에서 행을 클릭하면 전자 편집/데이터를 편집 할 수있는 customwebcontrol이 같은 페이지에로드/추가됩니다. 그 customcontrol에서 드롭 다운을 채우기 위해 일부 항목을로드해야하고 그로드 이벤트에서 나는 작동하지 않는 follwoing 코드를 가지고 있고 왜 볼 수 없는지에 대해 알았습니다. 오브젝트 널 참조 예외가 발생합니다.Linq 2 SQL - 수동 데이터 바인딩이 작동하지 않습니다

예 :

 

     protected void Page_Load(object sender, EventArgs e) 
     { 
      if (!Page.IsPostBack) 
      { 
       //loads combobox with organizations 
       using (MyDataContext cdc = new MyDataContext()) 
       { 
        var queryOrgs = from p in cdc.orgUnits 
            select p; 

        //Organizations 
        dropDownOrgs.DataSource = queryOrgs.ToList(); 
        dropDownOrgs.DataValueField = "orgUnitID"; 
        dropDownOrgs.DataTextField = "orgUnitName"; 
        dropDownOrgs.DataBind(); 
       } 
      } 
     } 

누구든지 happenning 무엇 알아? 내가 나 자신에 의해 모든 바인딩 할 때 수동으로 무언가가 작동하지 않습니다 같이 보인다 :(

당신이 나를 도울 수 있기를 바랍니다.

감사합니다. 텍사스

+1

ToList() 메소드를 적용하지 않으면 어떻게됩니까? –

+0

두 분 모두 고마워요! 사실, ToList()는 queryObject를 볼 수 있고 레코드를 포함하고 있기 때문에 데이터베이스에서 결과를 가져 오지만 다른 한편으로는 null 참조 예외를 계속 발생시킵니다. 더 이상의 아이디어가 있습니까? 이상한 점은 linq2sql 데이터 소스 컨트롤을 사용하면 바인딩에 문제가 있다는 것입니다. [편집] 실제로 null입니다 dropdownlist 컨트롤입니다 .... 그것은 ...로드 이벤트에서 일반적으로 컨트롤을 인스턴스화해야합니다 오른쪽? br, Teixeira –

+0

코드에 주석을 달았습니다. 음, 별도의 메소드에 넣고 다르게 호출하면 바인딩됩니다. 따라서로드 이벤트가 발생하면 어떤 이유로 든 드롭 다운 목록이 생성되지 않습니다. 질문/의심의 여지가 발생 : webcontrol 또는이 경우 mycustomcontrol 가정 때 속성을 볼 수 = false를 서버 측에서 처리되지? 이 경우에도로드 이벤트가 발생하지 않아야합니다 ... 감사. br, Teixeira –

답변

1

@Chalkey이 올바른 것입니다. 나는이 오류로 실행 한 LINQ to SQL은 "게으른"쿼리를 수행하기 때문에 실제로 쿼리를 수행하기 위해 마지막 순간까지 기다립니다.

이렇게하면 page_load 함수가 쿼리를 수행 할 때까지 기다릴 수 있습니다. 따라서 using 문을 사용하지 마십시오.)

따라서 데이터를 .ToList()를 사용하여 목록으로 반환하면 쿼리를 즉시 실행할 수 있습니다.

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!Page.IsPostBack) 
    { 
     //loads combobox with organizations 
     using (MyDataContext cdc = new MyDataContext()) 
     { 
      List<orgUnit> queryOrgs = (
       from p in cdc.orgUnits 
       select p 
       ).ToList(); 

      //Organizations 
      dropDownOrgs.DataSource = queryOrgs.ToList(); 
      dropDownOrgs.DataValueField = "orgUnitID"; 
      dropDownOrgs.DataTextField = "orgUnitName"; 
      dropDownOrgs.DataBind(); 
     } 
    } 
} 
관련 문제