3 messaggi dal 01 dicembre 2008
ciao a tutti,
ho qualche problema con l'export di una datadrid in excel.
l'errore e`: Control 'DataGrid1__ctl9__ctl1' of type 'DataGridLinkButton' must be placed inside a form tag with runat=server.
(se serve posso includere tutto lo stack trace).

questo e` il codice c# che (dovrebbe) generare il file xls:

Response.Buffer = true;
Response.Clear();
Response.ContentType = "application/vnd.ms-excel";
Response.AddHeader("Content-Disposition", "attachment;filename=" + filename);
Response.Charset = "";
Response.Cache.SetCacheability(HttpCacheability.NoCache);
StringWriter stringWrite = new StringWriter();
HtmlTextWriter htmlWrite = new HtmlTextWriter(stringWrite);
DataGrid1.RenderControl(htmlWrite);
Response.Write(stringWrite.ToString());
Response.End();

l'export funziona solo se la mia datagrid visualizza meno pagine di quelle impostate nella propriera` Page Size.

cosa posso fare?

grazie a tutti!
ciao.
Ciao,

prova questo esempio:

N.B prima devi impostare la connessione al database e la query SQL


<%@ Page Language="C#" %>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Text" %>
<%@ Import Namespace="System.IO" %>
<%@ Import Namespace="System.Data.SqlClient" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">
    protected System.Web.UI.HtmlControls.HtmlForm form2;
    string filename = "Export.xls";
    bool clickExport = false;

    protected void Page_Load(object sender, EventArgs e)
    {
        SqlConnection conn = new SqlConnection("Data Source=.\\SQLEXPRESS;Initial Catalog=Northwind;Integrated Security=True");
        SqlCommand selectCmd = new SqlCommand("SELECT * FROM Products", conn);
        SqlDataAdapter dataAdpt = new SqlDataAdapter(selectCmd);
        DataTable dt = new DataTable();

        dataAdpt.Fill(dt);
        DataGrid1.DataSource = dt;
        DataGrid1.DataBind();
    }

    protected void Page_PreRender(object sender, EventArgs e)
    {
        if (clickExport)
        {
            form2 = new System.Web.UI.HtmlControls.HtmlForm();
            this.Page.Controls.Add(form2);

            form2.Controls.Clear();
            form2.Controls.Add(DataGrid1);
            form2.EnableViewState = false;
        }

    }

    protected override void Render(HtmlTextWriter writer)
    {
        if (clickExport)
        {
            System.Text.StringBuilder sb = new System.Text.StringBuilder();
            System.IO.StringWriter sw = new System.IO.StringWriter(sb);
            HtmlTextWriter hw = new HtmlTextWriter(sw);
            form2.RenderControl(hw);

            //Recupera l'HTML di form2
            string htmlForm2 = sb.ToString();

            //Rimuove il secondo form
            this.Page.Controls.Remove(form2);

            Response.Buffer = true;
            Response.Clear();
            Response.ContentType = "application/vnd.ms-excel";
            Response.AddHeader("Content-Disposition", "attachment;filename=" + filename);
            Response.Charset = "";
            Response.Cache.SetCacheability(HttpCacheability.NoCache);

            // Passa l'HTML da esportare 
            Response.Write("<html><body>");
            Response.Write(htmlForm2.ToString());
            Response.Write("</body></html>");
            Response.End();

        }

        // Si lascia inalterato HtmlTextWriter della pagina
        base.Render(writer);
    }

    protected void Button1_Click(object sender, EventArgs e)
    {
        clickExport = true;
    }
</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Pagina senza titolo</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" />
        <asp:DataGrid ID="DataGrid1" runat="server" AutoGenerateColumns="True">
        </asp:DataGrid>
    </div>
    </form>
</body>
</html>


Sem Tamburella

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.
Community
Ultimi messaggi
UTENTI ONLINE
In primo piano

I più letti di oggi

Media
In evidenza
MISC