只能打印Datagrid
首先在报表设计器上放足够多的控件
1.在页标头中放足够多的Label
将页标头命名为 Head
以Label0.Label1.....Label99这样命名
2.在页细节中放足够多的Text
将页细节命名为 Bord
以Text0.Text1.....Text99这样命名public Print_Custon(byval grid as datagrid,byval rs as adodb.recordset)
dim xs as double
dim countwidth as double
dim colwidth as double
dim i as long
dim j as longfor i = 0 to grid.columns.count - 1
   countwidth =grid.columns(i).width +countwidth 
next i
 xs = countwidth /567/你的报表的宽度 '(把Datagrid的各个列的宽度累计并且换算成厘米,而xs则是你的datagrid和报表的比例)
with Report
  for i = 0 to grid.columns.count-1
     .section("Head").control("Label" & i).caption=grid.columns(i).caption
     .section("Head").control("Label" & i).visible=grid.columns(i).visible
     .section("Bord").control("Text" & i).visible=grid.columns(i).visible
     if grid.columns(i).visible and grid.columns(i).width >0 then
        '如果有未显示的列或列的宽度<0则不显示
        j = i
        .section("Head").control("Label" & i).left=colwidth
        .section("Bord").control("Text" & i).left=colwidth
        .section("Head").control("Label" & i).width=grid.columns(i).width / xs
        .section("Bord").control("Text" & i).width=grid.columns(i).width / xs
        .section("Bord").control("Text" & i).datafield=grid.columns(i).datafield
      colwidth = colwidth +.section("Head").control("Label" & i).width
      else
        '如果有未显示的列或列的宽度<0则把它对应的TEXT的数据字段赋值为前面显示的列的数据字段
        .section("Bord").control("Text" & i).datafield=grid.columns(j).datafield    
      end if
        
  next i
  set .datasource =rs
  .show 
end with