假设我有一个包含20行的表格,并且我想在每个页面上打印5个员工姓名。共4页。C#从SQL结果中打印多个页面
我当前的代码存在的问题是,它试图在第一页上显示每个员工的姓名。另外它以无限循环结束。 这是我的代码:
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;
}
我在这里错过了什么?如何在每个页面上只显示5个员工姓名,直到SQL结果表完成?
当您将HasMorePages设置为true时,您需要中断条件,您需要在启动下一页时从DataTable行中正确的偏移量开始,并且需要将itemperpage重置为零。 – john