Экспорт Gridview в Excel в веб-приложении - PullRequest
3 голосов
/ 10 июня 2009

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

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

<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>

Я пытаюсь экспортировать эту сетку в Excel. Есть кнопка, которую пользователь нажимает на нее, вызывает метод 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 (), все значения для сетки отображаются, но ничего не записывается.

Ответы [ 4 ]

3 голосов
/ 15 марта 2012

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

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

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

2 голосов
/ 10 июня 2009

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

Взгляните на эти образцы ...
1. c-sharpcorner
2. Мэтт Берсет
3. код проекта

1 голос
/ 10 июня 2009

Проверьте типы контента и наличие PostBackTrigger на кнопке экспорта.

Для Excel 2003

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

Для Excel 2007

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

Вы можете проверить этот пост в блоге для получения информации о моих типах контента.

РЕДАКТИРОВАТЬ: Из ваших комментариев: Вам нужно установить PostBackTrigger на панели, содержащей кнопку, выполняющую экспорт, а не на панели, содержащей GridView.

РЕДАКТИРОВАТЬ РЕДАКТИРОВАТЬ: ошибка "файл не тот, что говорит" из-за функции, называемой расширением расширений, присутствующей в Excel 2007. Проверьте этот вопрос StackOverflow для получения дополнительной информации. ; Я связался с сообщением в блоге , описывающим причину этой ошибки и возможный обходной путь.

0 голосов
/ 10 июня 2009

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...