Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 使用printdocument打印多页_Vb.net_Visual Studio 2010_Printdocument - Fatal编程技术网

Vb.net 使用printdocument打印多页

Vb.net 使用printdocument打印多页,vb.net,visual-studio-2010,printdocument,Vb.net,Visual Studio 2010,Printdocument,我正在制作一个程序:在datagridview中选择几行后,它会检查是否选择了1行或更多行。如果一份,则在一页上打印两份报告(一份报告=半页);如果多份:每页打印两份报告,打印所需的页数。问题是,我的代码打印相同报告的4531456453页(第一行和第二行):/ 代码的基本示例: yPos = 0 Do While tmpI < mydatagridview.SelectedRows.Count - 1 For Each selectedrow As DataGridViewRow In

我正在制作一个程序:在datagridview中选择几行后,它会检查是否选择了1行或更多行。如果一份,则在一页上打印两份报告(一份报告=半页);如果多份:每页打印两份报告,打印所需的页数。问题是,我的代码打印相同报告的4531456453页(第一行和第二行):/

代码的基本示例:

yPos = 0
Do While tmpI < mydatagridview.SelectedRows.Count - 1
For Each selectedrow As DataGridViewRow In mydatagridview.SelectedRows
    Dim data as string = mydatagridview.SelectedRows(selectedrow.index).cells(1).value
    Dim data2 as string = mydatagridview.SelectedRows(selectedrow.index).cells(12).value

    e.graphics.drawstring(data, drawfont, (e.graphics.pagebound.width/2-e.graphics.measurestring(data, drawfont).width/2), 25+yPos)
    e.graphics.drawstring(data2, drawfont, (e.graphics.pagebound.width/2-e.graphics.measurestring(data2, drawfont).width/2), 50+yPos)
    yPos += e.pagebounds.height/2
    tmpI += 1 
    If yPos > e.pagebound.height/2 Then
        h = 0
        e.HasMorePages = true
        Exit Sub
    End If
Next selecedrow
Loop
yPos=0
在tmpIe.pagebound.height/2,则
h=0
e、 HasMorePages=true
出口接头
如果结束
下一个selecedrow
环

现在,正如我前面所说,它打印了无限多的页面,其中包含索引为0和1的SelectedRows中的数据和数据2。

希望这对

Sub PrintIt(ByVal e As System.Drawing.Printing.PrintPageEventArgs, byval nRow as Integer,ByVal nY As Integer) 

    Dim data as string = mydatagridview.SelectedRows(nRow).cells(1).value
    Dim data2 as string = mydatagridview.SelectedRows(nRow).cells(12).value

    e.graphics.drawstring(data, drawfont, (e.graphics.pagebound.width/2-e.graphics.measurestring(data, drawfont).width/2), 25+nY)
    e.graphics.drawstring(data2, drawfont, (e.graphics.pagebound.width/2-e.graphics.measurestring(data2, drawfont).width/2), 50+nY)

End Sub
还有你代码中的一些修改

yPos = 0

If mydatagridview.SelectedRows.Count = 1

    PrintIt(e,0,yPos)

    yPos += e.pagebounds.height/2

    PrintIt(e,0,yPos)

Elseif mydatagridview.SelectedRows.Count > 1

Dim x,n As Integer

    For x = 0 to mydatagridview.SelectedRows.Count-1
        If n = 2 Then
             e.HasMorePages = true
             n = 0
             yPos = 0
         End If 

         PrintIt(e,x,yPos)
         yPos += e.pagebounds.height/2

         n += 1
    Next

End If