Проблемы с экспортом содержимого gridview в Excel, divs и asp: content

0

У меня есть следующая проблема: до вчерашнего дня мое веб-приложение работало отлично, у меня/было на моей странице содержания (все работало):

  • кнопки запроса, отображающие их результаты, в единственное gridview, которое у меня есть
  • экспортировать в excel кнопку, которая экспортировала содержимое gridview в Excel
  • кнопки электронной почты, которые отправляют gridview в виде вложения электронной почты

На моей главной странице у меня есть div-класс с asp: contentplaceholder, а затем на моей странице содержимого я вызываю asp: content с идентификатором заполнителя на главной странице, этот раздел на странице содержания содержал кнопки, а также gridview, однако, поскольку мои запросы отображают тысячи записей, я хотел бы сделать gridview прокручиваемым по высоте.

для этого я создал еще один класс div, один из которых содержал все, дал ему имя, а на css исправил его размер и сделал прокруткой, а затем перетащил gridview внутри прокручиваемой секции asp: content. gridview отображает результаты запроса просто отлично, и он прокручивается так же, как я хотел, однако, когда я пытаюсь экспортировать содержимое gridview, чтобы преуспеть или отправить электронное письмо с вложением 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>

разделы содержания, содержащие кнопки и gridview, у меня есть тег формы здесь, может ли тег привести к тому, что экспорт не работает правильно?

Изображение 174551

  • 0
    Не могли бы вы проверить свой gridview в событии Buttonexcel_Click если он пуст?
  • 0
    @Suraj Singh, как я могу проверить, пусто ли вид сетки?
Показать ещё 2 комментария
Теги:
excel
gridview

1 ответ

0

Ну, я думаю, что вы вызываете событие Buttonexcel_Click прежде чем связывать свой gridview или ваш метод Binding внутри (! Page.Postback). Однако попробуйте код ниже здесь. Я снова заполняю gridview в событии нажатия кнопки, а затем экспортирую его в excel.

Попробуй это

      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();
                    }
                }

Ещё вопросы

Сообщество Overcoder
Наверх
Меню