C#如何实现把dataGrid里的数据打印

chenhuai312 2004-06-20 07:25:48
我用C#在编了个SQL Server 2000中查询数据的程序,现在可以在dataGrid里显示出来,各位大侠不知如何才能将数据从打印机上打印出来,小弟先在这里谢过了哈.(请给段源代码)
...全文
221 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
长江支流 2004-08-25
  • 打赏
  • 举报
回复
使用这个开源免费的打印
http://community.csdn.net/Expert/topic/3278/3278050.xml?temp=.5012934
长江支流 2004-08-19
  • 打赏
  • 举报
回复
http://community.csdn.net/Expert/topic/3278/3278050.xml?temp=.5012934
开源的打印程序
xiaomaoy 2004-08-19
  • 打赏
  • 举报
回复
//将HTTP头添加到输出流
HttpContext.Current.Response.AppendHeader("Content-Disposition", "attachment;filename=word.doc");

//指定生成文件的类型
Response.ContentType = "application/vnd.ms-text";
HttpContext.Current.Response.Charset = "";
HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.Default;
this.Datagrid2.Page.EnableViewState = true;

System.IO.StringWriter tw= new System.IO.StringWriter();

System.Web.UI.HtmlTextWriter hw= new System.Web.UI.HtmlTextWriter(tw);
this.DataGrid2.Visible = true;

//将服务器控件中的内容输出到System.Web.UI.HtmlTextWriter对象中
this.DataGrid2.RenderControl(hw);

HttpContext.Current.Response.Write(tw.ToString());
HttpContext.Current.Response.End();
dahuzizyd 2004-08-19
  • 打赏
  • 举报
回复
http://www.c-sharpcorner.com/Graphics/DataGridPrinterMG.asp
ddggggdd 2004-08-19
  • 打赏
  • 举报
回复
http://search.csdn.net/Expert/topic/2573/2573046.xml?temp=.3165857

http://search.csdn.net/Expert/topic/2417/2417592.xml?temp=.1815607

到网上搜,很多资料的
cys0806 2004-06-21
  • 打赏
  • 举报
回复
/*
* author 车丕珍 2004-6-14
* 改进的dataGrid的通用打印类.需要确定每页打印的纪录数 传递dataGrid和dataTable到PrintDataGrid()中.
* 本类改变自YangZhiXin2003不好意思,你有几处漏掉了
* cys0806@sohu.com
* */
using System;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Printing;
using System.Windows.Forms;
using System.Data.SqlClient;
using System.Data;

namespace NetExpress
{
/// <summary>
///
/// </summary>
public class PrintDataGrid
{

private int PrintLines = 50;
private int PrintRecordNumber = 45;
//---------
private DataGrid DataGridSource;
//private PrintPageEventArgs ev;
private PrintDocument PrintDataGridDocument;
private PrintPreviewDialog PrintPriview;
private PageSetupDialog PageSetup;
//------------

private DataRow DataGridRow;
private DataTable DataGridTable=null;
//------------
private int Cols;
private int ColsCount;
private int PageRecordNumber;
//----------------
private int X_unit;
private int Y_unit;
private int PrintingPageNumber=0;
private int PageNumber;
private int PrintRecordLeave;
private int PrintRecordComplete=0;
//-----------------
private bool blandscape=true;
private Font PrintFont=new Font("宋体",10);


public PrintDataGrid()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
public PrintDataGrid(DataGrid TableSource,DataTable Dt)
{
DataGridSource = TableSource;
DataGridTable=new DataTable();
DataGridTable = Dt;
ColsCount = DataGridTable.Columns.Count;
}
public Font SetPrintFont
{
set
{
PrintFont=value;
}
get
{
return PrintFont;
}
}
public int SetPrintRecordNumber
{
set
{
PrintRecordNumber =value;
}
get
{
return PrintRecordNumber;
}
}
public bool SetLandscape
{
get
{
return blandscape;
}
set
{
blandscape=value;
}
}
public void Print()
{
try
{
PrintDataGridDocument = new PrintDocument();
PrintDataGridDocument.PrintPage+=new PrintPageEventHandler(this.PrintDataGrid_PrintPage);
PageSetup = new PageSetupDialog();
PageSetup.PageSettings = PrintDataGridDocument.DefaultPageSettings;
if(PageSetup.ShowDialog() == DialogResult.Cancel)
{
return;
}
if(!PrintDataGridDocument.DefaultPageSettings.Landscape)
{
PrintLines= PrintDataGridDocument.DefaultPageSettings.PaperSize.Height/(PrintFont.Height+5);
}
else
{
PrintLines = PrintDataGridDocument.DefaultPageSettings.PaperSize.Width / (PrintFont.Height + 5);
}
PrintPriview =new PrintPreviewDialog();
PrintPriview.Document = PrintDataGridDocument;
PrintPriview.ShowDialog();
}
catch(Exception Ex)
{
MessageBox.Show("Error:" + Ex.ToString());
}
finally
{
}
}
private void PrintDataGrid_PrintPage(object sender,System.Drawing.Printing.PrintPageEventArgs ev)
{
string strPrint;
SolidBrush DrawBrush=new SolidBrush(Color.Blue);
int X=0,Y=0;
PointF DrawPoint=new PointF(X,Y);
//int row_count;
PrintRecordLeave = DataGridTable.Rows.Count-PrintRecordComplete;
PageNumber=PrintRecordLeave/PrintRecordNumber;
PrintingPageNumber =0;
if(PrintDataGridDocument.DefaultPageSettings.Landscape)
{
X_unit = PrintDataGridDocument.DefaultPageSettings.PaperSize.Height/(DataGridTable.Columns.Count+2);
Y_unit = PrintDataGridDocument.DefaultPageSettings.PaperSize.Width/PrintLines;
}
else
{
X_unit = PrintDataGridDocument.DefaultPageSettings.PaperSize.Width/(DataGridTable.Columns.Count+2);
Y_unit = PrintDataGridDocument.DefaultPageSettings.PaperSize.Height/PrintLines;
}
if(DataGridTable.Rows.Count-PrintingPageNumber*PrintRecordNumber>=PrintRecordNumber)
{
PageRecordNumber =PrintRecordNumber;
}
else
{
PageRecordNumber =(DataGridTable.Rows.Count-PrintingPageNumber * PrintRecordNumber)-
System.Convert .ToInt32 ((DataGridTable.Rows.Count-PrintingPageNumber * PrintRecordNumber)/PrintRecordNumber);
}
while(PrintingPageNumber<=PageNumber)
{
strPrint =DataGridSource.CaptionText;
DrawPoint = new PointF(X_unit,Y_unit);
ev.Graphics.DrawString(strPrint,PrintFont,DrawBrush,DrawPoint);
string []ColumnText=new string[DataGridTable.Columns.Count];
//int Table;
for(Cols=0;Cols<ColsCount-1;Cols++)
{
ColumnText[Cols]=DataGridTable.Columns[Cols].ToString();
DrawPoint =new PointF(X_unit*(Cols+1),Y_unit*2);
ev.Graphics.DrawString(ColumnText[Cols],PrintFont,DrawBrush,DrawPoint);
}
DrawPoint =new PointF(X_unit,Y_unit*2);
DrawLine(DrawPoint,ev);
int PrintingLine=0;
string strUpData=null;
//string strNonce=null;
while(PrintingLine<PageRecordNumber )
{
DataGridRow = DataGridTable.Rows[PrintRecordComplete];
for(Cols=0;Cols<ColsCount-1;Cols++)
{
DrawPoint.X=X_unit*(Cols+1);
DrawPoint.Y=Y_unit*(PrintingLine+1+2);
if(Cols==0)
{
if(strUpData!="")
{
if(strUpData ==DataGridRow[ColumnText[0]].ToString())
{
ev.HasMorePages =true;
}
}
}
ev.Graphics.DrawString(DataGridRow[ColumnText[Cols]].ToString(),PrintFont,DrawBrush,DrawPoint);
strUpData=DataGridRow[ColumnText[0]].ToString();
}
DrawPoint.X=X_unit*1;
DrawPoint.Y=Y_unit*(PrintingLine +1+2);
DrawLine(DrawPoint,ev);
PrintingLine+=1;
PrintRecordComplete+=1;
if(PrintRecordComplete>=DataGridTable.Rows.Count)
{
ev.HasMorePages=false;
return;
}
}

PrintingPageNumber+=1;
if(PrintingPageNumber>PageNumber)
{
ev.HasMorePages= false;
}
else
{
ev.HasMorePages=true;
return;
}
}

}
private void DrawLine(PointF point,System.Drawing.Printing.PrintPageEventArgs ev)
{
Pen blackPen=new Pen(System.Drawing.Color.Black,1);
ev.Graphics.DrawLine(blackPen,point.X,point.Y+PrintFont.Height,point.X*(ColsCount+1),point.Y+PrintFont.Height);
}


}
}
whmjw 2004-06-20
  • 打赏
  • 举报
回复
用水晶报表做

110,499

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧