private void ExportExcelFromDataGrid
( string filename , System.Web.UI.WebControls.DataGrid ToExcelGrid )
...{
Response.Clear();
Response.Buffer= true;
Response.AppendHeader ("Content-Disposition","attachment;filename="+Server.UrlEncode ( filename ) );
Response.ContentEncoding=System.Text.Encoding.Default;//设置输出流为简体中文
Response.ContentType = "application/ms-excel";//设置输出文件类型为excel文件.
this.EnableViewState = false;
System.Globalization.CultureInfo myCItrad =
new System.Globalization.CultureInfo("ZH-CN",true);
System.IO.StringWriter oStringWriter = new System.IO.StringWriter(myCItrad);
System.Web.UI.HtmlTextWriter oHtmlTextWriter =
new System.Web.UI.HtmlTextWriter(oStringWriter);
ToExcelGrid.RenderControl(oHtmlTextWriter);
Response.Write(oStringWriter.ToString());
Response.End();
}
this.Panel1.Visible = false;
string filename = "内训师.xls";
this.DataGrid1.Columns[this.DataGrid1.Columns.Count-1].Visible = false; // *
this.DataGrid1.AllowSorting = false; // *
this.DataGrid1.AllowPaging = false;
this.DataGrid1.SelectedIndex = -1; // *
this.BindGrid();
this.ExportExcelFromDataGrid ( filename , this.DataGrid1 );
原理是利用DataGrid(其实是其父类Control)的RenderControl方法输出,整个DataGrid的外观时,将这些HTML代码写入到缓冲区,同时设置一下 ContentType ,让Excel自己的自动纠错功能将这个输出存为一个Excel文件.
很多网上的朋友使用了以上这种可粘贴性强的代码,发现不好用,反映的错误类似:
"LinkButton必须放在一个具有runat=server的标签的Form"之类的话,而更多的网友说:
问题很明显,因为DataGrid没有放在runat=server 的Form里面,加上就可以了.
我认为,这种回答是很不准确的,理由如下:
通常使用这种代码的人他/她的DataGrid,最起码已经能用了,所以必定放在那个具有runat=server 的form标签里了. 报错是LinkButton,而不是DataGrid,很多细心的朋友很可能会说,我一直在用DataGrid,LinkButton在哪里来的. 其实真正的问题是,上面的代码没有加了 // * 的那几行代码引起的.
当然如果你的DataGrid,没有排序,没有使用那种按钮列的话,是不会出问题的.
言归正传,LinkButtion其实是你将DataGrid设为可排序时候,的表头包含的,所以我要将DataGrid的排序设为False.
其实说得再明白一点就是,将有可能产生LinkButton,或其他控件的东西都不让它输出就是了
还有一点要注意:因为你要用到excel表,所以要首先在项目里添加引用哟:项目(project)-添加引用(add reference)-Microsoft .Office.Interop.Excel
Button1的代码:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
'要先添加引用才能用到 Microsoft.Office.Interop.Excel.Application()
Dim MyExcel As New Microsoft.Office.Interop.Excel.Application()
MyExcel.Application.Workbooks.Add(True)
MyExcel.Visible = True
'去除dataGridView1的编号列(这里也可以不要)
Dim m As Integer
For m = 0 To DataGridView1.ColumnCount - 1
MyExcel.Cells(1, m + 1) = Me.DataGridView1.Columns(m).HeaderText
Next m
'往excel表里添加数据
Dim i As Integer
For i = 0 To DataGridView1.RowCount - 1
Dim j As Integer
For j = 0 To DataGridView1.ColumnCount - 1
If Me.DataGridView1(j, i).Value Is System.DBNull.Value Then
Else
End If
Next j
Next i
End Sub
datagridview是.net中用来显示或进行数据库数据处理的一个类似于容器的控件,所以显示出来的数据,是以类似表格的形式出现的,有行列.
①.拖放控件
如
Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
Me.ResizeRedraw = True
Dim ff As New DataGridView
ff.Parent = Me
ff.AllowUserToAddRows = True'这里设置是否显示添加新行
ff.Columns.Add("aa", "啊啊")
ff.Columns.Add("a1", "啊")
如图所示,工具箱的"所有Windows窗体"中有,如果没有,可选择"选择项"添加
第一步,新建项目.
新建成功.
END
第二步,添加引用.
"项目"--"添加引用".
第三步,添加打开文件对话框工具.
工具箱--对话框--openfiledialog.
添加成功.
第四步,添加命令按钮控件.
工具箱--公共控件--button.
在控件上右击鼠标,进入属性设置.
text属性设置为"打开excel".
name属性也设置为"打开excel".
第五步,编写程序.
鼠标双击命令按钮,进入编程界面,编写程序.
第六步,运行程序.
鼠标单击启动调式图标,程序开始运行.
单击打开excel命令按钮,调用打开文件对话框,选择自己要打开的excel文件.
第七步,保存程序.
第一次程序运行完,关闭程序,出现关闭项目提示,选择保存.
选好自己要保存的位置.
DataGridView控件,放一个DataGridView1和Button1到窗体,下面是按钮下代码
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Me.DataGridView1.AllowUserToAddRows = False
DataGridView1.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.None
Me.DataGridView1.Columns.Add("列" i.ToString, "列" i.ToString)
Me.DataGridView1.Rows.Add()
Next
Me.DataGridView1.Columns(0).Width = 100
'自己设置相关需要的属性即可