export Datagrid to excel asp

前端 未结 4 2123
猫巷女王i
猫巷女王i 2020-12-07 00:01

whats the best way to export a Datagrid to excel? I have no experience whatsoever in exporting datagrid to excel, so i want to know how you guys export datagrid to excel. i

相关标签:
4条回答
  • 2020-12-07 00:32

    The simplest way is to simply write either csv, or html (in particular, a <table><tr><td>...</td></tr>...</table>) to the output, and simply pretend that it is in excel format via the content-type header. Excel will happily load either; csv is simpler...

    Here's a similar example (it actually takes an IEnumerable, but it would be similar from any source (such as a DataTable, looping over the rows).

            public static void WriteCsv(string[] headers, IEnumerable<string[]> data, string filename)
            {
                if (data == null) throw new ArgumentNullException("data");
                if (string.IsNullOrEmpty(filename)) filename = "export.csv";
    
                HttpResponse resp = System.Web.HttpContext.Current.Response;
                resp.Clear();
                // remove this line if you don't want to prompt the user to save the file
                resp.AddHeader("Content-Disposition", "attachment;filename=" + filename);
                // if not saving, try: "application/ms-excel"
                resp.ContentType = "text/csv";
                string csv = GetCsv(headers, data);
                byte[] buffer = resp.ContentEncoding.GetBytes(csv);
                resp.AddHeader("Content-Length", buffer.Length.ToString());
                resp.BinaryWrite(buffer);
                resp.End();
            }
            static void WriteRow(string[] row, StringBuilder destination)
            {
                if (row == null) return;
                int fields = row.Length;
                for (int i = 0; i < fields; i++)
                {
                    string field = row[i];
                    if (i > 0)
                    {
                        destination.Append(',');
                    }
                    if (string.IsNullOrEmpty(field)) continue; // empty field
    
                    bool quote = false;
                    if (field.Contains("\""))
                    {
                        // if contains quotes, then needs quoting and escaping
                        quote = true;
                        field = field.Replace("\"", "\"\"");
                    }
                    else
                    {
                        // commas, line-breaks, and leading-trailing space also require quoting
                        if (field.Contains(",") || field.Contains("\n") || field.Contains("\r")
                            || field.StartsWith(" ") || field.EndsWith(" "))
                        {
                            quote = true;
                        }
                    }
                    if (quote)
                    {
                        destination.Append('\"');
                        destination.Append(field);
                        destination.Append('\"');
                    }
                    else
                    {
                        destination.Append(field);
                    }
    
                }
                destination.AppendLine();
            }
            static string GetCsv(string[] headers, IEnumerable<string[]> data)
            {
                StringBuilder sb = new StringBuilder();
                if (data == null) throw new ArgumentNullException("data");
                WriteRow(headers, sb);
                foreach (string[] row in data)
                {
                    WriteRow(row, sb);
    
                }
                return sb.ToString();
            }
    
    0 讨论(0)
  • 2020-12-07 00:32

    You can do it in this way:

    private void ExportButton_Click(object sender, System.EventArgs e)
    {
      Response.Clear();
      Response.Buffer = true;
      Response.ContentType = "application/vnd.ms-excel";
      Response.Charset = "";
      this.EnableViewState = false;
      System.IO.StringWriter oStringWriter = new System.IO.StringWriter();
     System.Web.UI.HtmlTextWriter oHtmlTextWriter = new System.Web.UI.HtmlTextWriter(oStringWriter);
      this.ClearControls(dataGrid);
      dataGrid.RenderControl(oHtmlTextWriter);
      Response.Write(oStringWriter.ToString());
      Response.End();
    }
    

    Complete example here.

    0 讨论(0)
  • 2020-12-07 00:42

    SpreadsheetGear for .NET will do it.

    You can see live ASP.NET samples with C# and VB source code here. Several of these samples demonstrate converting a DataSet or DataTable to Excel - and you can easily get a DataSet or DataTable from a DataGrid. You can download the free trial here if you want to try it yourself.

    Disclaimer: I own SpreadsheetGear LLC

    0 讨论(0)
  • 2020-12-07 00:47

    Exporting values to Excel or Word or PDF Check http://techdotnets.blogspot.com/

    0 讨论(0)
提交回复
热议问题