Je suis en train de lire le contenu d'un fichier XML dans une collection IEnumerable (tableau) et j'ai besoin d'imprimer chaque itération (bloc de données XML similaires) sur une page séparée. J'utilise la fonction Print() et les pages e.HasMorePages. Mon problème est que le foreach boucle toutes les itérations de la collection IEnumerable pour chaque impression, donc j'imprime le nombre correct de pages, mais chaque page contient toutes les itérations les unes sur les autres au lieu d'une par page. Quelqu'un peut-il me donner une idée d'une solution ou d'une meilleure façon de gérer ce processus?Impression en superposition d'une collection IEnumerable
est ici la partie pertinente du code ...
// 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);
}
C'est utile Joel, merci. GEmployeeXGD vénère une classe avec une seule méthode.
La méthode lit dans les données XML dont j'ai besoin et remplit la collection IEnumerable <> en tant que tableau. Voici la méthode ..
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;
}
La fonction Ignorer n'est pas disponible pour GEmployeeXGD.GetEmployeeGeneralData(). Si j'affecte comme indiqué (var items = GEmployeeXGD.GetEmployeeGeneralData();) alors items contient tous les éléments du tableau des collections (par exemple employeeInfo [0], employeeInfo [1], etc). Existe-t-il un moyen d'indexer ces éléments afin que le foreach n'en utilise qu'un seul à la fois? – David