private void btnPrint_Click(object sender, EventArgs e)
        {
            printDocument1.PrintPage += new PrintPageEventHandler(printDocument1_PrintPage);                   
            printDocument1.DefaultPageSettings.Landscape = true;             PaperSize pkCustomSize1 = new PaperSize("6cun", 1200, 400); 
            printDocument1.DefaultPageSettings.PaperSize = pkCustomSize1;
            printPreviewDialog1.Document = printDocument1;  
            printPreviewDialog1.ShowDialog();        }        private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
        {
            Graphics g = e.Graphics;
            DataTable dt = (DataTable)this.dgvSelect.DataSource;            int StartX = 50;
            int StartY = 50;
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                g.DrawString("XXXXDM", new Font("Arial", 9), Brushes.Black, StartX, StartY + 50);
                g.DrawString("XXXX " + dt.Rows[i][4].ToString(), new Font("Arial", 9), Brushes.Black, StartX, StartY + 70);
                g.DrawString(dt.Rows[i][5].ToString(), new Font("Arial", 9), Brushes.Black, StartX, StartY + 90);
                g.DrawString(dt.Rows[i][1].ToString() + "XXXXXXXXX", new Font("Arial", 9), Brushes.Black, StartX + 70, StartY + 110);                StartX = StartX + 95;                StartX = 50;
                StartY += 100;
            }这是我的打印代码,数据来源datagridview中的数据(n条数据),我每页要打印10行,请问下怎么设置。打印的自动分页怎么设置。 
希望能贴出代码,小弟非常感谢!!!

解决方案 »

  1.   

      Function c2u(myText) 
      Dim i 
      c2u = "" 
      For i = 1 to Len(myText) 
      c2u = c2u & "&#x" & Hex(AscW(Mid(myText, i, 1))) & ";" 
      Next 
      End Function  Function cutStr(str,strlen) 
      '去掉所有HTML标记 
      Dim re 
      Set re=new RegExp 
      re.IgnoreCase =True 
      re.Global=True 
      re.Pattern="<(.[^>]*)>" 
      str=re.Replace(str,"") 
      set re=Nothing 
      Dim l,t,c,i 
      l=Len(str) 
      t=0 
      For i=1 to l 
      c=Abs(Asc(Mid(str,i,1))) 
      If c>255 Then 
      t=t+2 
      Else 
      t=t+1 
      End If 
      If t>=strlen Then 
      cutStr=left(str,i)&"..." 
      Exit For 
      Else 
      cutStr=str 
      End If 
      Next 
      cutStr=Replace(cutStr,chr(10),"") 
      cutStr=Replace(cutStr,chr(13),"") 
      End Function
      Function converttowide(str) 
      Dim strlen 
      Dim position 
      Dim convertstr 
      if isnull(str) then 
      converttowide=str 
      else 
      position=1 
      strlen=Len(str) 
      For i=1 To strlen 
      convertstr=convertstr+"&#x"+Hex(AscW(Mid(str,position,1)))+";" 
      position=position+1 
      Next 
      converttowide=convertstr 
      end if 
      End Function 
      dim topicx,usernamex,addtimex,logtextx,ispassword 
      '获取ID号 
      articleid=request("articleid") 
      '写执行语句 
      strSQL = "select * from article where articleid="&articleid&"" 
      '接上面函数 
      logtextx=cutStr(rs("content"),5000) 
      '开始分页 
      dim page,PageLength,CLength,PageCount,wen,a 
      if Request("Page")<>"" then Page = CLng(Request("Page")) 
      PageLength = 80 
      CLength = Len(logtextx) 
      PageCount = Int(Clength/PageLength) + 1 
      if Page < 1 or IsNull(Page) Then Page = 1 
      if Page > PageCount Then Page = PageCount 
      if page=1 then 
      a=1 
      elseif page>1 then 
      a=(Page-1)*PageLength 
      end if 
      wen=Mid(logtextx,a,PageLength) 
      '判断 
      if page="" or page=1 then 
      '开始显示内容 
      Response.write (c2u("内容:"))'www.w3sky.com 
      end if 
      Response.write (converttowide(wen)) 
      Response.write "<br/>" 
      'Response.write (converttowide("本文字数:")) & CLength &"<br/>"
      Response.write (c2u("本文被分为")) & PageCount & (converttowide("页"))&" "&c2u("当前为"&Page&"页")&"<br/>"
      if PageCount >1 and page <> 1 then'www.w3sky.com 
      Response.write "1 " 
      end if 
      dim j 
      For j=Page+1 To Page+10 
      if j <= PageCount-1 then 
      Response.write ""&j&" " 
      end if 
      next 
      if PageCount >1 and Page <> PageCount then 
      Response.write "<a href="/"showarticle.asp?articleid="&articleid&"&Page="&PageCount&""">"&PageCount&"</a><br/>"
      End if 
      '结束
      

  2.   

    用e.HasMorePages属性 ,当PrintPage函数执行完后,如果HasMorePages==true,则重新执行一遍PrintPage这个函数。只要明白了这一点,打印分页就很简单了。
      

  3.   

    int currentIndex = 0;int recordCount=0;
    private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
      {
    if(currentIndex<recordCount)
    {
    e.HasMorePages = true;
    Print();
    }
    else
    e.HasMorePages = false;
    }protcted void Print()
    {
    根据当前打印到第几条数据(currentIndex)循环打印
    }
    说明:只要设置e.HasMorePages =true,就会自动循环执行printDocument1_PrintPage事件
      

  4.   

    DataGridView打印经典
      

  5.   

    设置PrintDialog
    PageSetupDialog横向打印
    http://www.codeproject.com/KB/printing/Tabular_Printing.aspx