有没有简单一点的例子?

解决方案 »

  1.   

    顶一下,最近做的crm正用到这块
      

  2.   

    1.用第三方报表控件,如ACTIVE REPORT2.你应该是WEB的吧,  你已画一个干净的网页,把数据都画在那个网页上,然后调用IE的打印
      

  3.   

    这个问题不好回答,可以面对面一天也说不清楚,因为我这方面的需求比较多,所以专门写了个组件负责打印DataGirdView(还有个版本专门是用来打印DataGrid的),我是用自绘的方法,整个自绘过程中,我一共用了11个自定义类,3个枚举定义,1一接口定义,1个委托定义,其中最大的类共有1293行代码.虽然这么大的代码量,我还是牺牲了一此东西,比如不支持水平分页,打行时行的高度我取的是RowTemplate.Height.
      

  4.   

    有谁能告诉我打印的原理是什么?是怎么一点一点输出到打印机的
    我要打印的是WinForm
    可是不知道该怎么设置PrintDocument的属性
    能不能不借助第三方组件直接打印?
      

  5.   

    目前为止我没找到第三方的控件(水晶报表也许算,但水晶报表无法实现所见即所得的功能,比如你的用户为显示某一列的完整内容,根据需要,调宽了这列的宽度),所以我自己写了一个
    原理很简单,你必须准备要打印的每一页的数据,然后一页一页的在Documnet.PrintPage事件中去绘制单页,而且和MFC的最大区别的,你需要自己写一个页控制器或页控制代码.来确定当前打印的是第几页,并页通知PrintPage的事件参数是否需要打印下一页.
    PrintDocument和MFC的打印的最大区别和联系是:都是在一个函数内绘制要打印的每一页的内容,区别在于MFC给出了当前页的页码(实际上,在MFC框架下你不知道系统给出的页码可能会是几,你所需要做的就是看到是几,绘第几页),但PrintDocument没有给出这个页码,这个页码需要你自己在窗口中进行控制(最简单的方法,就是开始打印时,置0,然后每每绘一页,给它+1,但你必须知道总页数,用来决定是否需要设置HasMorePage的值为true,然后在PrintPage检查窗口的这个页码变量是几,然后绘第几页的内容).
      

  6.   

    把DataGridView转换为二维数组。打印而二维数组应该不难吧。
      

  7.   

    //将DataGridView控件转换为二位数组。
        /*    public static string[,] ToStringArrary(DataGridView dataGridView, bool includeColumnText)
            {
                string[,] arrReturn = null;
               int  rowsCount = dataGridView.Rows.Count;
              int   colsCount = dataGridView.Columns.Count ;        //最后一行是供输入的不用读取数据。
                if (rowsCount > 0)
                {
                    if (dataGridView.Rows[rowsCount - 1].IsNewRow)
                        rowsCount--;
                
                
                }
                //包含列的标题            int k = 0;
              if (includeColumnText) 
                {
                    rowsCount++;
                    arrReturn = new string[rowsCount, colsCount];                for (k = 0; k < colsCount; k++)
                    {
                        arrReturn[0, k] = dataGridView.Columns[k].HeaderText;
                    
                    }
                    k = 1;
                }
             else 
                   
                    arrReturn =new string [rowsCount ,colsCount ];
                    
               //读取单元格数据      
            
            for (int i=1;k<rowsCount ;i++)
            {
            for (int j=0;j<colsCount ;j++)
            {
            arrReturn [i,j]=dataGridView .Rows [i].Cells [j].Value .ToString() ;
            
            }
            }
            return arrReturn ;
            
       }
      

  8.   

    其实自己写的打印程序,运行时太慢。还不如借组第三方,如果楼主需要自己写的打印程序,可以给我发信息。我把自己写的打印程序送给你。很庞大的。现在我不都采用这种方法了。
    你可以参考我下面说的方法:
    1。水晶报表
    2。C1ReportDesigner设计。然后在NET中引用。
    3。用NET自带的Report实现。
    如果感兴趣,我们可以共同研究。
      

  9.   

    可以试试这个:
    WFsoft.wfLibrary.wfPrint v1.0
    http://www.wfsoft.com/middleware_info.asp?id=1