Sagen wir, ich habe eine Tabelle mit 20 Zeilen, und ich möchte 5 Mitarbeiternamen auf jeder Seite drucken. Insgesamt 4 Seiten.C# Drucken mehrerer Seiten aus SQL-Ergebnis
Das Problem mit meinem aktuellen Code ist, dass es versucht, jeden Mitarbeiternamen auf der ersten Seite anzuzeigen. Zusätzlich endet es in einer Endlosschleife. Dies ist mein Code:
DataTable dt = new DataTable();
private void FillDataTable()
{
SqlConnection sqlConnection = GetConnection();
SqlCommand cmd = new SqlCommand();
SqlDataReader reader;
string query =
@"SELECT * FROM EMPLOYEES ORDER BY ID";
cmd.CommandText = query;
cmd.CommandType = CommandType.Text;
cmd.Connection = sqlConnection;
sqlConnection.Open();
reader = cmd.ExecuteReader();
if (reader.HasRows)
{
dt.Load(reader);
}
else
{
Console.WriteLine("No rows found.");
}
reader.Close();
sqlConnection.Close();
}
private void printDocument_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
foreach(DataRow row in dt.Rows)
{
e.Graphics.DrawString(row[4].ToString(), new Font("Arial", 12, FontStyle.Bold), Brushes.Black, e.MarginBounds.Left, y, new StringFormat());
y += 100;
if (itemperpage < 5)
{
itemperpage += 1;
e.HasMorePages = false;
}
else
{
e.HasMorePages = true;
}
}
}
private void printDocument_BeginPrint(object sender, System.Drawing.Printing.PrintEventArgs e)
{
y = 80;
itemperpage = 0;
}
Was ich hier fehlt? Wie werden nur 5 Mitarbeiter-Namen auf jeder Seite angezeigt, bis die SQL-Ergebnistabelle fertig ist?
Sie brauchen eine Pause Zustand, wenn Sie HasMorePages auf true setzen, müssen Sie von der korrekten in den Datatable Reihen versetzt starten, wenn Sie auf der nächsten Seite beginnen, und Sie müssen itemperpage auf Null setzen. – john