0

I am using the Export Gridview to Excel. Before the Gridview appears, the user will do some filtering. I guess my Export button doesnt seem to work because I didnt put my Gridview on the page load....

heres my export code:

   protected void Button2_Click(object sender, EventArgs e)
    {
        Response.ClearContent();
        Response.AppendHeader("content-disposition", "attachment; filename=logbook.xls");
        Response.ContentType = "application/excel";

        StringWriter stringWriter = new StringWriter();
        HtmlTextWriter htmlTextWriter = new HtmlTextWriter(stringWriter);

        GridView1.RenderControl(htmlTextWriter);
        Response.Write(stringWriter.ToString());
        Response.End();
    }

my Gridview Code:

       protected void btnSearch_Click(object sender, EventArgs e)
    {
        BindGridviewData(ddlSystemList.SelectedValue);                    
    }


    private void BindGridviewData(string s)
    {

        string ConnectionStringB = ConfigurationManager.ConnectionStrings["connection"].ConnectionString;
        using (SqlConnection connectionB = new SqlConnection(ConnectionStringB))
        {
            connectionB.Open();
            SqlCommand cmd = new SqlCommand();

            if (s == "Webloan")
            { 
                cmd.Connection = connectionB;
                cmd.CommandText = "Select a.ldatetime as DATE, a.username as USERNAME, a.fullname as FULLNAME, a.description as DESCRIPTION, b.action_name as ACTION from WEBLOAN_SERVER.webloan.dbo.logbook a join WEBLOAN_SERVER.webloan.dbo.action_def b on a.action_no = b.action_no  where DATEDIFF(day,ldatetime,@date_exec1) <= 0 and DATEDIFF(day,ldatetime,@date_exec2) >= 0";
                cmd.CommandType = CommandType.Text;
            }

            if (s == "Saveplus")
            {
                cmd.Connection = connectionB;
                cmd.CommandText = "Select top 10 from WEBLOAN_SERVER.saveplus.dbo.logbook where  DATEDIFF(day,ldatetime,@date_exec) = 0";
                cmd.CommandType = CommandType.Text;
            }

            cmd.Parameters.AddWithValue("@date_exec1", txtDate.Text);
            cmd.Parameters.AddWithValue("@date_exec2", txtDate2.Text);

            SqlDataAdapter da = new SqlDataAdapter(cmd);

            DataSet ds = new DataSet();



            da.Fill(ds);
            GridView1.DataSource = ds;          
            GridView1.DataBind();
            connectionB.Close();
        }

    }

       protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
     {
        GridView1.PageIndex = e.NewPageIndex; //assign new page number
        BindGridviewData(ddlSystemList.SelectedValue);
        //GridView1.DataBind(); // bind data to gridview
     }

my page load code:

     protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {

            txtDate.Text = DateTime.Now.ToString("MM/d/yyyy");
            txtDate2.Text = DateTime.Now.ToString("MM/d/yyyy");     

        }     

     }

i also added my override code:

    public override void VerifyRenderingInServerForm(Control control)
    {
    }

Im new in ASP... I badly need help on this one.. Thank You

PS: Im using Update Panel and my Generate to Excel Button is inside my Update Panel

4

2 回答 2

1

根据您的数据进行必要的更改。

try
            {
                DataSet ds = ViewState["Data"] as DataSet;
                DataView sortedView = (ds.Tables[0]).DefaultView;
                //DataTable dt = ViewState["Data"].ToString();

                //Create a dummy GridView
                GridView GridView1 = new GridView();
                GridView1.AllowPaging = false;
                GridView1.DataSource = sortedView;
                GridView1.DataBind();
                Response.Clear();
                Response.Buffer = true;
                Response.AddHeader("content-disposition", "attachment;filename=AIDH.xls");
                Response.Charset = "";
                Response.ContentType = "application/vnd.ms-excel";
                StringWriter sw = new StringWriter();
                HtmlTextWriter hw = new HtmlTextWriter(sw);

                for (int i = 0; i < GridView1.Rows.Count; i++)
                {
                    //Apply text style to each Row
                    GridView1.Rows[i].Attributes.Add("class", "textmode");
                }
                GridView1.Caption = "AIDH Master";
                GridView1.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();
            }
            catch (Exception ex)
            {
                Master.ErrorMessage(ex.ToString());
            }
于 2013-09-23T04:19:11.983 回答
0

尝试下面的代码生成excel,在我的情况下它的工作

if (gv.Rows.Count > 0)
            {


                StringWriter tw = new StringWriter();
                HtmlTextWriter hw = new HtmlTextWriter(tw);

                //Get the HTML for the control.
                gv.RenderControl(hw);
                //Write the HTML back to the browser.
                //Response.ContentType = application/vnd.ms-excel;
                Response.ContentType = "application/vnd.ms-excel";
                Response.AppendHeader("Content-Disposition", "attachment; filename=" + strFileName);
                EnableViewState = false;
                Response.Write(tw.ToString());
                Response.End();
            }
于 2013-09-23T05:03:02.260 回答