e.HasMorePages 的分页

kaizi_sun 2009-11-20 11:09:53
我用e.HasMorePages = true分页, 内容分页,但重叠打印在第一页。 跟踪测试发现也2次进入printpage事件, 说明e.HasMorePages = true起作用的,就是不产生空白页。 请高手提示下,第3帖了
...全文
242 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
kaizi_sun 2009-11-20
  • 打赏
  • 举报
回复
我发现是2页一粘连, 不知道为啥2页后 就自动把e.HasMorePages置为false了。奇怪
kaizi_sun 2009-11-20
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 lzsh0622 的回复:]
试试:
(1) 根踪一下,是否重复打印了,可以打印下一页时去掉已打印的内容行.
  this.printDS.Tables[0].Rows.RemoveAt(i);


(2) 打印下页前 Graphics.Clear()

[/Quote]

单步执行了,但是发现没有重复啊,只是分页后发现没 打印那个界面没 send 2。一直是send 1,说明没分页。但e.HasMorePages = true;已经循环,第二次运行printpage了。理解不了
风骑士之怒 2009-11-20
  • 打赏
  • 举报
回复
这个没搞过,UP
kaizi_sun 2009-11-20
  • 打赏
  • 举报
回复

if (circle == 0)
{
// count = 0;
if (!e.HasMorePages)
{
ds = dbTotal.QueryData("select * from Billlist where stant = 'takeaway'", "list");
y = y + 10;
e.Graphics.DrawString("No", new Font("verdana", 8, FontStyle.Regular), Brushes.Black, 0, y, drawFormat1);
x = x + 45;
e.Graphics.DrawString("TbNo", new Font("verdana", 8, FontStyle.Regular), Brushes.Black, x, y);
x = x + 75;
e.Graphics.DrawString("Time", new Font("verdana", 8, FontStyle.Regular), Brushes.Black, x, y);
x = x + 130;
e.Graphics.DrawString("Tolprice", new Font("verdana", 8, FontStyle.Regular), Brushes.Black, x, y, drawFormat);
count++;
x = 2;
y = y + 20;
lineQty = ds.Tables["list"].Rows.Count + 5;
}
while (count < linesPerPage && lineNo < lineQty)
{
if (lineNo < ds.Tables["list"].Rows.Count) //由于lineNo用于表中的下标值,因此需要加上该判断
{
string no = ds.Tables["list"].Rows[lineNo][7].ToString();
string tabno = ds.Tables["list"].Rows[lineNo][5].ToString();
string time = ds.Tables["list"].Rows[lineNo][3].ToString().Substring(0, 10);
string tolprice = ds.Tables["list"].Rows[lineNo][1].ToString();
e.Graphics.DrawString(no, new Font("verdana", 8, FontStyle.Regular), Brushes.Black, x, y, drawFormat1);
x = x + 50;
e.Graphics.DrawString(tabno, new Font("verdana", 8, FontStyle.Regular), Brushes.Black, x, y);
x = x + 50;
e.Graphics.DrawString(time, new Font("verdana", 8, FontStyle.Regular), Brushes.Black, x, y);
x = x + 150;
e.Graphics.DrawString(tolprice, new Font("verdana", 8, FontStyle.Regular), Brushes.Black, x, y, drawFormat);
x = 2;
y = y + 15;
count++;
}
lineNo++;
}
if (lineQty > lineNo)
{
count = 0;
printingPageNo++;
circle = 0;
e.HasMorePages = true;
}
else
{
e.Graphics.DrawString(line6, new Font("verdana", 8, FontStyle.Regular), Brushes.Black, 0, y);//-----线
count++;
e.HasMorePages = false;
}
}

我的打印分页函数,是模仿 c#高级编程书里的呀。真的不明白了
lzsh0622 2009-11-20
  • 打赏
  • 举报
回复
试试:
(1) 根踪一下,是否重复打印了,可以打印下一页时去掉已打印的内容行.
this.printDS.Tables[0].Rows.RemoveAt(i);


(2) 打印下页前 Graphics.Clear()
kaizi_sun 2009-11-20
  • 打赏
  • 举报
回复
真的一个都不知道啊? 奇怪哦
kaizi_sun 2009-11-20
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 lzsh0622 的回复:]
楼主看一下,你另一贴11楼.
[/Quote]
en 谢谢啊,我看了。可是没什么头绪。我需要在他们2个相等时停止分页
lzsh0622 2009-11-20
  • 打赏
  • 举报
回复
楼主看一下,你另一贴11楼.
kaizi_sun 2009-11-20
  • 打赏
  • 举报
回复
自己回答下,有相同问题的人希望会给你帮助,别象我找了好久,也想了好久!现在解决了,根据解决的方案回推得到结果,不知道对不对,请高手指点。
e.HasMorePages = true;时分页,其实是给内容分页,循环判断条件,但并不产生空白页,直到循环完才产生,自己变成e.HasMorePages = false,然后产生第2页

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧