C#错误:无法从封闭式阅读器中读取...?

时间:2012-12-19 01:16:12

标签: data-binding

我在下面有这个代码。获取数据并将data属性设置为收集的值。

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()中,我收到一条错误消息,说我无法从封闭的读者那里读取。

在我分配了使用中的值之后,当我设置了我的属性时,我没有看到为什么会抛出此错误。因此,我没有看到这是如何尝试使用封闭的读者。

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

由于延迟执行,您的查询仅在数据绑定引擎在关闭DataContext后枚举其结果时执行。

您需要在关闭DataContext之前调用.ToList()以强制立即评估它。