Рейтинг:
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, так как он говорит, что он поврежден. Я пытаюсь найти альтернативное решение
Developer29
Спасибо...Да...это экспорт excel....it-это не привязка к gridview...Как получить данные gridview в обработчике..Извини, что я новичок в этом деле...Можете ли вы сказать код..и я хочу экспортировать то же самое, что и в gridview..например, с помощью функции expand & collapse..
CHill60
Извините, я не совсем понимаю ваш вопрос. Возможно, стоит начать новую тему, поскольку сейчас вы задаете новые вопросы. Это также означает, что больше людей потенциально смогут помочь.
Постарайтесь подробно объяснить, что вы пытаетесь сделать , и не используйте то же название, что и этот вопрос
Developer29
Я хочу экспортировать excel...Но формат excel должен быть таким же, как и формат сетки..Я использую вложенный gridview в своей программе..
CHill60
Тогда определенно стоит поднять новый вопрос. Я никогда не использовал вложенные gridviews.
Developer29
Да, конечно..Я....можете ли вы сказать мне, как привязать данные GridView в универсальный обработчик .данного