Developer29 Ответов: 2

Как экспортировать excel из gridview?


Привет.....У меня есть данные во вложенном gridview, например, при нажатии кнопки " + " они будут расширяться...точно так же я хочу экспортировать excel из сетки..


Если я нажимаю"+", я также хочу видеть детали в excel..

Может ли кто-нибудь помочь в этом...

Что я уже пробовал:

public override void VerifyRenderingInServerForm(Control control)
      {
          //required to avoid the run time error "
          //Control 'GridView1' of type 'Grid View' must be placed inside a form tag with runat=server."
      }


protected void BtnexportExcel(object sender, EventArgs e)
        {
            Response.Clear();
            Response.Buffer = true;
            Response.ClearContent();
            Response.ClearHeaders();
            Response.Charset = "";
            string FileName = "Report" + DateTime.Now + ".xls";
            StringWriter strwritter = new StringWriter();
            HtmlTextWriter htmltextwrtter = new HtmlTextWriter(strwritter);
            Response.Cache.SetCacheability(HttpCacheability.NoCache);
            Response.ContentType = "application/vnd.ms-excel";
            Response.AddHeader("Content-Disposition", "attachment;filename=" + FileName);
            GvDetailPrimary.GridLines = GridLines.Both;
            GvDetailPrimary.HeaderStyle.Font.Bold = true;
            GvDetailPrimary.RenderControl(htmltextwrtter);
            Response.Write(strwritter.ToString());
            Response.End();

        }

Harshal Kale

http://www.c-sharpcorner.com/UploadFile/0c1bb2/export-gridview-to-excel/

CHill60

Вы могли бы опубликовать это как решение

Harshal Kale

Спасибо

2 Ответов

Рейтинг:
2

CHill60

5'd (и я исправил ссылку для вас)

Developer29

Привет..... код не показывает никаких ошибок, в то же время он не экспортирует файлы..

CHill60

Ты не отправил никакого кода! Вы пробовали отладку? Или использовать Улучшить вопрос ссылка для добавления кода, который вы используете, к вашему вопросу

Developer29

да, я тоже пробовал отлаживать ... я опубликовал код...и добавил EnableEventValidation= "false" в & lt;%@page register

CHill60

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

Рейтинг:
1

CHill60

ОП прокомментировал, что пример в ссылке из решения 1 не работает. Я это подтвердил. Excel загружается, но данные из сетки не экспортируются.

Я не могу быть обеспокоен тем, чтобы выяснить, почему эта версия не работает, так что вот альтернатива
Экспорт GridView в Excel в ASP.Net с форматированием с использованием C# и VB.Net[^]
(Я проверил, что этот код работает, но мне пришлось вручную добавить OnPageIndexChanging событие - не знаю почему)

Вот мой полный код, который сработал:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication4.Default" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>Test</title>
</head>
<body>

<form runat="server" id="form1">
    <asp:GridView ID="GridView1" HeaderStyle-BackColor="#3AC0F2" HeaderStyle-ForeColor="White"

        RowStyle-BackColor="#A1DCF2" AlternatingRowStyle-BackColor="White" AlternatingRowStyle-ForeColor="#000"

        runat="server" AutoGenerateColumns="false" AllowPaging="true" OnPageIndexChanging="GridView1_PageIndexChanging">
        <Columns>
            <asp:BoundField DataField="ContactName" HeaderText="Contact Name" ItemStyle-Width="150px" />
            <asp:BoundField DataField="City" HeaderText="City" ItemStyle-Width="100px" />
            <asp:BoundField DataField="Country" HeaderText="Country" ItemStyle-Width="100px" />
        </Columns>
    </asp:GridView>

    <br />
    <asp:Button ID="btnExport" runat="server" Text="Export To Excel" OnClick = "Button1_Click" />
    
</form>
</body>
</html>

using System;
using System.IO;
using System.Data;
using System.Drawing;
using System.Data.SqlClient;
using System.Configuration;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace WebApplication4
{
    public partial class Default : Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                BindGrid();
            }
        }
        public override void VerifyRenderingInServerForm(Control control)  
        {  
             //required to avoid the run time error "  
             //Control 'GridView1' of type 'Grid View' must be placed inside a form tag with runat=server."  
        }  
        private void ExportGridToExcel()  
        {
            Response.Clear();
            Response.Buffer = true;
            Response.AddHeader("content-disposition", "attachment;filename=GridViewExport.xls");
            Response.Charset = "";
            Response.ContentType = "application/vnd.ms-excel";

            using (var sw = new StringWriter())
            {
                var hw = new HtmlTextWriter(sw);

                //To Export all pages
                GridView1.AllowPaging = false;

                BindGrid();

                GridView1.HeaderRow.BackColor = Color.White;

                foreach (TableCell cell in GridView1.HeaderRow.Cells)
                {
                    cell.BackColor = GridView1.HeaderStyle.BackColor;
                }

                foreach (GridViewRow row in GridView1.Rows)
                {
                    row.BackColor = Color.White;

                    foreach (TableCell cell in row.Cells)
                    {
                        cell.BackColor = row.RowIndex % 2 == 0 ? GridView1.AlternatingRowStyle.BackColor : GridView1.RowStyle.BackColor;
                        cell.CssClass = "textmode";
                    }
                }

                GridView1.RenderControl(hw);

                //style to format numbers to string
                const string style = @"<style> .textmode { } </style>";
                Response.Write(style);
                Response.Output.Write(sw.ToString());
                Response.Flush();
                Response.End();
            }   
        }  
        private void BindGrid()
        {
            var constr = ConfigurationManager.ConnectionStrings["ConnectToDB"].ConnectionString;

            using (var con = new SqlConnection(constr))
            {
                using (var cmd = new SqlCommand("SELECT CustomerId, ContactName, City, Country FROM Customers"))
                {
                    using (var sda = new SqlDataAdapter())
                    {
                        cmd.Connection = con;
                        sda.SelectCommand = cmd;
                        using (var dt = new DataTable())
                        {
                            sda.Fill(dt);
                            GridView1.DataSource = dt;
                            GridView1.DataBind();
                        }
                    }
                }
            }
        }

        protected void Button1_Click(object sender, EventArgs e)
        {
            ExportGridToExcel();  
        }
        protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            GridView1.PageIndex = e.NewPageIndex;
            BindGrid();
        }
    }
}


Developer29

Я выполнил с помощью try catch....It выбрасывает эту ошибку...
ex = {невозможно вычислить выражение, потому что код оптимизирован или собственный фрейм находится поверх стека вызовов.}

Developer29

Другое решение также показывает ошибку.Он не поддерживает "цвет". Я также использую пространство имен.
использование системы.Рисование;
используя системы.Текст;
с помощью iTextSharp.текст;
использование системы.ИО;
используя системы.Текст.RegularExpressions;
использование системы.Нарезание резьбы;

CHill60

Выполнил то, что с помощью Try...Поймать? Ваш исходный код? Какая строка вызвала исключение?

CHill60

Это должно быть "цвет", а не "цвет". Ссылка, которую я предоставил, действительно работает - я попробовал ее перед публикацией.

Developer29

Я гуглю...Это может быть ответ.();
Заменить Свойство HttpContext.Тока.ApplicationInstance.CompleteRequest();
Но тоже не получаю файл Excel.

CHill60

Я только что обновил свой пост полным рабочим примером (без web.config, который содержит подробную информацию о моей строке подключения)

Developer29

В вашем профиле?

Developer29

Он бросает....
цвет "неоднозначен в пространстве имен "system. drawing"

Developer29

можете ли вы предоставить ссылку...

CHill60

В приведенном выше решении, которое мы комментируем , я предоставил ссылку на решение, и теперь я обновил то же самое решение своим рабочим кодом

CHill60

Это означает, что "цвет" был определен в одном из ваших других пространств имен. Попробуйте использовать полное имя System.Drawing.Color на линиях, которые вызывают проблему

Developer29

извините за неудобства...и снова он выдает ту же ошибку..Я не знаю, в чем проблема..

ex = {невозможно вычислить выражение, потому что код оптимизирован или собственный фрейм находится поверх стека вызовов.}

CHill60

Какая строка выбрасывает исключение?

Developer29

Ответ.Конец();

CHill60

Ах, извините, в этом-то и проблема. Я думал, вы собираетесь заменить его на HttpContext.Current.ApplicationInstance.CompleteRequest();
К сожалению, когда я это делаю, я не могу открыть файл excel, так как он говорит, что он поврежден. Я пытаюсь найти альтернативное решение

CHill60

Попробуйте вместо этого этот метод - извините, что у меня нет времени проверить его должным образом в данный момент
DevTechie / экспорт в Excel из ASP.NET использование HTTP-обработчика[^]

Developer29

Спасибо...Да...это экспорт excel....it-это не привязка к gridview...Как получить данные gridview в обработчике..Извини, что я новичок в этом деле...Можете ли вы сказать код..и я хочу экспортировать то же самое, что и в gridview..например, с помощью функции expand & collapse..

CHill60

Извините, я не совсем понимаю ваш вопрос. Возможно, стоит начать новую тему, поскольку сейчас вы задаете новые вопросы. Это также означает, что больше людей потенциально смогут помочь.
Постарайтесь подробно объяснить, что вы пытаетесь сделать , и не используйте то же название, что и этот вопрос

Developer29

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

CHill60

Тогда определенно стоит поднять новый вопрос. Я никогда не использовал вложенные gridviews.

Developer29

Да, конечно..Я....можете ли вы сказать мне, как привязать данные GridView в универсальный обработчик .данного