2009-06-10 4 views
3

Надеюсь, вы, ребята, можете мне помочь. Я пробовал много разных вещей и не мог заставить это работать.Экспорт Gridview в Excel в веб-приложении

У меня есть GridView, как показано ниже на панели обновления:

<asp:UpdatePanel ID="udpReport" runat="server" UpdateMode="Conditional" ChildrenAsTriggers="true"> 
     <ContentTemplate> 
      <asp:GridView runat="server" ID="preferenceReportGrd" AutoGenerateColumns="false" 
       AutoGenerateSelectButton="false" CaptionAlign="Top" EnableSortingAndPagingCallbacks="false" HorizontalAlign="left" CssSelectorClass="gvwPrefReport"> 
        <Columns> 
         <asp:BoundField ReadOnly="true" DataField="ClientName" HeaderText="Company Name" /> 
          <asp:BoundField ReadOnly="true" DataField="typeDescription" HeaderText="Preference" /> 
          <asp:BoundField ReadOnly="true" DataField="defaultValue" HeaderText="Default Preference" /> 
          <asp:BoundField ReadOnly="true" DataField="previousPreferenceValue" HeaderText="Previous Preference" /> 
          <asp:BoundField ReadOnly="true" DataField="selectedValue" HeaderText="New Preference" /> 
          <asp:BoundField ReadOnly="true" DataField="lastUpdated" HeaderText="Date Last Edited" /> 
        </Columns> 
      </asp:GridView> 
      <div> 
       <user:MsgLine runat="server" ID="MsgLine1" /> 
      </div> 
    </ContentTemplate> 
</asp:UpdatePanel> 

Я пытаюсь экспортировать этот GridView, чтобы преуспеть. Существует кнопка, которая пользователь нажимает на нее вызывает метод on_click для этой кнопки и в этом on_click я следующее:

 string attachment = "attachment; filename=Employee.xls";    
     Response.AddHeader("content-disposition", attachment); 
     Response.ContentType = "application/excel"; 
     StringWriter stw = new StringWriter(); 
     HtmlTextWriter htextw = new HtmlTextWriter(stw); 
     preferenceReportGrd.RenderControl(htextw); 
     Response.Write(stw.ToString()); 
     Response.End(); 

Я ничего не получаю от этого пытался отладки, кажется, что, когда я мыши над stw.tostring() все значения для gridview есть, но ничего не выписывается.

+1

Вы пробовали делать это за пределами из UpdatePanel? – TheTXI

+0

странно не уверен, как добавить html для gridview, но просто для получения дополнительной информации gridview находится в обновленной панели, а updatemode панели обновлений настроен на условное. – 2009-06-10 15:53:20

+0

Yup Я попытался избавиться от панели обновления и все равно ничего. спасибо – 2009-06-10 15:53:52

ответ

2

Если GridView и/или кнопка находятся на панели обновления с обратной записью async, я не считаю, что вы можете изменить заголовки ответов или информацию. Попробуйте запустить его снова с полной обратной передачей на триггер кнопки и посмотреть, что произойдет. Ваш код не выглядел неправильно, но я не пробовал ...

Посмотрите на этих образцах ...
1. c-sharpcorner
2. Matt Berseth
3. Code Project

+0

Те же примеры, на которые я смотрел, чтобы заставить мой код работать. Благодаря Так я добавил триггер для моей кнопки: <жерех: AsyncPostBackTrigger ControlID = "btnExportReport" EventName = "Click" /> Я думаю, я должен также упомянуть, что GridView и кнопка находится в двух разных пакетах обновления. – 2009-06-10 16:06:28

+0

Для начала попробуйте поместить сетку на стандартную страницу веб-формы без каких-либо панелей ajax или обновления и посмотреть, как это работает ... – RSolberg

+0

Также, где кнопка? Можете ли вы показать больше кода? – RSolberg

1

Проверьте типы содержимого и кнопку PostBackTrigger на кнопке экспорта.

Excel 2003

Response.ContentType = "application/vnd.ms-excel 

Для Excel 2007

Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" 

Вы можете check out this blog post для меня источником типов контента.

EDIT: Из ваших комментариев: Вам необходимо установить PostBackTrigger на панели, которая содержит кнопку, выполняющую экспорт, а не панель, содержащую GridView.

EDIT EDIT: Ошибка в файле-not-what-it-says-it-is связана с функцией, называемой Extension Hardening, присутствующей в Excel 2007. Для получения дополнительной информации просмотрите this StackOverflow question; Я связан с blog post, в котором описываются причины этой ошибки и возможное обходное решение.

+0

сэр, вы Герой. Большое вам спасибо за вашу помощь. – 2009-06-10 16:11:57

+0

Нет проблем. Кроме того, вы можете знать, что при таком экспорте экспортируемый файл не является родным файлом Excel. Это HTML-файл, который программа Excel может читать. Я имею в виду, что обязательно используйте Save As ... и измените тип на Microsoft Excel Workbook, иначе он может быть нечитаемым (я знаю, потому что сам столкнулся с этой точной проблемой). –

+0

приложение/ms-excel похоже на стандарт, использованный сегодня для этого. – RSolberg

0

Способ, которым я мог обойти это на простой странице, над которой работал, состоял в том, чтобы иметь скрытое gridview вне поля обновления и установить его равным gridview в панели обновления, чтобы они были одинаковыми (за исключением того, что новый скрыт). Затем экспортируйте эту скрытую сетку в Excel так же, как и раньше.

Одна из проблем, связанных с этим, заключается в том, что гиперссылка на экспорт также должна быть вне панели обновления, а это значит, что вы не сможете разместить гиперссылку экспорта там, где вы хотите.

Предоставлено это, вероятно, не самый лучший способ сделать это, он заставил меня обойти эту проблему в то время. Надеюсь, поможет.

3

Да. в теге панели обновления excel export не работает. Я сталкиваюсь с той же проблемой. Для решения этой проблемы можно использовать следующий код в конце панели обновления тега

</ContentTemplate>   
     <Triggers> 
     <asp:PostBackTrigger ControlID="BtnExport" /> 
    </Triggers> 
     </asp:UpdatePanel> 

он работает даже в панели обновления также

Смежные вопросы