Обзор: Используя C #, я выводю таблицу данных LINQ to SQL в WebControls.GridView, а затем выводю ее в файл Excel, который подается с веб-страницы. Как изменить поле в GridView?
Проблема: Excel усекает и / или преобразует строку, которая является числовой, в научную нотацию.
198886545467896 превращается в 1.98887E + 14
Чтобы сохранить это поле в виде строки, мне нужно обернуть поле в строковую формулу следующим образом, чтобы Excel отобразил его как положено.
= "198886545467896"
Вопрос: Как обернуть данные поля в конкретный столбец GridView с = "[число]"?
Вот мой соответствующий C #:
public void DownloadExcelReport(int id)
{
// See: http://www.codeshelve.com/code/details/54/export-to-excel-in-asp-net-mvc
// Or: http://www.billsternberger.net/asp-net-mvc/export-to-excel-or-csv-from-asp-net-mvc-with-c/
// Or: http://blog.wiredworx.co.uk/website-and-seo/c-tutorials-and-tips-visual-studio/exporting-to-an-excel-file-from-asp-net-mvc/
// same solution - discussed differently
IEnumerable<Customer> customers = Db.Customers(id);
// Create a grid and bind the customer data to it.
var grid = new System.Web.UI.WebControls.GridView();
grid.DataSource = customers;
grid.DataBind();
// TODO: I need to wrap the data in column 2 with =" "
// UPDATE: INSERT the code from the accepted answer below right here
// Prep the http response to return an excel mime type file
Response.ClearContent();
Response.AddHeader("content-disposition", "attachment; filename=Report.xls");
Response.ContentType = "application/excel";
// Output the grid via the html writer to the response
StringWriter sw = new StringWriter();
var htw = new System.Web.UI.HtmlTextWriter(sw);
grid.RenderControl(htw);
Response.Write(sw.ToString());
Response.End();
}
Обновление: в ретроспективе это можно было бы написать гораздо проще, чтобы выделить конкретную проблему: GridView неудобен для навигации. Однако хорошо иметь полное решение о том, как выводить из таблицы Linq в Sql весь путь в файл Excel для дальнейшего использования.