【问题标题】:Export GridView to Excel with Remove some selected columns将 GridView 导出到 Excel 并删除一些选定的列
【发布时间】:2012-09-07 10:13:48
【问题描述】:

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

我的问题是我想在 Excel 工作表中显示 7 列(根据我们的选择)。 显示的GridView 应该保持不变,但 Excel 将只显示我们想要的那些列。

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

【问题讨论】:

  • 我已经更新了问题,请检查。

标签: excel gridview


【解决方案1】:

.Net 4.0; VS2012

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

我在一个板子上看到了一个类似的问题,其中接受的答案 - 一个想要导出到 Excel 的海报,再次想要在导出时隐藏指定的列 - 只是让他不需要的列不可见。 .受访者虽然乐于提供帮助,但没有抓住重点:目标是让相关列不出现在 EXPORT 中 - 不仅仅是从屏幕显示中消失,隐藏列很简单(设置 Visible=false)。

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

在以下代码中,我的目标已简化为尝试删除单个列,以验证 RemoveAt(index) 是否会执行任何操作。

GridView gProgramProposalRequests 出现在 UI 中。
我正在复制它,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/

【讨论】:

  • 欢迎来到 Stack Overflow!如果您有新问题,请点击 按钮提出问题。如果您有足够的声誉,you may upvote 的问题。或者,将其“加星标”作为收藏夹,您将收到任何新答案的通知。
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

    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;
    

    【讨论】:

      【解决方案4】:
      GridView1.Columns(0).Visible = False
      

      将 0 替换为要删除的列(从 0,1,2~ 开始计数) 它适用于我的 gridview excel 报告。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-09-25
        • 1970-01-01
        相关资源
        最近更新 更多