Michelle Anne E. Rigor Ответов: 1

Экспорт в CSV не работает на одной кнопке


У меня есть два экспорта в CSV:

<td align="right" width="50px">
                                    <asp:LinkButton ID="lnkExportCSV" runat="server"  OnClick="lnkExportCSV_Click"> <table border="0" cellpadding="0" cellspacing="0" width="40px" ><tr align="center"><td><img alt="Export to CSV" src="../Images/Export34.gif" width="32" height="32" /></td></tr><tr align="center"><td>CSV </td></tr></table></asp:LinkButton>
                                </td>
                                <td align="right" width="100px">
                                    <asp:LinkButton ID="lnkExportCSVWO" runat="server"  OnClick="lnkExportWOCSV_Click"> <table border="0" cellpadding="0" cellspacing="0" width="100px" ><tr align="center"><td><img alt="Export to CSV" src="../Images/Export34.gif" width="32" height="32" /></td></tr><tr align="center"><td>CSV for Work Order</td></tr></table></asp:LinkButton>
                                </td>


А вот их коды:
protected void lnkExportCSV_Click(object sender, EventArgs e)
    {
        var dateRange = string.Format("{0:MMdd}", Convert.ToDateTime(Session["DateFrom"])) + "_" + string.Format("{0:MMdd}", Convert.ToDateTime(Session["DateTo"]));
        //lblGroup.Text = Convert.ToString(ddlGroups.SelectedItem);
        //lblLocation.Text = Convert.ToString(ddlLocations.SelectedItem);
        //lblDateRange.Text = "From " + txtDateFrom.Text + " to " + txtDateTo.Text;
        if (grvExport.Rows.Count > 0)
        {
            Response.Clear();
            Response.Buffer = true;
            Response.AddHeader("content-disposition", "attachment;filename=StatementPaymentsReport_" + dateRange + ".csv");
            //Response.Charset = "ISO-8859-1";
            Response.ContentEncoding = System.Text.Encoding.UTF8;
            Response.ContentType = "text/csv; charset=utf-8";

            StringBuilder sb = new StringBuilder();
            sb.Append("\uFEFF");

            sb.Append("\"Region: " + HttpUtility.HtmlDecode(Convert.ToString(ViewState["Region"])).Replace("\"", "\"\"") + "\",");
            sb.Append("\r\n");
            sb.Append("\"Location: " + HttpUtility.HtmlDecode(Convert.ToString(ViewState["Location"])).Replace("\"", "\"\"") + "\",");
            sb.Append("\r\n");
            sb.Append("\"Group: " + HttpUtility.HtmlDecode(Convert.ToString(ViewState["Group"])).Replace("\"", "\"\"") + "\",");
            sb.Append("\r\n");
            sb.Append("\"From " + HttpUtility.HtmlDecode(Convert.ToString(Session["DateFrom"])).Replace("\"", "\"\"") + " to " + HttpUtility.HtmlDecode(Convert.ToString(Session["DateTo"])).Replace("\"", "\"\"") + "\",");
            sb.Append("\r\n"); 

            for (int i = 0; i < grvExport.Columns.Count; i++)
            {
                sb.Append('"' + grvExport.Columns[i].HeaderText + '"' + ',');
            }
            sb.Append("\r\n");

            for (int a = 0; a < grvExport.Rows.Count; a++)
            {
                for (int col = 0; col < grvExport.Columns.Count; col++)
                {
                    string value;
                    //if (col == 4)
                    //    value = '"' + HttpUtility.HtmlDecode(((Label)grvExport.Rows[a].Cells[col].FindControl("lblAmount")).Text.Replace(Session["GeneralCurrency"].ToString(), string.Empty)) + '"' + ',';
                    //else
                    // value = '"' + HttpUtility.HtmlDecode(grvExport.Rows[a].Cells[col].Text) + "\","
                              value =  HttpUtility.HtmlDecode(grvExport.Rows[a].Cells[col].Text);
                    //string value = '"' + HttpUtility.HtmlDecode(((Label)grvExport.Rows[a].Cells[0].FindControl("lblDate")).Text) + '"' + ',' +
                    //               '"' + HttpUtility.HtmlDecode(((Label)grvExport.Rows[a].Cells[1].FindControl("lblReferrer")).Text) + '"' + ',' +
                    //               '"' + HttpUtility.HtmlDecode(((Label)grvExport.Rows[a].Cells[2].FindControl("lblLocationName")).Text) + '"' + ',' +
                    //               '"' + HttpUtility.HtmlDecode(((Label)grvExport.Rows[a].Cells[3].FindControl("lblInvoice")).Text) + '"' + ',' +
                    //               '"' + HttpUtility.HtmlDecode(((Label)grvExport.Rows[a].Cells[4].FindControl("lblOrderType")).Text) + '"' + ',' +
                    //               '"' + HttpUtility.HtmlDecode(((Label)grvExport.Rows[a].Cells[5].FindControl("lblAmount1")).Text.Replace(Session["GeneralCurrency"].ToString(), string.Empty)) + '"' + ',';

                    // value = value.Replace("\"", "\"\"");
                        value = value.Replace("\"", "\"\"");

                        sb.Append('"' + value.Trim() + '"' + ',');
                   // sb.Append(value);
                   
                }
                sb.Append("\r\n");
            }

            //footer 09262016
            for (int i = 0; i < grvExport.Columns.Count; i++)
            {
                string value = grvExport.FooterRow.Cells[i].Text.Replace(" ", string.Empty);
                sb.Append('"' + value + "\",");
            }
            Response.Output.Write(sb.ToString());
            Response.Flush();
            Response.End();
        }
        else
        {
            ScriptManager.RegisterStartupScript(this, GetType(), "showalert", "alert('No records to export!');", true);
        }

    }

    protected void lnkExportWOCSV_Click(object sender, EventArgs e)
    {
        var dateRange = string.Format("{0:MMdd}", Convert.ToDateTime(Session["DateFrom"])) + "_" + string.Format("{0:MMdd}", Convert.ToDateTime(Session["DateTo"]));
        //lblGroup.Text = Convert.ToString(ddlGroups.SelectedItem);
        //lblLocation.Text = Convert.ToString(ddlLocations.SelectedItem);
        //lblDateRange.Text = "From " + txtDateFrom.Text + " to " + txtDateTo.Text;
        if (grvExport.Rows.Count > 0)
        {
            Response.Clear();
            Response.Buffer = true;
            Response.AddHeader("content-disposition", "attachment;filename=StatementPaymentsReport_" + dateRange + ".csv");
            //Response.Charset = "ISO-8859-1";
            Response.ContentEncoding = System.Text.Encoding.UTF8;
            Response.ContentType = "text/csv; charset=utf-8";

            StringBuilder sb = new StringBuilder();
            sb.Append("\uFEFF");

            sb.Append("\"Region: " + HttpUtility.HtmlDecode(Convert.ToString(ViewState["Region"])).Replace("\"", "\"\"") + "\",");
            sb.Append("\r\n");
            sb.Append("\"Location: " + HttpUtility.HtmlDecode(Convert.ToString(ViewState["Location"])).Replace("\"", "\"\"") + "\",");
            sb.Append("\r\n");
            sb.Append("\"Group: " + HttpUtility.HtmlDecode(Convert.ToString(ViewState["Group"])).Replace("\"", "\"\"") + "\",");
            sb.Append("\r\n");
            sb.Append("\"From " + HttpUtility.HtmlDecode(Convert.ToString(Session["DateFrom"])).Replace("\"", "\"\"") + " to " + HttpUtility.HtmlDecode(Convert.ToString(Session["DateTo"])).Replace("\"", "\"\"") + "\",");
            sb.Append("\r\n");

            for (int i = 0; i < grvExport.Columns.Count; i++)
            {
                sb.Append('"' + grvExport.Columns[i].HeaderText + '"' + ',');
            }
            sb.Append("\r\n");

            for (int a = 0; a < grvExport.Rows.Count; a++)
            {
                for (int col = 0; col < grvExport.Columns.Count; col++)
                {
                    string value;
                    //if (col == 4)
                    //    value = '"' + HttpUtility.HtmlDecode(((Label)grvExport.Rows[a].Cells[col].FindControl("lblAmount")).Text.Replace(Session["GeneralCurrency"].ToString(), string.Empty)) + '"' + ',';
                    //else
                    // value = '"' + HttpUtility.HtmlDecode(grvExport.Rows[a].Cells[col].Text) + "\","
                    value = HttpUtility.HtmlDecode(grvExport.Rows[a].Cells[col].Text);
                    //string value = '"' + HttpUtility.HtmlDecode(((Label)grvExport.Rows[a].Cells[0].FindControl("lblDate")).Text) + '"' + ',' +
                    //               '"' + HttpUtility.HtmlDecode(((Label)grvExport.Rows[a].Cells[1].FindControl("lblReferrer")).Text) + '"' + ',' +
                    //               '"' + HttpUtility.HtmlDecode(((Label)grvExport.Rows[a].Cells[2].FindControl("lblLocationName")).Text) + '"' + ',' +
                    //               '"' + HttpUtility.HtmlDecode(((Label)grvExport.Rows[a].Cells[3].FindControl("lblInvoice")).Text) + '"' + ',' +
                    //               '"' + HttpUtility.HtmlDecode(((Label)grvExport.Rows[a].Cells[4].FindControl("lblOrderType")).Text) + '"' + ',' +
                    //               '"' + HttpUtility.HtmlDecode(((Label)grvExport.Rows[a].Cells[5].FindControl("lblAmount1")).Text.Replace(Session["GeneralCurrency"].ToString(), string.Empty)) + '"' + ',';

                    // value = value.Replace("\"", "\"\"");
                    value = value.Replace("\"", "\"\"");

                    sb.Append('"' + value.Trim() + '"' + ',');
                    // sb.Append(value);

                }
                sb.Append("\r\n");
            }

            //footer 09262016
            for (int i = 0; i < grvExport.Columns.Count; i++)
            {
                string value = grvExport.FooterRow.Cells[i].Text.Replace(" ", string.Empty);
                sb.Append('"' + value + "\",");
            }
            Response.Output.Write(sb.ToString());
            Response.Flush();
            Response.End();
        }
        else
        {
            ScriptManager.RegisterStartupScript(this, GetType(), "showalert", "alert('No records to export!');", true);
        }
    }


Вот ошибка, которая возникает, когда я нажимаю lnkExportCSVWO. Это просмотр кода элемента в браузере:
Uncaught Error: Sys.WebForms.PageRequestManagerParserErrorException: The message received from the server could not be parsed.
    at Function.Error$create [as create] (ScriptResource.axd:237)
    at Sys$WebForms$PageRequestManager$_createPageRequestManagerParserError [as _createPageRequestManagerParserError] (ScriptResource.axd:665)
    at Sys$WebForms$PageRequestManager$_parseDelta [as _parseDelta] (ScriptResource.axd:1435)
    at Sys$WebForms$PageRequestManager$_onFormSubmitCompleted [as _onFormSubmitCompleted] (ScriptResource.axd:1314)
    at Array.<anonymous> (ScriptResource.axd:47)
    at ScriptResource.axd:3484
    at Sys$Net$WebRequest$completed [as completed] (ScriptResource.axd:6373)
    at XMLHttpRequest.Sys$Net$XMLHttpExecutor._onReadyStateChange (ScriptResource.axd:5993)


Для try-catch в программе:
ex = {Unable to evaluate expression because the code is optimized or a native frame is on top of the call stack.}


lnkExportCSVWO не работает, но lnkExportCSV работает, и у них обоих одинаковые коды. Обе кнопки ссылок должны экспортировать CSV-файл из Gridview.

Что я уже пробовал:

Я еще не нашел в google такого же решения, как у меня.

CHill60

Вы никогда не найдете решения с помощью Гугла. Учитесь отлаживать.
Я не могу найти нигде в вашем коде, который предоставляет код для lnkExportCSVWO. У вас действительно есть функция lnkExportWOCSV_Click - это та, которая, по-вашему, не работает?

Michelle Anne E. Rigor

Я знаю, как отлаживать. А lnkExportCSVWO-это ссылка, которая не работает. LnkExportWOCSV_Click - это функция onclick.

CHill60

Затем вам нужно поделиться кодом для lnkExportCSVWO. Он не включен в код, который вы разместили.

ZurdoDev

Если вы знаете, как отлаживать, то сможете рассказать нам, что происходит.

Michelle Anne E. Rigor

Уже обновлен вопрос. Если есть что-то, что я мог бы предоставить, пожалуйста, скажите мне, чтобы я мог получить четкий ответ на свой вопрос. Кнопки ссылок не работают, даже если они имеют один и тот же код внутри функции, код lnkExportCSV работает, но lnkExportWOCSV не работает. Я не уверен, является ли Response.End() проблемой в lnkExportWOCSV или чем-то еще.

ZurdoDev

На самом деле это очень просто. Поставьте точку останова в коде и шагайте через строку за строкой и узнайте, что происходит.

[no name]

- я знаю, как отлаживать.
Ясно, что нет. Это проблема отладки.

CHill60

Кстати, если эти кнопки имеют один и тот же код, то код, которого вам не хватает, заключается в том, чтобы поместить то, что у вас есть, в метод (подпрограмму) и вызвать его из каждой кнопки.
Если это работает для одного, но не для другого после этого, то именно данные вызывают проблему

Michelle Anne E. Rigor

Они получают почти одинаковые данные. Коды lnkExportWOCSV_Click и lnkExportCSV_Click одинаковы.

CHill60

Тогда проблема очевидна вместе с данными!

Richard Deeming

Является ли кнопка, которая не работает внутри UpdatePanel?

Michelle Anne E. Rigor

Нет, это не в UpdatePanel.

[no name]

не могли бы вы попробовать добавить ниже заявление о загрузке страницы и дать попробовать..

protected void Page_Load(отправитель объекта, EventArgs e)
{
Системы.Веб.Пользовательского интерфейса.Элемента управления scriptmanager.GetCurrent (это).RegisterPostBackControl(lnkExportWOCSV);
}

Michelle Anne E. Rigor

Спасибо вам за это! Наконец-то это работает.

1 Ответов

Рейтинг:
1

Michelle Anne E. Rigor

попробуйте добавить ниже заявление на загрузку страницы и дать попробовать..

protected void Page_Load(object sender, EventArgs e)
{
System.Web.UI.ScriptManager.GetCurrent(this).RegisterPostBackControl(lnkExportWOCSV); 
}

Решение по: Винод.звон [^]