2013-08-05 4 views
3

Я использую следующий код для экспорта данных gridview в excel, но проблема в том, что весь экспорт страницы в excel. Я хочу только данные сетчатого обзора не экспортировать всю страницу. Как решить эту проблему?Экспорт данных Gridview в Excel в ASP.NET Связывание данных Linq

HtmlForm form = new HtmlForm(); 
Response.Clear(); 
Response.Buffer = true; 
string filename = "GridViewExport_" + DateTime.Now.ToString() + ".xls"; 

Response.AddHeader("content-disposition", "attachment;filename=" + filename); 
Response.Charset = ""; 
Response.ContentType = "application/vnd.ms-excel"; 
StringWriter sw = new StringWriter(); 
HtmlTextWriter hw = new HtmlTextWriter(sw); 
gdvInBox.AllowPaging = false; 
gdvInBox.DataBind(); 
form.Controls.Add(gdvInBox); 
this.Controls.Add(form); 
form.RenderControl(hw); 

//style to format numbers to string 
string style = @"<style> .textmode { mso-number-format:\@; } </style>"; 
Response.Write(style); 
Response.Output.Write(sw.ToString()); 
Response.Flush(); 
Response.End(); 

Спасибо заранее.

ответ

7

Довольно легко настроить экспорт excel, который будет экспортировать только gridview. Это было протестировано и будет экспортировать только gridview, отображаемое на вашей веб-странице.

Для вашего C# кода используйте следующее:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 

public partial class vxcel_export : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
    } 

    protected void Button2_Click(object sender, EventArgs e) 
    { 
     Response.Clear(); 
     Response.AddHeader("content-disposition", "attachment;filename=file-name.xls"); 
     Response.ContentType = "application/vnd.xlsx"; 
     System.IO.StringWriter stringWrite = new System.IO.StringWriter(); 
     System.Web.UI.HtmlTextWriter htmlWrite = new HtmlTextWriter(stringWrite); 
     GridView1.RenderControl(htmlWrite); 
     Response.Write(stringWrite.ToString()); 
     Response.End(); 
    }  

    public override void VerifyRenderingInServerForm(Control control) 
    { 
    } 
} 

В коде ASPX использовать следующее:

Убедитесь, что вы добавить EnableEventValidation="false" к <%@Page %> кода в верхней части страницы.

Поместите следующий код, где вы хотите поместить кнопку, чтобы экспортировать GridView в Excel:

<asp:Button ID="Button2" runat="server" OnClick="Button2_Click" Text="Whatever you want your button to say" /> 

Вы можете изменить высоту и ширину до размера вы хотите в кнопке.

Все. Следует иметь в виду, что при экспорте файла это не настоящий файл excel, пока вы не сохраните его как книгу/файл Excel.

+0

Как бы вы сделать такую ​​же штуку работать от пользовательского элемента управления? Вы не можете переопределить VerifyRendering – BRogers

0

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

public override void VerifyRenderingInServerForm(Control control) 
{ 
    /* Confirms that an HtmlForm control is rendered for the specified ASP.NET 
    server control at run time. */ 
} 

Я нашел решение здесь ->GridView must be placed inside a form tag with runat="server" even after the GridView is within a form tag

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