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();
}
在多页上打印数据库值时,C#打印无限进行
•
问答
lbanzg99 回答:在多页上打印数据库值时,C#打印无限进行
- 尝试使用语句,而不是打开和关闭连接 每次。
- 不要尝试一次获取所有cash_bill行 查询。尝试使用Top()关键字限制结果。
- 细化查询 通过在查询中添加ID> X条件。
- 生成查询 并在while循环内进行调用。并更新X 参数是查询结果中最大ID值。
示例查询:
string query = string.Format(“从cash_bill的SELECT TOP({0}),其中id> {1}”,maxRowPerPage,maxRowId);
在每个循环结束时更新maxRowId。 (PS:我假设这些值按ID排序)
这种方法将减少代码的时间和代码复杂度,并提高sql连接的使用效率。
此外,您可能会考虑使用多个线程。通过此改进,由于您将通过单个查询收集单个页面的数据,因此您可以同时操作和打印数据。
希望这会有所帮助。