2012-12-19 58 views
1

我下面有這段代碼。獲取數據並將數據屬性設置爲收集的值。C#錯誤:無法從已關閉的閱讀器讀取...?

public struct TrblShootData 
    { 
     public List<string> Logins; 
     public IEnumerable<Hieracrhy> Hierarchy; 
     public IEnumerable<EmployeeTeam> EmpTeam; 
    } 

    public TrblShootData TroubleShootData 
    { 
     get; 
     private set; 
    } 

class DataGetter 
{ 
public void GetData(string FirstName, string LastName, string Login, string Email, bool isFirstName, bool isLastName, bool isLogin, bool isEmail) 
    {   
     List<string> logins = null; 
     IEnumerable<Hieracrhy> hier = null; 
     IEnumerable<EmployeeTeam> tmemp = null; 

     TrblShootData tsData = new TrblShootData(); 

     queries q = BuildQuery(FirstName, LastName, Login, Email, isFirstName, isLastName, isLogin, isEmail); 

     if (q.isValidQueries) 
     { 
      DataContext1 mscDB = new DataContext1(); 

      using (DataContext2 opsDB = new DataContext2()) 
      {      
       tmemp = opsDB.ExecuteQuery<EmployeeTeam>(q.qryEmployeeTeam); 

      } 

      using (DataContext3 rptDB = new DataContext3()) 
      {      
       hier = rptDB.ExecuteQuery<Hieracrhy>(q.qryHierarchy); 

       if (hier != null) 
       { 
        logins = hier.Select(s => s.SalesRepLogin).Distinct().ToList(); 
       } 

      } 

      tsData.EmpTeam = tmemp.Select(r=>r); 
      tsData.Hierarchy = hier.Select(r => r); 
      tsData.Logins = logins.Select(r => r).ToList(); 

      TroubleShootData = tsData; 

     }//if     
    } 
    } 

從另一個類我試圖做到這一點:

tshtr.GetData(txtFirstName.Text, txtLastName.Text, txtLogin.Text, txtEmail.Text, chkFirstName.Checked, chkLastName.Checked, chkLogin.Checked, chkEmail.Checked); 

     gvEmpTeams.DataSource = tshtr.TroubleShootData.EmpTeam; 
     gvHierarchy.DataSource = tshtr.TroubleShootData.Hierarchy; 

     gvEmpTeams.DataBind(); 
     gvHierarchy.DataBind(); 

但在的DataBind()我得到一個錯誤說我不能從一個封閉的閱讀器讀取。

我沒有看到爲什麼它會拋出這個錯誤,當我已經在使用usings中賦值後設置了我的屬性。所以我沒有看到這是如何嘗試使用封閉的閱讀器。

感謝您的幫助!

回答

1

由於延遲執行,您的查詢僅在數據綁定引擎枚舉其結果並在關閉DataContext之後執行。

在關閉DataContext之前,您需要先撥打.ToList()以強制立即對其進行評估。

+0

就是這樣!謝謝! – user1013388

相關問題