XMLファイルの内容をIEnumerableコレクション(配列)に読み込み、別のページに各繰り返し(XMLデータのようなブロック)を出力する必要があります。IEnumerableコレクションの重複印刷
私はPrint()関数とe.HasMorePagesを使用しています。私の問題は、foreachは各印刷のIEnumerableコレクションのすべての反復をループするので、正しいページ数を印刷していますが、各ページにはページごとに1つではなくすべての繰り返しが含まれています。誰でも私にこのプロセスを管理するためのソリューションまたはより良い方法のアイデアを教えてもらえますか?
はここで...便利ジョエル、おかげだ
// 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);
}
コードの該当部分です。
GEmployeeXGDは、1つのメソッドでクラスを継承します。このメソッドは、必要なXMLデータを読み込み、IEnumerable <コレクションを配列として取り込みます。ここでは、このような何か、あなたがオンになっているどのページを追跡し、する必要がある方法..
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;
}
GEmployeeXGD.GetEmployeeGeneralData()ではスキップは使用できません。指定された通りに(var items = GEmployeeXGD.GetEmployeeGeneralData();)割り当てると、アイテムにはコレクションのすべての配列要素(employeeInfo [0]、employeeInfo [1]など)が含まれます。 foreachが一度に1つだけを使用するようにこれらの要素をインデックスする方法はありますか? – David