策略- 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中的所有字段,并将除五个所需字段外的所有字段设置为不可见。然后在导出按钮中单击事件,将字段设置为可见并重新绑定。那可不行。

谢谢你的帮助

策略- Gridview到Excel导出完整记录

听起来您应该遍历行以查看已选中的行。

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——我使用了我自己的类使其代码更短。