【问题标题】:Problems with exporting gridview content to Excel, divs and asp:content将 gridview 内容导出到 Excel、div 和 asp:content 时出现问题
【发布时间】:2013-11-22 15:28:08
【问题描述】:

我有以下问题,直到昨天我的网络应用程序运行良好,我的内容页面中有/有(一切正常):

  • 将结果显示到我拥有的唯一网格视图中的查询按钮
  • 将 gridview 内容导出到 Excel 的导出到 excel 按钮
  • 将网格视图作为电子邮件附件发送的电子邮件按钮

在我的母版页上,我有一个带有 asp:contentplaceholder 的 div 类,然后在我的内容页上,我用母版页上占位符的 id 调用 asp:content,内容页上的这一部分包含按钮然而,除了 gridview 之外,由于我的查询显示了数千条记录,我想让 gridview 在高度上可滚动。

为了实现这一点,我在包含所有内容的下面创建了另一个 div 类,为其命名并在 css 上固定它的大小并使其可滚动,然后我将 gridview 拖到可滚动的 asp:content 部分内。 gridview 显示查询结果很好,它可以像我想要的那样滚动,但是,当我尝试将 gridview 内容导出到 excel 或发送带有 excel 附件的电子邮件时,excel 在这两种情况下都是空的,我没有改变导出到 excel 按钮,是什么搞砸了导出?

我将发布相关的代码:

Excel 按钮

protected void Buttonexcel_Click(object sender, EventArgs e)
{

    try
    {
        Response.Clear();
        Response.Buffer = true;
        Response.ContentType = "application/vnd.ms-excel";
        Response.Charset = "";
        Response.AddHeader("content-disposition", "attachment;filename=dados.xls");
        StringWriter sWriter = new StringWriter();
        HtmlTextWriter hWriter = new HtmlTextWriter(sWriter);
        GridView1.RenderControl(hWriter);
        Response.Output.Write(sWriter.ToString());
        Response.Flush();
        Response.End();
    }
    catch (Exception ex)
    {
        Label1.Text = ex.ToString();
    }

}
public override void VerifyRenderingInServerForm(Control control)
{
    /* Verifies that the control is rendered, tem a ver com o botão de exportação para excel*/
}

包含按钮和网格视图的母版页部分

<div class="span8"><asp:ContentPlaceHolder ID="rightcontent" runat="server"></asp:ContentPlaceHolder></div><div class="scrollable"><asp:ContentPlaceHolder ID="rightcontentdown" runat="server"></asp:ContentPlaceHolder></div>

包含按钮和网格视图的内容页面部分,我在这里有一个表单标签,该标签会导致导出无法正常工作吗?

【问题讨论】:

  • 如果它是空的,你能在Buttonexcel_Click事件中检查你的gridview吗?
  • @suraj singh,我如何检查 gridview 是否为空?
  • 如果我输入那段代码我得到错误'System.Web.UI.WebControls.GridViewRowCollection'不包含'Count'的定义并且没有扩展方法'Count'接受第一个可以找到类型为“System.Web.UI.WebControls.GridViewRowCollection”的参数(您是否缺少 using 指令或程序集引用?)也许我没有将它放在正确的位置或者它缺少什么?
  • 我很抱歉我的错误......使用这个int rowCount = Convert.ToInt32(GridView1.Rows.Count);

标签: c# asp.net excel html gridview


【解决方案1】:

好吧,我认为您在绑定 gridview 之前调用 Buttonexcel_Click 事件,或者您的 Binding 方法在内部(!Page.Postback),但是尝试下面的代码,我在按钮单击事件中再次填充 gridview。然后导出它脱颖而出 。

试试这个

      string attachment = "attachment; filename=xxxx" + DateTime.Now + ".xls";
                Response.ClearContent();
                Response.AddHeader("content-disposition", attachment);
                Response.ContentType = "application/ms-excel";
                datatable dt = new datatable();
                  // dt =  Your query to get result 

                using (StringWriter sw = new StringWriter())
                {
                    using (HtmlTextWriter htw = new HtmlTextWriter(sw))
                    {                 
                        GridView1.DataSource = dt;//Bind your gridview 
                        GridView1.DataBind();
                        dg.RenderControl(htw);
                        Response.Write(sw.ToString());
                        Response.End();
                    }
                }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多