后台导出GridView到Excel,可选择要导出的列

来源:互联网 发布:js 调试工具 编辑:程序博客网 时间:2024/05/18 20:10

前端的GridView不要用自动生成列,否则取不到列的资料,不知自动生成列有什么办法?

前端增加一个CheckBoxList用来显示GridView列,导出的时候选择:

    <asp:Panel ID="panel1" runat="server" Style="display: none; text-align: center; width: 500px;">        <div style="width: 500px; margin: 0 auto; border: 2px solid green; text-align: center;            background-color: Silver;">            <asp:Panel ID="Panel2" runat="server">                <div class="thead" style="line-height: 30px; height: 30px; cursor:move;">                    <span style="float: left; padding-left: 5px;">请选择要导出的列</span> <span style="float: right;                        clear: both; padding-right: 5px;">                        <img src="../icon/cancel.png" onclick="document.getElementById('panel1').style.display='none';"                            style="vertical-align: middle; cursor:pointer;" alt="单击关闭" />                    </span>                </div>            </asp:Panel>            <asp:CheckBoxList ID="CheckBoxList1" runat="server" RepeatColumns="4" CellPadding="5"                CellSpacing="0" RepeatDirection="Horizontal" Width="500px">            </asp:CheckBoxList>            <asp:Button ID="Button1" runat="server" Text="确定导出" CssClass="SmallButton" Style="margin: 5px 10px 5px 10px;                float: right;" OnClick="Button1_Click" />        </div>    </asp:Panel>    <asp:AlwaysVisibleControlExtender ID="AlwaysVisibleControlExtender1" runat="server"        TargetControlID="panel1" HorizontalSide="Center" VerticalOffset="100">    </asp:AlwaysVisibleControlExtender>    <asp:DragPanelExtender ID="DragPanelExtender1" runat="server" TargetControlID="panel1" DragHandleID="Panel2">    </asp:DragPanelExtender>

后端在加载时填充CheckBoxList:

protected void Page_Load(object sender, EventArgs e)    {        if (!IsPostBack)        {             for (int i = 0; i < GridView1.Columns.Count; i++)            {                if(GridView1.Columns[i] is BoundField)                {                    if (GridView1.Columns[i].Visible && GridView1.Columns[i].HeaderStyle.CssClass!="hide")                    {                        CheckBoxList1.Items.Add(new ListItem(GridView1.Columns[i].HeaderText, ((BoundField)this.GridView1.Columns[i]).DataField));                    }                }            }            for (int i = 0; i < CheckBoxList1.Items.Count; i++)            {                CheckBoxList1.Items[i].Selected = true;            }        }    }

导出按钮:

    protected void Button1_Click(object sender, EventArgs e)    {        string text = "";        string value="";        for (int i = 0; i < CheckBoxList1.Items.Count; i++)        {            if (CheckBoxList1.Items[i].Selected)            {                text += CheckBoxList1.Items[i].Text + ",";                value += CheckBoxList1.Items[i].Value + ",";            }        }        if (text != "")        {            text = text.Substring(0, text.Length - 1);            value = value.Substring(0, value.Length - 1);            string[] oldColName = value.Split(',');            string[] newColName = text.Split(',');
            //获取数据,代码根据需要自行编写            System.Data.DataTable dt = getData().ToTable() ;            ExcelHelper.ExportByWeb(dt, date1.Text + "~" + date2.Text + "工作表标题", "文件名.xls", "工作表名称",oldColName,newColName);        }    }



导出时调用的代码见另外一篇文章:

http://blog.csdn.net/apollokk/article/details/8025611


原创粉丝点击