privatevoidExportExcelFromDataGrid
(stringfilenameSystemWebUIWebControlsDataGridToExcelGrid)
{
ResponseClear();
ResponseBuffer=true;
ResponseCharset=utf;
ResponseAppendHeader(ContentDispositionattachment;filename=+ServerUrlEncode(filename));
ResponseContentEncoding=SystemTextEncodingDefault;//设置输出流为简体中文
ResponseContentType=application/msexcel;//设置输出文件类型为excel文件
thisEnableViewState=false;
SystemGlobalizationCultureInfomyCItrad=
newSystemGlobalizationCultureInfo(ZHCNtrue);
SystemIOStringWriteroStringWriter=newSystemIOStringWriter(myCItrad);
SystemWebUIHtmlTextWriteroHtmlTextWriter=
newSystemWebUIHtmlTextWriter(oStringWriter);
ToExcelGridRenderControl(oHtmlTextWriter);
ResponseWrite(oStringWriterToString());
ResponseEnd();
}
privatevoidButton_Click(objectsenderSystemEventArgse)
{
thisPanelVisible=false;
stringfilename=内训师xls;
thisDataGridColumns[]Visible=true;
thisDataGridColumns[]Visible=true;
thisDataGridColumns[thisDataGridColumnsCount]Visible=false; // *
thisDataGridColumns[thisDataGridColumnsCount]Visible=false; // *
thisDataGridAllowSorting=false; // *
thisDataGridAllowPaging=false;
thisDataGridSelectedIndex=; // *
thisBindGrid();
thisExportExcelFromDataGrid(filenamethisDataGrid);
}
}
原理是利用DataGrid(其实是其父类Control)的RenderControl方法输出整个DataGrid的外观时将这些HTML代码写入到缓沖区同时设置一下 ContentType 让Excel自己的自动纠错功能将这个输出存为一个Excel文件
很多网上的朋友使用了以上这种可粘贴性强的代码发现不好用反映的错误类似
LinkButton必须放在一个具有runat=server的标签的Form之类的话而更多的网友说
问题很明显因为DataGrid没有放在runat=server 的Form里面加上就可以了
我认为这种回答是很不准确的理由如下
通常使用这种代码的人他/她的DataGrid最起码已经能用了所以必定放在那个具有runat=server 的form标签里了
报错是LinkButton而不是DataGrid很多细心的朋友很可能会说我一直在用DataGridLinkButton在哪里来的
其实真正的问题是
上面的代码没有加了 // * 的那几行代码引起的
当然如果你的DataGrid没有排序没有使用那种按钮列的话是不会出问题的
言归正传LinkButtion其实是你将DataGrid设为可排序时候的表头包含的所以我要将DataGrid的排序设为False
同样得到上面的其实那些按钮列什么编辑删除等等这些也是用了LinkButton把他设为不可见就是了
其实说得再明白一点就是将有可能产生LinkButton或其他控件的东西都不让它输出就是了