private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
int kx = 25;
int ky = 50;
con.Close();
con.Open();
String sql = "SELECT * from cash_bill";
cmd = new OleDbCommand(sql, con);
dr1 = cmd.ExecuteReader(CommandBehavior.CloseConnection);
while (dr1.Read())
{
e.Graphics.DrawString(dr1[7].ToString(), printFont, Brushes.Black, kx + 75, ky + 5);
if (itemperpage < 29)
{
itemperpage += 1;
e.HasMorePages = false;
ky = ky + 50;
}
else
{
itemperpage = 0;
e.HasMorePages = true;
return;
}
}
con.Close();
}
示例查询:
字符串查询= string.Format(“从cash_bill的SELECT TOP({0}),其中id> {1}”,maxRowPerPage,maxRowId);
在每个循环结束时更新maxRowId。 (PS:我假设值按ID排序)
此方法将减少代码的时间和代码复杂性,并提高sql连接的使用效率。
此外,您可能会考虑使用多个线程。通过此改进,由于您将通过单个查询收集单个页面的数据,因此您可以同时操作和打印数据。
希望这会有所帮助。