C# 将gridview导出到Excel仅保存列b第1行
我在几个web应用程序上使用相同的代码将gridview数据导出到excel。通常工作正常,但在这种情况下,当我打开生成的excel文件时,只填充了一个单元格。这是我的出口代码:C# 将gridview导出到Excel仅保存列b第1行,c#,asp.net,gridview,export-to-excel,C#,Asp.net,Gridview,Export To Excel,我在几个web应用程序上使用相同的代码将gridview数据导出到excel。通常工作正常,但在这种情况下,当我打开生成的excel文件时,只填充了一个单元格。这是我的出口代码: protected void export_btn_Click(object sender, ImageClickEventArgs e) { ExportGridToExcel(); } private void ExportGridToExcel() { Response.Clear();
protected void export_btn_Click(object sender, ImageClickEventArgs e)
{
ExportGridToExcel();
}
private void ExportGridToExcel()
{
Response.Clear();
Response.Buffer = true;
Response.ClearContent();
Response.ClearHeaders();
Response.Charset = "";
string FileName ="SomeFileName" + DateTime.Now + ".xls";
StringWriter strwritter = new StringWriter();
HtmlTextWriter htmltextwrtter = new HtmlTextWriter(strwritter);
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.ContentType ="application/vnd.ms-excel";
Response.AddHeader("Content-Disposition","attachment;filename=" + FileName);
allDataGridView.GridLines = GridLines.Both;
allDataGridView.HeaderStyle.Font.Bold = true;
allDataGridView.RenderControl(htmltextwrtter);
Response.Write(strwritter.ToString());
Response.End();
}
public override void VerifyRenderingInServerForm(Control control)
{
/* Confirms that an HtmlForm control is rendered for the specified ASP.NET
server control at run time. */
}
gridview中的数据包含html格式(如果有区别的话)。关于导出到excel有很多问题,但对于这个特定问题没有问题
编辑:Gridview代码:
<asp:GridView ID="allDataGridView" runat="server" AutoGenerateColumns="False"
CellPadding="4" DataKeyNames="ID" DataSourceID="allDataDataSource"
ForeColor="#333333" Width="795px" Font-Size="X-Small">
<AlternatingRowStyle BackColor="White" ForeColor="#284775" />
<Columns>
<asp:BoundField DataField="CODE" HeaderText="Code" HtmlEncode="False"
SortExpression="CODE">
<HeaderStyle HorizontalAlign="Left" VerticalAlign="Middle" />
<ItemStyle HorizontalAlign="Left" VerticalAlign="Top" />
</asp:BoundField>
<asp:BoundField DataField="DESCRIPTION" HeaderText="Description"
HtmlEncode="False" SortExpression="DESCRIPTION">
<HeaderStyle HorizontalAlign="Left" VerticalAlign="Middle" />
<ItemStyle HorizontalAlign="Left" VerticalAlign="Top" />
</asp:BoundField>
<asp:BoundField DataField="TAT" HeaderText="TAT" HtmlEncode="False"
SortExpression="TAT">
<HeaderStyle HorizontalAlign="Left" VerticalAlign="Middle" />
<ItemStyle HorizontalAlign="Left" VerticalAlign="Top" />
</asp:BoundField>
<asp:BoundField DataField="CONTACT" HeaderText="Contact" HtmlEncode="False"
SortExpression="CONTACT">
<HeaderStyle HorizontalAlign="Left" VerticalAlign="Middle" />
<ItemStyle HorizontalAlign="Left" VerticalAlign="Top" />
</asp:BoundField>
</Columns>
<EditRowStyle BackColor="#999999" />
<FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
<HeaderStyle BackColor="#005293" Font-Bold="True" ForeColor="White" />
<PagerStyle BackColor="#284775" ForeColor="White" HorizontalAlign="Center" />
<RowStyle BackColor="#F7F6F3" ForeColor="#333333" />
<SelectedRowStyle BackColor="#E2DED6" Font-Bold="True" ForeColor="#333333" />
<SortedAscendingCellStyle BackColor="#E9E7E2" />
<SortedAscendingHeaderStyle BackColor="#506C8C" />
<SortedDescendingCellStyle BackColor="#FFFDF8" />
<SortedDescendingHeaderStyle BackColor="#6F8DAE" />
</asp:GridView>
更新:
gridview中的HTML内容似乎确实是个问题。当我将HTML Encode设置为False时,gridview将正确导出,尽管带有HTML标记。在将gridview数据分配给HtmlTextWrter之后,有没有关于如何对其重新编码的想法?请使用此代码
Response.ClearContent();
Response.ClearHeaders();
Response.AddHeader("content-disposition", "attachment;filename=Demo.xls");
Response.ContentType = "application/ms-excel";
Response.ContentEncoding = System.Text.Encoding.Unicode;
Response.BinaryWrite(System.Text.Encoding.Unicode.GetPreamble());
System.IO.StringWriter sw = new System.IO.StringWriter();
System.Web.UI.HtmlTextWriter hw = new HtmlTextWriter(sw);
Label lblheader = new Label();
lblheader.Font.Size = new FontUnit(14, UnitType.Point);
lblheader.Font.Bold = true;
lblheader.Text = "Demo Details";
lblheader.RenderControl(hw);
GrdExcel.Visible = true;
GrdExcel.RenderControl(hw);
Response.Write(sw.ToString());
Response.Flush();
Response.End();
GrdExcel.Visible = false;
使用UpdatePanel和触发器
问题是gridview中的HTML代码。它包含和标记,一旦这些被删除,它将很好地导出。您能发布gridview的标记吗?我已经编辑了您的标题。请看,如果共识是否定的,他们就不应该这样做。同样的结果被返回
<Triggers>
<asp:PostBackTrigger ControlID="BtnExcel" />
</Triggers>