I have two Export to 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>
And here are their codes:
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"]));
if (grvExport.Rows.Count > 0)
{
Response.Clear();
Response.Buffer = true;
Response.AddHeader("content-disposition", "attachment;filename=StatementPaymentsReport_" + dateRange + ".csv");
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;
value = HttpUtility.HtmlDecode(grvExport.Rows[a].Cells[col].Text);
value = value.Replace("\"", "\"\"");
sb.Append('"' + value.Trim() + '"' + ',');
}
sb.Append("\r\n");
}
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"]));
if (grvExport.Rows.Count > 0)
{
Response.Clear();
Response.Buffer = true;
Response.AddHeader("content-disposition", "attachment;filename=StatementPaymentsReport_" + dateRange + ".csv");
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;
value = HttpUtility.HtmlDecode(grvExport.Rows[a].Cells[col].Text);
value = value.Replace("\"", "\"\"");
sb.Append('"' + value.Trim() + '"' + ',');
}
sb.Append("\r\n");
}
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);
}
}
Here is the error that happens when I press lnkExportCSVWO. This is in inspect element in browser:
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)
For try-catch in the program:
ex = {Unable to evaluate expression because the code is optimized or a native frame is on top of the call stack.}
lnkExportCSVWO is not working but lnkExportCSV is working and they both have the same codes. Both link buttons should export a CSV from a Gridview.
What I have tried:
Haven't found a solution yet in google that is the same as mine.