重叠打印IEnumerable集合

时间:2017-07-12 15:25:00

标签: c# printing ienumerable

我正在将XML文件的内容读入IEnumerable集合(数组)中,我需要在单独的页面上打印每个迭代(类似XML数据的块)。

我正在使用Print()函数和e.HasMorePages。我的问题是foreach循环遍历每个打印的IEnumerable集合的所有迭代,所以我打印正确数量的页面,但每个页面包含所有迭代,而不是每页一个。任何人都可以给我一个解决方案的想法或更好的方法来管理这个过程吗?

这是代码的相关部分......

// Print Employee General info
        foreach (EmployeeInfo itm in GEmployeeXGD.GetEmployeeGeneralData())
        {
            try
            {
                empFirstName = itm.FirstName;
                empLastName = itm.LastName;
                empMidInitial = itm.MidInitial;
        etc…

                // Set field coordinates for each employee
                // ******* Employee's general information ********
                PointF empFirstNameLoc = new PointF(430, 271);
                PointF empLastNameLoc = new PointF(600, 271);
                PointF empMidInitialLoc = new PointF(563, 271);
        etc…
                // Send field text data
                using (Font courierFont = new Font("Courier", 10, FontStyle.Bold))
                {
                    e.Graphics.DrawString(empFirstName, courierFont, Brushes.Black, empFirstNameLoc);
                    e.Graphics.DrawString(empLastName, courierFont, Brushes.Black, empLastNameLoc);
                    e.Graphics.DrawString(empMidInitial, courierFont, Brushes.Black, empMidInitialLoc);
        etc…
                }
            }
            catch (Exception error) { MessageBox.Show(error.ToString()); }
            e.HasMorePages = (records < Globals.totalRecordCount);
        }

这对Joel很有帮助,谢谢。

GEmployeeXGD用一种方法尊重一个类。该方法读入我需要的XML数据并填充IEnumerable&lt;&gt;集合作为一个数组。这是方法..

        public Array GetEmployeeGeneralData()
    {
        // XML source file
        var xmlEmployeeFile = File.ReadAllText("Corrections.xml");
        XDocument employeeDoc = XDocument.Parse(xmlEmployeeFile);
        XElement w2cEmployeeDat = employeeDoc.Element("CorrectedDAta");
        EmployeeInfo[] employeeGenInfo = null;
        if (w2cEmployeeDat != null)
        {
            IEnumerable<XElement> employeeRecords = w2cEmployeeDat.Elements("Employee");
            try
            {
                employeeGenInfo = (from itm in employeeRecords
                                   select new EmployeeInfo()
                                   {
                                       FirstName = (itm.Element("FirstName") != null) ? itm.Element("FirstName").Value : string.Empty,
                                       LastName = (itm.Element("LastName") != null) ? itm.Element("LastName").Value : string.Empty,
                                       MidInitial = (itm.Element("MidInitial") != null) ? itm.Element("MidInitial").Value : string.Empty,
            etc…
                                   }).ToArray<EmployeeInfo>();
            }
            catch (Exception) { MessageBox.Show(error.ToString());  }
        }
        Globals.SetRecordCount(employeeGenInfo.Count<EmployeeInfo>());
        recordCount = Globals.totalRecordCount;

        return employeeGenInfo;
    }

1 个答案:

答案 0 :(得分:0)

您需要跟踪您所在的页面,然后执行以下操作:

var items = GEmployeeXGD.GetEmployeeGeneralData().Skip( (pageNumber-1) * numberItemsPerPage).Take(numberOfItemsPerPage); 
foreach (EmployeeInfo itm in items)
{
    //...
}

如果你可以避免一遍又一遍地调用相同的方法,并且在各个页面中保持相同的IEnumerable,那就更好了。但为了证明这一点,我需要查看该方法所在的类的更多背景,并了解GEmployeeXGD如何工作的更多信息。