假設我有一個包含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