Невозможно экспортировать Excel - PullRequest
0 голосов
/ 13 января 2020

У меня есть 2 проблемы, которые могут быть не связаны.

  1. Мне не удалось экспортировать лист Excel

  2. Я получаю эту ошибку at Response.End ()

Поток был прерван

Для первой проблемы я попытался проверить, работает код или нет, выполнив следующий

.aspx.cs

private void BindSalesMargin()
{
    DataTable dt = new DataTable();
    objAcc.CompanyID = Convert.ToInt16(ddlCompany.SelectedValue);
    objAcc.LocID = ddlLocation.Text;
    objAcc.dtFrom = Calendar1.SelectedDate;
    objAcc.dtTo = Calendar2.SelectedDate;
    if (ddlResult.SelectedValue == "0")
    {
        objAcc.Result = "Under,Over,OK";
    }
    else
    {
        objAcc.Result = ddlResult.Text;
    }
    dt = objAcc.Sale_MarginMail();
    SalesMargin.DataSource = dt;
    SalesMargin.DataBind();
    Session["Salesdt"] = dt;

    if (((DataTable)Session["Salesdt"]).Rows.Count > 0)
    {
        grdexport.DataSource = (DataTable)Session["Salesdt"];
        grdexport.DataBind();
        string filename = "Sales_Margin.xls";
        //string excelHeader = "";
        System.IO.StringWriter tw = new System.IO.StringWriter();
        System.Web.UI.HtmlTextWriter hw = new System.Web.UI.HtmlTextWriter(tw);
        //hw.WriteLine("<b><u><font size=’3′> " + excelHeader + " </font></u></b>");
        bandDiv.RenderControl(hw);
        Response.AppendHeader("Content-Disposition", "attachment; filename=" + filename + "");
        Response.ContentType = "application/vnd.ms-excel";
        Response.ContentEncoding = System.Text.Encoding.GetEncoding("UTF-8");
        Response.ContentEncoding = System.Text.Encoding.UTF8;
        Response.BinaryWrite(System.Text.Encoding.UTF8.GetPreamble());
        Response.ContentType = "application/vnd.ms-excel; charset=ISO-8859-1";
        Response.Charset = "UTF-8";
        this.EnableViewState = false;
        Response.Write(tw.ToString().Replace("NULL", ""));
        Response.Write(Response.OutputStream);
        Response.Flush();
        try
        {
            Response.End();
            //Response.Close();
            //HttpContext.Current.ApplicationInstance.CompleteRequest();
            //ApplicationInstance.CompleteRequest();
        }
        catch (Exception ex)
        {
            ScriptManager.RegisterStartupScript(this, GetType(), "", "alert(" + ex + ");", true);
        }
    }
    else
    {
        ScriptManager.RegisterStartupScript(this, GetType(), "", "alert('No data to Export for given details');", true);
    }
}

и все работает. Но не работает событие нажатия кнопки для приведенного ниже кода.

.aspx

<div class="value">
    <asp:Button ID="Export" runat="server" CssClass="Btn_Export" OnClick="Export_Click" Text="Export sales Margin" />
</div>

.aspx.cs

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        BindCompany();
        //txtFrom.Text = DateTime.Now.AddMonths(-1).AddDays(1 - DateTime.Today.Day).ToString("dd-MMM-yyyy");
        txtFrom.Text = DateTime.Now.AddDays(1 - DateTime.Today.Day).ToString("dd-MMM-yyyy");
        txtTo.Text = DateTime.Now.ToString("dd-MMM-yyyy");
        Calendar2.SelectedDate = Convert.ToDateTime(txtTo.Text);
        Calendar1.SelectedDate = Convert.ToDateTime(txtFrom.Text);
        BindSalesMargin();
    }
}

private void BindSalesMargin()
    {
        DataTable dt = new DataTable();
        objAcc.CompanyID = Convert.ToInt16(ddlCompany.SelectedValue);
        objAcc.LocID = ddlLocation.Text;
        objAcc.dtFrom = Calendar1.SelectedDate;
        objAcc.dtTo = Calendar2.SelectedDate;
        if (ddlResult.SelectedValue == "0")
        {
            objAcc.Result = "Under,Over,OK";
        }
        else
        {
            objAcc.Result = ddlResult.Text;
        }
        dt = objAcc.Sale_MarginMail();
        SalesMargin.DataSource = dt;
        SalesMargin.DataBind();
        Session["Salesdt"] = dt;
    }

protected void Export_Click(object sender, EventArgs e)
{
    if (((DataTable)Session["Salesdt"]).Rows.Count > 0)
    {
        grdexport.DataSource = (DataTable)Session["Salesdt"];
        grdexport.DataBind();
        string filename = "Sales_Margin.xls";
        //string excelHeader = "";
        System.IO.StringWriter tw = new System.IO.StringWriter();
        System.Web.UI.HtmlTextWriter hw = new System.Web.UI.HtmlTextWriter(tw);
        //hw.WriteLine("<b><u><font size=’3′> " + excelHeader + " </font></u></b>");
        bandDiv.RenderControl(hw);
        Response.AppendHeader("Content-Disposition", "attachment; filename=" + filename + "");
        Response.ContentType = "application/vnd.ms-excel";
        Response.ContentEncoding = System.Text.Encoding.GetEncoding("UTF-8");
        Response.ContentEncoding = System.Text.Encoding.UTF8;
        Response.BinaryWrite(System.Text.Encoding.UTF8.GetPreamble());
        Response.ContentType = "application/vnd.ms-excel; charset=ISO-8859-1";
        Response.Charset = "UTF-8";
        this.EnableViewState = false;
        Response.Write(tw.ToString().Replace("NULL", ""));
        Response.Write(Response.OutputStream);
        Response.Flush();
        try
        {
            Response.End();
            //Response.Close();
            //HttpContext.Current.ApplicationInstance.CompleteRequest();
            //ApplicationInstance.CompleteRequest();
        }
        catch (Exception ex)
        {
            ScriptManager.RegisterStartupScript(this, GetType(), "", "alert("+ ex +");", true);
        }
    }
    else
    {
        ScriptManager.RegisterStartupScript(this, GetType(), "", "alert('No data to Export for given details');", true);
    }
}

Итак, мой вопрос Почему это не работает? Почему это работает в других подобных модулях, где я должен экспортировать, чтобы преуспеть? и как я могу это исправить?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...