我知道有很多关于从gridview导出到excel的详细说明的问题,但我找不到我的特殊情况。
我有一个gridview,显示搜索中包含五个字段的记录。用户可以在复选框中签入任意数量的记录。单击按钮,我可以成功将已检查的记录导出到Excel。导出为HTML。我在这里使用Matt Berseth的技术:http://mattberseth.com/blog/2007/04/export_gridview_to_excel_1.html
我添加了一个检查记录是否被用户检查的方法,这样可以正常工作。
但我要求对于导出的已检查记录,用户希望查看整个记录(即所选记录中的所有字段)。
实现这一目标的好策略是什么?
我已经尝试检索gridview中的所有字段,并将除了五个所需字段之外的所有字段都设置为不可见。然后在导出按钮单击事件中,将字段设置为可见并重新绑定。那里没有运气。
感谢您的帮助。
答案 0 :(得分:0)
听起来你应该循环遍历行以查看哪些已检查。
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 - 它是开源的,并为它提供了一个不错的框架。这是他们网站的链接:
- 编辑
阅读完您的评论后,也许这会有所帮助。
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 - 我使用自己的类来缩短代码。