我将 GridView 绑定(bind)到 sqldatasource,然后在 _rowcreated 事件上进行一些验证,当行不满足要求时,我使用 e.Row.Visible = false; 隐藏它
这工作正常,只在 gridview 中显示正确的行。现在我有一个按钮可以导出到 excel,除了导出隐藏的行之外,它的效果很好。我不想导出隐藏的行。
有没有办法告诉gridview不要添加该行而不是隐藏它?
在我运行导出之前,有没有一种简单的方法可以删除所有隐藏的行?
我可以在导出期间不添加隐藏行吗?正如您在下面的代码中看到的那样,我尝试执行此操作,但它无法识别该行是否可见。
导出代码:
public static void Export(string fileName, GridView gv)
{
HttpContext.Current.Response.Clear();
HttpContext.Current.Response.AddHeader(
"content-disposition", string.Format("attachment; filename={0}", fileName));
HttpContext.Current.Response.ContentType = "application/ms-excel";
using (StringWriter sw = new StringWriter())
{
using (HtmlTextWriter htw = new HtmlTextWriter(sw))
{
// Create a form to contain the grid
Table table = new Table();
gv.GridLines = GridLines.Both;
table.GridLines = gv.GridLines;
//table.BackColor = Color.Yellow;
// add the header row to the table
if (gv.HeaderRow != null)
{
GridViewExportUtil.PrepareControlForExport(gv.HeaderRow);
table.Rows.Add(gv.HeaderRow);
//color the header
table.Rows[0].BackColor = gv.HeaderStyle.BackColor;
table.Rows[0].ForeColor = gv.HeaderStyle.ForeColor;
}
// add each of the data rows to the table
foreach (GridViewRow row in gv.Rows)
{
if (row.Visible == true)
{
GridViewExportUtil.PrepareControlForExport(row);
table.Rows.Add(row);
}
}
// color the rows
bool altColor = false;
for (int i = 1; i < table.Rows.Count; i++)
{
if (!altColor)
{
table.Rows[i].BackColor = gv.RowStyle.BackColor;
altColor = true;
}
else
{
table.Rows[i].BackColor = gv.AlternatingRowStyle.BackColor;
altColor = false;
}
}
// render the table into the htmlwriter
table.RenderControl(htw);
// render the htmlwriter into the response
HttpContext.Current.Response.Write(sw.ToString());
HttpContext.Current.Response.End();
}
}
}
最佳答案
http://mattberseth.com/blog/2007/04/export_gridview_to_excel_1.html
我从未使用过 GridViewExportUtil,但为什么不编辑他的代码呢?
private static void PrepareControlForExport(Control control)
{
for (int i = 0; i < control.Controls.Count; i++)
{
Control current = control.Controls[i];
//-----------------------------
// * my addition
if (!current.Visible) continue;
//-----------------------------
if (current is LinkButton)
{
control.Controls.Remove(current);
control.Controls.AddAt(i, new LiteralControl((current as LinkButton).Text));
}
else if (current is ImageButton)
{
//...
关于c# - 将 GridView 导出到 excel #2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7943841/