怎样将datagird的内容打印出来?
我是菜鸟,学vb.net很短的时间。对于我的弱弱的问题,希望各位达人能简单明了一点的回答我的问题,谢谢~~ 问题点数:20、回复次数:9Top
1 楼youlinga(幽灵A)回复于 2006-06-03 09:08:11 得分 0
导入EXEL
导到Excel中的代码如下:
Imports System
Imports System.Collections
Imports System.ComponentModel
Imports System.Data
Imports System.Drawing
Imports System.Web
Imports System.Web.SessionState
Imports System.Web.UI
Imports System.Web.UI.WebControls
Imports System.Web.UI.HtmlControls
Imports OWC
Imports System.Data.OleDb
Imports System.IO
Imports System.Reflection
<DefaultProperty("Text"), ToolboxData("<{0}:WebCustomControl1 runat=server></{0}:WebCustomControl1>")> Public Class PrintToExcel
Inherits System.Web.UI.WebControls.WebControl
Dim _text As String
<Bindable(True), Category("Appearance"), DefaultValue("")> Property [Text]() As String
Get
Return _text
End Get
Set(ByVal Value As String)
_text = Value
End Set
End Property
Protected Overrides Sub Render(ByVal output As System.Web.UI.HtmlTextWriter)
output.Write([Text])
End Sub
Public Class ToExcel
Inherits System.Web.UI.WebControls.WebControl
Dim _ConnectionStr As String
Dim _SqlStr As String
Dim _TableTitle As String
Dim _TableName As String
Public Sub ToExcel(ByVal ConnectionStr As String, ByVal SqlStr As String, ByVal TableTitle As String, ByVal TableNamer As String)
Me.ConnectionStr = ConnectionStr
Me.SqlStr = SqlStr
Me.TableTitle = TableTitle
Me.TableName = TableName
End Sub
Property ConnectionStr() As String
Get
Return _ConnectionStr
End Get
Set(ByVal Value As String)
_ConnectionStr = Value
End Set
End Property
'<Bindable(True), Category("Appearance"), DefaultValue(" ")> Property [mysql]() As String
Property SqlStr() As String
Get
Return _SqlStr
End Get
Set(ByVal Value As String)
_SqlStr = Value
End Set
End Property
Property TableTitle() As String
Get
Return _TableTitle
End Get
Set(ByVal Value As String)
_TableTitle = Value
End Set
End Property
Property TableName() As String
Get
Return _TableName
End Get
Set(ByVal Value As String)
_TableName = Value
End Set
End Property
Public Sub New()
MyBase.New()
End Sub
Function ToExcel() As String
Dim xlsheet As New SpreadsheetClass
Dim MyConn As OleDbConnection = New OleDbConnection(Me.ConnectionStr)
MyConn.Open()
Dim Cmd As OleDbCommand = New OleDbCommand(Me.SqlStr, MyConn)
Dim Reader As OleDbDataReader = Cmd.ExecuteReader()
Dim NumberCols As Integer = Reader.FieldCount
Dim Row As Integer = 4
xlsheet.ActiveCell.Clear()
Dim i As Integer = 0
For i = 0 To NumberCols - 1 ' 输出标题
xlsheet.ActiveSheet.Cells(3, i + 1) = Reader.GetName(i).ToString()
Next
While (Reader.Read()) ' 输出字段内容
For i = 0 To NumberCols - 1
xlsheet.ActiveSheet.Cells(Row, i + 1) = " " + Reader.GetValue(i).ToString() + " "
Next
Row = Row + 1
End While
Reader.Close()
MyConn.Close()
Try
xlsheet.AutoFit = True '自动调整列宽
'xlsheet.DisplayPropertyToolbox = True
'xlsheet.EnableAutoCalculate = True
'xlsheet.RightToLeft = True
xlsheet.DisplayGridlines = True '显示网格线
xlsheet.Range(xlsheet.Cells(3, 1), xlsheet.Cells(Row, i)).Font.Size = 10 '除首行外字体为10号
xlsheet.Range(xlsheet.Cells(1, 1), xlsheet.Cells(Row, i)).Columns.HAlignment = 2 '居中对齐
xlsheet.Range(xlsheet.Cells(1, 1), xlsheet.Cells(2, i)).Font.Bold = True '前两行粗体
'xlsheet.Range(xlsheet.Cells(1, 1), xlsheet.Cells(2, i)).Font.Color = "red"
xlsheet.Range(xlsheet.Cells(1, 1), xlsheet.Cells(1, i)).Merge() '首行合并
xlsheet.Range(xlsheet.Cells(1, 1), xlsheet.Cells(1, i)).Value = Me.TableTitle '首行显示值
xlsheet.Range(xlsheet.Cells(1, 1), xlsheet.Cells(1, i)).Font.Size = 16
xlsheet.Range(xlsheet.Cells(2, 1), xlsheet.Cells(2, 3)).Merge()
xlsheet.Range(xlsheet.Cells(2, 1), xlsheet.Cells(2, 3)).Value = Me.TableName '首行显示值
xlsheet.Range(xlsheet.Cells(2, 1), xlsheet.Cells(2, 3)).HAlignment = 0 '首行显示值左对齐
xlsheet.Range(xlsheet.Cells(2, 1), xlsheet.Cells(2, i)).Font.Size = 9
xlsheet.Range(xlsheet.Cells(2, i - 2), xlsheet.Cells(2, i)).Merge()
xlsheet.Range(xlsheet.Cells(2, i - 2), xlsheet.Cells(2, i)).Value = Format(DateTime.Now, "统计日期:yyyy年MM月dd日")
xlsheet.Range(xlsheet.Cells(2, i - 2), xlsheet.Cells(2, i)).Columns.HAlignment = 3
xlsheet.Range(xlsheet.Cells(3, 1), xlsheet.Cells(Row, i)).Borders.LineStyle = 2
xlsheet.Range(xlsheet.Cells(3, 1), xlsheet.Cells(Row, i)).Borders.Weight = 1
xlsheet.Range(xlsheet.Cells(3, 1), xlsheet.Cells(3, i)).Font.Bold = True
xlsheet.Range(xlsheet.Cells(Row, 1), xlsheet.Cells(i, i)).VAlignment = 2 '第三行第一列之后,各单元格上对齐
xlsheet.Range(xlsheet.Cells(Row, 1), xlsheet.Cells(i, i)).HAlignment = 0 '第三行第一列之后,各单元格左对齐
xlsheet.Range(xlsheet.Cells(Row, 1), xlsheet.Cells(i, i)).Borders.LineStyle = 1
xlsheet.Range(xlsheet.Cells(Row, 1), xlsheet.Cells(i, i)).Borders.Weight = 1
Dim ExcelFileName As String = System.DateTime.Now.Ticks.ToString + ".xls"
xlsheet.ActiveSheet.Export(System.Web.HttpContext.Current.Request.MapPath(".") + "\\" + ExcelFileName, SheetExportActionEnum.ssExportActionNone)
Dim OpenFile As String = "<script language='javascript'>window.open('" + ExcelFileName + "');</script>"
RemoveFiles(System.Web.HttpContext.Current.Request.MapPath("."))
Return ExcelFileName
Catch e As System.Runtime.InteropServices.COMException
System.Web.HttpContext.Current.Response.Write("错误:" + e.Message)
End Try
End Function
Private Sub RemoveFiles(ByVal strPath As String)
Dim di As System.IO.DirectoryInfo = New DirectoryInfo(strPath)
Dim fiArr As FileInfo() = di.GetFiles()
Dim fi As FileInfo
For Each fi In fiArr
If fi.Extension.ToString() = ".xls" Then
Dim min As TimeSpan = New TimeSpan(0, 0, 0, 2, 0)
If fi.CreationTime < DateTime.Now.Subtract(min) Then
fi.Delete()
End If
End If
Next
End Sub
End Class
End ClassTop
2 楼youlinga(幽灵A)回复于 2006-06-03 09:08:29 得分 0
晕 好象长了点Top
3 楼liujiayu10(活着就好)回复于 2006-06-03 10:47:29 得分 0
大家可能觉得上面的代码比较复杂,因为上面对于对打印要求比较高的应用,是十分有效的。如果只是单单对数据进行导出,还可以使用简单的格式,比如使用以下的代码:
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim dt As DataTable = CType(Application.Item("MyDataTable"), DataTable)
Response.ContentType = "application/ms-Excel"
Response.AddHeader("Content-Disposition", "inline;filename=test.xls")
Response.Write(ConvertDtToTDF(dt))
End Sub
Private Function ConvertDtToTDF(ByVal dt As DataTable) As String
Dim dr As DataRow, ary() As Object, i As Integer
Dim iCol As Integer
' 输出列标题
For iCol = 0 To dt.Columns.Count - 1
Response.Write(dt.Columns(iCol).ToString & vbTab)
Next
Response.Write(vbCrLf)
'输出数据
For Each dr In dt.Rows
ary = dr.ItemArray
For i = 0 To UBound(ary)
Response.Write(ary(i).ToString & vbTab)
Next
Response.Write(vbCrLf)
Next
End Function
End ClassTop
4 楼msdsl(萨扬娜拉)回复于 2006-06-03 11:22:07 得分 0
这只是导入execl,但是应该怎么打印呢?Top
5 楼msdsl(萨扬娜拉)回复于 2006-06-03 15:01:17 得分 0
Response这是什么对象?不用定义可以直接用吗,还是要包括什么命名空间后才能用。Top
6 楼crane_9999(渴望失败!)回复于 2006-06-03 15:14:21 得分 0
ke yi zhi ji yongTop
7 楼msdsl(萨扬娜拉)回复于 2006-06-03 16:40:12 得分 0
为什么我用这段程序时,会显示Response为未声明的对象Top
8 楼tonny008()回复于 2006-06-03 21:05:44 得分 0
webform? winform?Top
9 楼msdsl(萨扬娜拉)回复于 2006-06-03 22:39:00 得分 0
我的是winformTop




