——所有合作伙伴——
组件产品搜索:
查询分类
请选择查询分类
组件名称
组件功能
组件介绍
组件开发商
Online Service 在线服务
New Articles 最新更新
Hot Articles 热点文章
Google 广告
首页
… 技术文档 Technical Articles
关于Asp.net中使用以下代码导出Excel表格的问题
(时间:2007-7-20 10:01:04 共有
人次浏览)
关于使用Asp.net导出Excel,遭遇“LinkButton必须放在一个具有runat=server的标签的Form”的解决方案。
private
void
ExportExcelFromDataGrid
(
string
filename , System.Web.UI.WebControls.DataGrid ToExcelGrid )
...
{
Response.Clear();
Response.Buffer
=
true
;
Response.Charset
=
"
utf-8
"
;
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();
}
private
void
Button4_Click(
object
sender, System.EventArgs e)
...
{
this
.Panel1.Visible
=
false
;
string
filename
=
"
内训师.xls
"
;
this
.DataGrid1.Columns[
6
].Visible
=
true
;
this
.DataGrid1.Columns[
7
].Visible
=
true
;
this
.DataGrid1.Columns[
this
.DataGrid1.Columns.Count
-
1
].Visible
=
false
; // *
this
.DataGrid1.Columns[
this
.DataGrid1.Columns.Count
-
2
].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,把他设为不可见就是了。
其实说得再明白一点就是,将有可能产生LinkButton,或其他控件的东西都不让它输出就是了
【打印该页
】 【
关闭窗口
】
此技术资料来自网络,仅供参考。未经许可,不得转载。
若有侵权,请及时与我们取得联系!
FAQS 常见问题
Consultation 即时咨询
Contact Us 联系我们
着作权与商标声明
|
法律声明
|
隐私声明
|
产品购买流程
|
联系我们