使用删除一些选定列将GridView导出到Excel

时间:2012-09-07 10:13:49

标签: excel gridview

我在这里使用GridView来显示数据。为了将Gridview数据导出为ex​​cel格式,我使用了一个按钮 - "Download into Excel"。下载到Excel格式或导出到Excel是完美的。 GridView共显示9列。

我的问题是我想在Excel表格中显示7列(根据我们的选择)。 显示的GridView应该像往常一样保留,但Excel只会显示我们想要的那些列。

我已经使用过GridView1.Columns.RemoveAt(2); 但这会随机删除更多数量的列。

4 个答案:

答案 0 :(得分:3)

.Net 4.0; VS2012

在我的类似案例中 - 大致是Kedar所描述的,包括按钮和看到100%的网格导出 - 我已经得出结论,试图让RemoveAt(索引)完成它的工作去除它是徒劳的我正在导出的gridview中的一列。我不知道它为什么没有,但我的gridview在RemoveAt后总是没有变化。

我在董事会上看到了一个类似的问题,其中接受了答案 - 对于想要导出到Excel的海报,再次希望在导出时隐藏指定的列 - 只是让他不想要的列不是.Visible 。受访者虽然做出了贡献,却忽略了这一点:目标是让有问题的列不出现在EXPORT上 - 不仅仅是从屏幕显示中消失,隐藏列很简单(设置为Visible = false)。

在我的情况下,我试图在gridview上丢失列,当它被发送到Excel时,没有重新绑定,也没有引入动态的sql。我认为它可能是一个失败的原因,因为我只是没有看到RemoveAt(索引)工作,即使没有导致错误。我很困惑我可能会做什么导致gridview.Columns.RemoveAt(index)非常可靠地不执行它的功能:所有列在我完成之后仍然存在。

在下面的代码中,我的目标已经减少到尝试删除单个列,以验证RemoveAt(index)将执行任何操作。

GridView gProgramProposalRequests出现在用户界面中 我正在制作它的副本gridForExport,因为我想删除列,然后将gridForExport传递给导出方法。 “标题”是我网格中的一列,用作此次运行中的示例列。

        GridView gridForExport = (GridView)gProgramProposalRequests;

        gridForExport.AutoGenerateColumns = false;

        for (int i = 0; i < gridForExport.Columns.Count; i++)
        {
            if (gridForExport.Columns[i].HeaderText == "Title")
                gridForExport.Columns.RemoveAt(i);

        }

循环后,“标题”仍然存在。我以为我告诉应用程序删除名为Title的列。我看着执行游标执行RemoveAt行。我指定哪一列无关紧要 - 在此循环执行后,我仍然可以找到我命名的列。

跟进 - 我没有成功尝试从GridView的集合中删除列。现在,我有点喜欢将CSV内容写入响应而得到的结果,阻止我添加指定的列。但我必须弄清楚如何在内容字段中处理逗号。感谢http://wiki.asp.net/page.aspx/401/export-to-csv-file/

答案 1 :(得分:2)

使用RemoveAt函数后需要对gridview进行数据绑定:

GridView1.Columns.RemoveAt(0);
GridView1.DataBind();

答案 2 :(得分:0)

GridView1.Columns(0).Visible = False

将0替换为要删除的列(从0,1,2〜开始计数,依此类推) 可以在我的gridview excel报告中使用。

答案 3 :(得分:0)

RemoveAt()无法正常工作

尝试这样的事情

int i;
for (i = 0; i < GV.Columns.Count; i++)
{
     if (GV.Columns[i].HeaderText == "Title")
     {
          GV.Columns[i].Visible = false;
          break;
     }
}


GV.RenderControl(htmltextwrtter);
Response.Write(strwritter.ToString());
Response.Flush();
Response.End();
GV.Columns[i].Visible = true;