您的位置:首页 > 其它

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

2012-09-27 17:08 316 查看
前端的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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: