VB.NET ListView绑定数据库数据打印预览文字重叠问题求助
问题原因
- 同一行所有ListView子项的绘制X坐标都固定为150,不同列内容完全重叠
- 打印按钮逻辑顺序错误:先弹出预览对话框再设置页面参数,预览无法生效修改后的配置
- 冗余绘制:
Itm.Text与Itm.SubItems(0)内容完全一致,重复绘制了第一列内容
修复后的代码
1. 打印按钮点击事件
Private Sub btnprint_Click(sender As Object, e As EventArgs) Handles btnprint.Click ' 先设置打印参数,再加载预览 With PrintDocument1 .PrinterSettings.DefaultPageSettings.Landscape = False End With PrintPreviewDialog1.Document = PrintDocument1 PrintPreviewDialog1.ShowDialog() End Sub
注:移除了预览后直接调用Print()的逻辑,避免用户点预览取消后仍自动触发打印,如需直接打印可在预览对话框的打印按钮操作,或自行调整逻辑
2. PrintPage打印事件
Private Sub PrintDocument1_PrintPage(sender As Object, e As Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage Dim H As Integer = 50 ' 定义每列的X坐标,可根据实际列宽自行调整数值 Dim colXPos As Integer() = {50, 150, 250, 350, 450, 550, 650, 750, 850, 950} ' 打印标题 e.Graphics.DrawString("PRINT", New Drawing.Font("Times New Roman", 10), Brushes.Black, 50, H) H += 30 ' 标题和内容之间留空 For Each Itm As ListViewItem In ListView1.Items ' 绘制第一列(ProductID) e.Graphics.DrawString(Itm.Text, New Drawing.Font("Times New Roman", 10), Brushes.Black, colXPos(0), H) ' 循环绘制剩余9列 For i As Integer = 1 To 9 e.Graphics.DrawString(Itm.SubItems(i).Text, New Drawing.Font("Times New Roman", 10), Brushes.Black, colXPos(i), H) Next H += 20 ' 每行间距 Next End Sub
如果列内容过长超出页面范围,可以调整colXPos的数值,或者开启页面横向打印,将Landscape属性设为True即可
内容的提问来源于stack exchange,提问作者NIX
相关产品推荐
相关产品推荐

