策略- Gridview到Excel导出完整记录
本文关键字:记录 Excel Gridview 策略 | 更新日期: 2023-09-27 17:50:53
我知道有很多关于从gridview导出到excel的详细说明的问题,但我找不到我的特殊情况。
我有一个gridview,显示从搜索的五个字段的记录。用户可以在复选框中勾选任意数量的记录。通过单击按钮,我只能成功地将选中的记录导出到Excel中。导出为HTML格式。我在这里使用Matt Berseth的技术:http://mattberseth.com/blog/2007/04/export_gridview_to_excel_1.html
我添加了一个检查记录是否被用户检查,这工作得很好。
但是我有一个要求,对于导出的选中记录,用户希望看到整个记录(即选中记录中的所有字段)。
实现这一目标的好策略是什么?
我试过检索gridview中的所有字段,并将除五个所需字段外的所有字段设置为不可见。然后在导出按钮中单击事件,将字段设置为可见并重新绑定。那可不行。
谢谢你的帮助
听起来您应该遍历行以查看已选中的行。
foreach (GridViewRow row in gridView.Rows)
{
if(row.RowType == DataControlRowType.DataRow)
{
CheckBox cb = row.FindControl("CheckBoxID") as CheckBox;
if(cb != null && cb.Checked)
{
// Logic here.
}
}
从那里,你可以使用几种不同的机制导出到excel,这取决于你的需要。如果您只需要xls文件,我过去使用过NPOI——它是开源的,并为它提供了一个不错的框架。这是他们网站的链接:
http://npoi.codeplex.com/——编辑
看了你的评论后,也许这将有所帮助。
ASPX代码:
<asp:GridView ID="gridView" runat="server" AutoGenerateColumns="false">
<Columns>
<asp:TemplateField HeaderText="Checkbox Column">
<ItemTemplate>
<asp:CheckBox ID="CheckBoxID" runat="server" />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Visible Column">
<ItemTemplate>
<asp:Label ID="lblVisibleColumn" runat="server" Text='<%# Eval("VisibleColumn")%>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Hidden Column" Visible="false">
<ItemTemplate>
<asp:Label ID="lblHiddenColumn" runat="server" Text='<%# Eval("HiddenColumn")%>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
<asp:Button ID="btnExport" runat="server" Text="Export" OnClick="btnExport_Click" />
后端代码: public class MyDataColumn
{
public string visibleColumn { get; set; }
public string hiddenColumn { get; set; }
}
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
DataTable dataTable = new DataTable();
List<MyDataColumn> dataColumns = new List<MyDataColumn>();
for (int i = 0; i < 10; i++)
{
dataColumns.Add(new MyDataColumn()
{
visibleColumn = string.Format("Visible Column {0}", i),
hiddenColumn = string.Format("Hidden Column {0}", i)
});
}
gridView.DataSource = dataColumns;
gridView.DataBind();
}
}
protected void btnExport_Click(object sender, EventArgs e)
{
List<MyDataColumn> dataColumnsToExport = new List<MyDataColumn>();
foreach (GridViewRow row in gridView.Rows)
{
if (row.RowType == DataControlRowType.DataRow)
{
CheckBox cb = row.FindControl("CheckBoxID") as CheckBox;
if (cb != null && cb.Checked)
{
Label lblVisibleColumn = row.FindControl("lblVisibleColumn") as Label;
Label lblHiddenColumn = row.FindControl("lblHiddenColumn") as Label;
dataColumnsToExport.Add(new MyDataColumn()
{
visibleColumn = lblVisibleColumn.Text,
hiddenColumn = lblHiddenColumn.Text
});
}
}
}
GridView gridViewToExport = new GridView();
gridViewToExport.DataSource = dataColumnsToExport;
gridViewToExport.DataBind();
//Do Something With gridViewToExport
//GridViewExportUtil.Export("GridView.xls", gridViewToExport);
}
如果需要的话,这应该很容易转换为DataTable——我使用了我自己的类使其代码更短。