2011-01-18 1 views
0

비즈니스 계층 메서드를 데이터 원본으로 사용하는 사용자 계층에 gridview가 있고 페이지 뷰 및 정렬을 지원하는 GridView가 필요합니다. 메서드에서 Ienumerable을 반환하면 모든 데이터가 반환됩니다. Take/Skip을 사용하여 페이지의 가치 만 가져 오면 gridview는 많은 데이터 페이지가 있음을 인식하지 못합니다.비즈니스 계층의 LINQ 사용자 계층의 페이징/정렬 그리드 뷰

Ienumerable을 IQueryable로 변경하면 데이터가 이미 삭제 되었기 때문에 DataBind()가 실패합니다. 이 문제는 쿼리가 실제로 실행될 때와 관련이 있으며 쿼리에 적용 할 필터와 관련이있을 수 있습니다 (아래 참조).

사용자 계층 코드 :

grdSelectedQuestionaires.DataSource = assessment.FilteredAssessmentList(filter); 
grdSelectedQuestionaires.DataBind(); <-- Fails - "Cannot access a disposed object" 

비즈니스 계층 코드 :

public IQueryable<Assessment> FilteredAssessmentList(AssessmentSearchFilter filter) 
    { 
     using (PAQcDataLayerDataContext dc = new PAQcDataLayerDataContext()) 
     { 
      var rows = (
        from a in dc.vPAQSummaries 
        select new Assessment() 
        { 
         PAQNumber = a.PAQNumber.Trim(), 
         CustomerID = (int)a.CustomerID, 
         Department = a.Department.Trim(), 
         CustomerName = a.CustomerName.Trim(), 
         DOTNumber = a.DOTNumber.Trim(), 
         OrgName = a.OrgName.Trim(), 
         DateEntered = a.DateEntered, 
         GroupNumber = a.GroupNumber.Trim(), 
         JobTitle = a.JobTitle.Trim(), 
         FileNames = a.FileNames.Trim(), 
         AnalystType = a.AnalystType.ToString(), 
         Incumbents = a.Incumbents, 
        }); 

      // Filter by Customer ID 
      if (filter.CustomerID > 0) 
      { 
       rows = rows.Where(r => r.CustomerID == filter.CustomerID); 
      } 
      else 
      { 
       rows = rows.Where(r => r.CustomerID != null); 
      } 

      // Filter by DOT Number 
      if (!string.IsNullOrEmpty(filter.DOTNumberFrom)) 
      { 
       if (string.IsNullOrEmpty(filter.DOTNumberTo)) 
       { 
        rows = rows.Where(r => r.DOTNumber == filter.DOTNumberFrom); 
       } 
       else 
       { 
        rows = rows.Where(r => r.DOTNumber.CompareTo(filter.DOTNumberFrom) >= 0 
         && r.DOTNumber.CompareTo(filter.DOTNumberTo) <= 0); 
       } 
      } 

      // Filter by OrgName 
      if (!string.IsNullOrEmpty(filter.OrgName)) 
      { 
       rows = rows.Where(r => r.OrgName.StartsWith(filter.OrgName)); 
      } 

      // Filter by Group 
      if (!string.IsNullOrEmpty(filter.GroupNumberFrom)) 
      { 
       if (!string.IsNullOrEmpty(filter.GroupNumberTo)) 
       { 
        rows = rows.Where(r => r.GroupNumber == filter.GroupNumberFrom); 
       } 
       else 
       { 
        rows = rows.Where(r => r.GroupNumber.CompareTo(filter.GroupNumberFrom) >= 0 
         && r.GroupNumber.CompareTo(filter.GroupNumberTo) <= 0); 
       } 
      } 

      if (filter.Skip > 0) 
      { 
       rows = rows.Skip(filter.Skip); 
      } 
      if (filter.Take > 0) 
      { 
       rows = rows.Take(filter.Take); 
      } 
      else 
      { 
       rows = rows.Take(100); 
      } 

      return rows.Distinct(); 
     } 
    } 
} 

답변

0

페이징 문제는 사용 문에 의해 발생했다. 이 변경이에

using (PAQcDataLayerDataContext dc = new PAQcDataLayerDataContext()) 
{ 
... 
} 

:

PAQcDataLayerDataContext dc = new PAQcDataLayerDataContext(); 

제작 페이징 작업을. 이제 분류 작업이 어떻게 작동하는지 파악해야합니다.

+0

밥, 바로이 점심 식사에 대해 내가 말한 것입니다. 당신이 그것을 알아낼 수 있었기 때문에 다행! – andleer