本人现在要实现一个课表的打印(由DataGrid绑定) 从网上看到2种方法 试了试都没成功 希望达人能指路
一个方法 写一个通用的DataGrid打印类 (采取网上流行的活靶子提供的通用类) 链接如下: http://www.cnblogs.com/huobazi/archive/2005/04/26/8176.html
可问题是 我从web页面上传过去一个System.Web.UI.WebControls.DataGrid 而那个通用类使用的是
System.Windows.Forms.DataGrid 2者却不能转换 头痛了很久!
另一个方法是调用IE的打印功能 用 script实现 我使用的是asp.net与c#
代码如下
<HEAD>
<script language="Javascript">
void doprint() {? //保留客户打印机设置
char h = factory.printing.header;?
char f = factory.printing.footer;
char t = factory.printing.topMargin;
char b = factory.printing.bottomMargin;
char l = factory.printing.leftMargin;
char r = factory.printing.rightMargin;
document.all("printbtn").style.visibility = hidden;//打印时隐藏打印按钮<BR>?
//设置页眉页脚上下左右边距
factory.printing.header = "页眉+_+ohiolee的打印世界";
factory.printing.footer = "想设置页脚么,这里哦";
factory.printing.topMargin="6";//存在最小默认值5.02
factory.printing.bottomMargin="6";//存在最小默认值4.13
factory.printing.leftMargin="2";//存在最小默认值5.08
factory.printing.rightMargin="2";//存在最小默认值6.79。。。本人机子上测出来是这样的,不知道普遍是否如此。?
// 直接打印
factory.DoPrint(false);//true时弹出打印对话框<BR>?
//返回到原来的打印设置<BR>?
factory.printing.header = h;?
factory.printing.footer = f;?
factory.printing.topMargin=t;
factory.printing.bottomMargin=b;
factory.printing.leftMargin=l;
factory.printing.rightMargin=r;
//显示打印按钮<BR>?
document.all("printbtn").style.visibility = visible;//通过document.all("printbtn").来指定页面中的任何类,并给以进一步属性设置
}
</script>
</HEAD>
<body>
<OBJECT id="factory" style="DISPLAY: none" codeBase="http://www.meadroid.com/scriptx/ScriptX.cab#Version=5,60,0,360"
classid="clsid:1663ed61-23eb-11d2-b92f-008048fdd814" viewastext>
</OBJECT>
<div id="printbtn"><input name="idPrint" type="button" value="打印" onclick="Javascript:doprint()"></div>
</body>
帮你顶!
我暂时也没有看出个究竟
不过,过段时间我应该可以给你答案!!!
gz
本质上都是调用IE的打印功能,总会遇到这样那样的错误。
我个人认为:一定要web方式的话,还是用水晶报表,导出到pdf,是最佳选择。
此示例说明如何打印 DataGrid 控件。
示例
private void printGrid_Click(System.Object sender, System.EventArgs e)
{
printDocument1.Print();
}
private void printDocument1_PrintPage(System.Object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
PaintEventArgs myPaintArgs = new PaintEventArgs(e.Graphics, new Rectangle(new Point(0, 0), this.Size));
this.InvokePaint(dataGrid1, myPaintArgs);
}
编译代码
本示例需要:
名为 printGrid 且含有 Click 事件处理程序的按钮控件。
名为 dataGrid1 的 DataGrid 控件。
名为 printDocument1 且包含 PrintPage 事件处理程序的 PrintDocument 组件。
该示例代码替换现有的事件处理程序。
可靠编程
以下情况可能会导致异常:
您没有访问该打印机的权限。
没有安装打印机。
顶
看看这篇文章,或许会有帮助
http://community.csdn.net/Expert/topic/4386/4386570.xml?temp=.9343988