我有一个GridView并且在后面的代码中我将它转换为页面上按钮单击事件的Excel表格.........在aspx中代码如下。
<form id="form1" runat="server">
<table width="1100" border="0" cellpadding="0" cellspacing="0" style="height:100%; background-color:White" align="center">
<tr><td> </td></tr>
<tr>
<td align="center">
<asp:Button ID="DividendEportToExcel" runat="server" Text="Convert To Excel"
CssClass="bluesome" onclick="DividendEportToExcel_Click" />
</td>
</tr>
<tr>
<td>
<asp:GridView ID="MemberDividendView" runat="server">
</asp:GridView>
</td>
</tr>
</table>
</form>
在Code Behind中我做的如下:
protected void DividendEportToExcel_Click(object sender, EventArgs e)
{
MemberDividendView.Columns.RemoveAt(5);
MemberDividendView.ShowHeader = true;
MemberDividendView.GridLines = GridLines.Both;
MemberDividendView.PagerSettings.Visible = false;
MemberDividendView.DataBind();
ChangeControlsToValue(MemberDividendView);
Response.ClearContent();
Response.AddHeader("content-disposition", "attachment; filename=AdjustmentDetialsToExcel.xls");
Response.ContentType = "application/excel";
StringWriter sWriter = new StringWriter();
HtmlTextWriter hTextWriter = new HtmlTextWriter(sWriter);
HtmlForm hForm = new HtmlForm();
MemberDividendView.Parent.Controls.Add(hForm);
hForm.Attributes["runat"] = "server";
hForm.Controls.Add(MemberDividendView);
hForm.RenderControl(hTextWriter);
Response.Write(sWriter.ToString());
Response.End();
}
private void ChangeControlsToValue(Control gridView)
{
Literal literal = new Literal();
for (int i = 0; i < gridView.Controls.Count; i++)
{
if (gridView.Controls[i].GetType() == typeof(LinkButton))
{
literal.Text = (gridView.Controls[i] as LinkButton).Text;
gridView.Controls.Remove(gridView.Controls[i]);
//gridView.Controls.AddAt(i,literal);
}
else if (gridView.Controls[i].GetType() == typeof(DropDownList))
{
literal.Text = (gridView.Controls[i] as DropDownList).SelectedItem.Text;
gridView.Controls.Remove(gridView.Controls[i]);
//gridView.Controls.AddAt(i,literal);
}
else if (gridView.Controls[i].GetType() == typeof(CheckBox))
{
literal.Text = (gridView.Controls[i] as CheckBox).Checked ? "True" : "False";
gridView.Controls.Remove(gridView.Controls[i]);
//gridView.Controls.AddAt(i,literal);
}
if (gridView.Controls[i].HasControls())
{
ChangeControlsToValue(gridView.Controls[i]);
}
}
}
BUt仍然我的专栏没有在Excel表格中被删除........ 什么是错误?
答案 0 :(得分:1)
GridView
到它的DataSource。Viusible=false
而不是删除它们您无需创建新的服务器表单,以避免在Form外部呈现Server-Control的ASP.NET异常。
你可以通过覆盖VerifyRenderingInServerForm
来避免这种行为public override void VerifyRenderingInServerForm(Control control)
{
/* Confirms that an HtmlForm control is rendered for the specified ASP.NET
server control at run time. */
}
我建议创建一个真正的excel文件,而不是只从excel解释的HTML-Table。我可以推荐EPPlus
。