Экспорт в 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
Спасибо вам за это! Наконец-то это работает.