【发布时间】:2015-04-21 21:27:38
【问题描述】:
我正在尝试使用 printdocument 打印数据库中的数据,我将其打印到指定范围内的数据打印位置,但仍有 2 件事出错
仍然无法按预期工作的事情是
- 在打印时,如果页面几乎已用完,它会添加一个仅打印页眉的空白页
- 如果页面已满,则下一页再次从范围的第一项开始(通过使用多个列表进行修复,因为我无法弄清楚如何使用子列表制作列表)
这是我必须调用打印文档的代码
private void button3_Click(object sender, EventArgs e)//print
{
range();
try
{
if (artikel == true)
{
itemperpage = totalnumber = 0;
printPreviewDialog1.Document = printDocument1;
print = true;
printDocument1.Print();
// this.Close();
}
}
catch (Exception q) { MessageBox.Show("" + q); }
}
这是打印文档的代码
private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
if (artikel == true)
{
Font messageFont = new Font("Arial", 14, System.Drawing.GraphicsUnit.Point);
float currentY = 10;// declare one variable for height measurement
e.Graphics.DrawString(" I N K O O P A R T I K E L E N ", DefaultFont, Brushes.Black, 10, currentY);//this will print one heading/title in every page of the document
currentY += 15;
SqlCommand artprint = new SqlCommand("select * from ART WHERE ART BETWEEN @range AND @range2 ORDER BY ART ASC", Connectie.connMEVO_ART);
if (comboBox1.SelectedIndex <= comboBox2.SelectedIndex)
{
artprint.Parameters.Add("@range", SqlDbType.VarChar).Value = comboBox1.SelectedItem;
artprint.Parameters.Add("@range2", SqlDbType.VarChar).Value = comboBox2.SelectedItem;
}
else if (comboBox2.SelectedIndex <= comboBox1.SelectedIndex)
{
artprint.Parameters.Add("@range", SqlDbType.VarChar).Value = comboBox2.SelectedItem;
artprint.Parameters.Add("@range2", SqlDbType.VarChar).Value = comboBox1.SelectedItem;
}
drART = artprint.ExecuteReader();
try
{
while (totalnumber <= amount - 1 && drART.Read())
{// check the number of items
tostring();//SQL data to string
row = row + Environment.NewLine + "ART LEV LTD MVRD SGR INK CRNI " + " VALUTA KOR ";
row = row + Environment.NewLine + aa + " " + a + " " + b + " " + c + " " + d + " " + m + " " + f + " " + g + " " + h;
row = row + Environment.NewLine + "EH2 EH1 EF OMS ";
row = row + Environment.NewLine + j + " " + k + " " + l + " " + i;
row = row + Environment.NewLine;
e.Graphics.DrawString(row, DefaultFont, Brushes.Black, 50, currentY);//print each item
Debug.WriteLine("" + row);
row = "";
currentY += 80; // set a gap between every item
totalnumber += 1; //increment count by 1
if (itemperpage <= 12)
{
itemperpage += 1; // increment itemperpage by 1
e.HasMorePages = false; // set the HasMorePages property to false , so that no other page will not be added
}
else // if the number of item(per page) is more than 12 then add one page
{
itemperpage = 0; //initiate itemperpage to 0 .
e.HasMorePages = true; //e.HasMorePages raised the PrintPage event once per page .
return;//It will call PrintPage event again
}
}
}
catch (Exception ef)
{
MessageBox.Show("" + ef);
}
artprint.Dispose();
}
}
private void tostring()
{
aa = drART["ART"].ToString();
for (int ss = aa.Length; ss < 8; ss++) { aa = aa + " "; }
a = drART["LEV"].ToString();
for (int ss = a.Length; ss < 10; ss++) { a = a + " "; }
b = drART["LTD"].ToString();
for (int ss = b.Length; ss < 10; ss++) { b = b + " "; }
c = drART["MVRD"].ToString();
for (int ss = c.Length; ss < 10; ss++) { c = c + " "; }
d = drART["SGR"].ToString();
for (int ss = d.Length; ss < 10; ss++) { d = d + " "; }
m = drART["INK"].ToString();
for (int ss = m.Length; ss < 10; ss++) { m = m + " "; }
f = drART["CRNI"].ToString();
for (int ss = f.Length; ss < 10; ss++) { f = f + " "; }
g = drART["VALUTA"].ToString();
for (int ss = g.Length; ss < 3; ss++) { g = g + " "; }
h = drART["KOR"].ToString();
for (int ss = h.Length; ss < 10; ss++) { h = h + " "; }
i = drART["OMS"].ToString();
j = drART["EH2"].ToString();
for (int ss = j.Length; ss < 3; ss++) { j = j + " "; }
k = drART["EH1"].ToString();
for (int ss = k.Length; ss < 3; ss++) { k = k + " "; }
l = drART["EF"].ToString();
for (int ss = l.Length; ss < 10; ss++) { l = l + " "; }
}
【问题讨论】:
-
您总是在每次进入 PagePrint 时重新从数据库读取。 - 您的数字有冲突:if (itemperpage
-
仅供参考,PrintDocument 不是 C# 的一部分。它是 .NET Framework 的一部分。
-
@JohnSaunders 我猜你知道的越多。但我想它对标签等很有用,所以谢谢
-
@TaW 我对某些部分使用了在线教程,这就是教程中的内容,所以我不太知道如何更改它,所以它确实将所有项目构成了范围,并且评论是有点老,所以生病看看其他人,看看是否有更多冲突或没有意义
标签: c# sql winforms printing printdocument