在转换为 Excel 时从网格视图中删除列
本文关键字:网格 视图 删除列 转换 Excel | 更新日期: 2023-09-27 18:31:55
我有一个网格视图,在代码隐藏中,我正在页面中的按钮单击事件上将其转换为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>
在代码隐藏中,我执行以下操作:
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 工作表中删除......错误是什么?
- 如果要在
- 导出之前删除列,则需要将
GridView
数据绑定到其数据源。 - 尝试将它们设置为
Viusible=false
而不是删除它们 您无需创建新的服务器窗体来避免服务器控件在窗体外部呈现 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 表。我可以推荐
EPPlus
。