我从网上找了如下代码打印dbgrid的内容:
Private Sub Command1_Click()
    Dim I As Long, J As Long, K As Long
    Dim PrintString As String
    For I = 0 To Data1.Recordset.RecordCount - 1
        If K = DBGrid1.VisibleRows Then
            DBGrid1.Scroll 0, DBGrid1.VisibleRows
            K = 0
        End If
        For J = 0 To DBGrid1.Columns.Count - 1
            PrintString = PrintString & 
            DBGrid1.Columns(J).CellText(DBGrid1.RowBook(K)) & "/"
        Next
        Printer.Print PrintString
        PrintString = ""
        K = K + 1
        DoEvents
    Next
End Sub
经过实验发现,经常出现某行多打印一次,或者少打印一行的情况
请问是怎么回事啊?

解决方案 »

  1.   

    用AnyLib吧,自由界面和报表的完美解决方案!
    http://www.anylib.com
      

  2.   

    谁能给我讲讲这几句代码的含义啊,我自己找找原因
    If K = DBGrid1.VisibleRows Then
                DBGrid1.Scroll 0, DBGrid1.VisibleRows
                K = 0
            End If
    请大家帮帮忙啊,多谢了
      

  3.   

    上面那位朋友,我不需要那么麻烦的,只是打印一个简单报表而已另外请问
    Private Sub Form_Activate()
        Data1.Recordset.MoveLast
        Data1.Recordset.MoveFirst
    End Sub
    这个过程是做什么用的?PS:怎么没人理啊...
      

  4.   

    Data1.Recordset.MoveLast是为了获得RecordCount方便
    Data1.Recordset.MoveFirst是下一步的具体操作最好由表头开始
      

  5.   

    那Form_Activate这个过程是什么意思啊?还有,为什么当我的dbgrid里面内容比较少的时候,容易打印重复打印或者少打印?
    如果用ado和datagrid,会不会好一些?
      

  6.   

    另外问一下,有什么办法可以调整printform打印的位置?
      

  7.   

    帮你顶!
    打印位置好像可以用tab(宽度的值)来定位,你可以试一下