2015-03-02 102 views
0

我想将gridview转换为excel .xls,但它会抛出错误,当我点击确定后,它会转换,但整个页面出现在Excel中。 我想尽一切可能的内容类型,我有Excel 2010中如何将gridview转换为excel?

错误:

the file you are trying to convert is in a different format than specified by the file extension

代码:

protected void btnTransactionDetails_Click(object sender, EventArgs e) 
    { 
     try 
     { 
      LabelResult.Text = ""; 
      //GetReport(); 
      int BusID= Convert.ToInt32(DropDownListBuses.SelectedValue); 
      int AccountID= Convert.ToInt32(DropDownList1.SelectedValue); 
      DateTime FromDate = Convert.ToDateTime(FromDateTextBox.Text); 
      DateTime ToDate = Convert.ToDateTime(ToDateTextBox.Text); 
      DataTable dt= new DataTable(); 
      dt= Activities.GetLedger(AccountID, BusID, FromDate, ToDate); 
      GridViewLedger.DataSource= dt; 
      GridViewLedger.DataBind(); 
      ViewState["Ledger"]= dt; 

     } 
     catch (Exception ex) 
     { 
      LabelResult.Text = ex.Message; 
     } 

    } 

protected void btnExportToExcel_Click(object sender, EventArgs e) 
    { 
     try 
     { 
      Response.Clear(); 
      Response.AddHeader("content-disposition", "attachment;filename=LedgerReport_" + FromDateTextBox.Text + " To " + ToDateTextBox.Text + ".xls"); 
      Response.ContentType = "application/vnd.xlsx"; 
      System.IO.StringWriter stringWrite = new System.IO.StringWriter(); 
      System.Web.UI.HtmlTextWriter htmlWrite = new HtmlTextWriter(stringWrite); 

      htmlWrite.Write("<table><tr><td colspan='4'><center>Report Date : " + FromDateTextBox.Text + " To " + FromDateTextBox.Text + "</center></td></tr></table>"); 
      GridViewLedger.AllowPaging = false; 
      GridViewLedger.AllowSorting = false; 
      // showAttendance(); 
      GridViewLedger.DataSource = (DataSet)ViewState["Ledger"]; 
      GridViewLedger.DataBind(); 
      for (int i = 0; i <= GridViewLedger.Columns.Count - 1; i++) 
      { 

       GridViewLedger.HeaderRow.Cells[i].Style.Add("background-color", "#2FA4E7"); 
       GridViewLedger.HeaderRow.Cells[i].Style.Add("color", "#FFFFFF"); 

      } 


      for (int i = 0; i < GridViewLedger.Rows.Count; i++) 
      { 
       GridViewRow row = GridViewLedger.Rows[i]; 

       row.Cells[3].Style.Add("background-color", "#73a839"); 
       row.Cells[3].Style.Add("color", "#FFFFFF"); 

       row.Cells[4].Style.Add("background-color", "#DA272D"); 
       row.Cells[4].Style.Add("color", "#FFFFFF"); 

      } 

      GridViewLedger.RenderControl(htmlWrite); 
      string style = @"<style> .textmode { mso-number-format:\@; } </style>"; 
      Response.Write(style); 
      Response.Write(stringWrite.ToString()); 
      Response.End(); 
     } 
     catch (Exception x) 
     { 
      // ResultLabel.ResultLabelAttributes(x.Message, ProjectUserControls.Enums.ResultLabel_Color.Red); 
     } 
    } 
+1

绑定gridview从DataSet,然后在谷歌DataSet搜索到Excel。 – mybirthname 2015-03-02 08:48:58

+0

检查此链接http://www.aspsnippets.com/Articles/Export-GridView-to-Excel-in-ASPNet-with-Formatting-using-C-and-VBNet.aspx – 2015-03-02 08:52:07

+0

导出数据表到Excel,你可以尝试通过使用保存在ViewState [“Ledger”] = dt中的数据表(因为您已经将数据表保存在视图状态中)请通过http://stackoverflow.com/questions/8207869/how-to-export-datatable -to-excel-in-c-sharp – 2015-03-02 09:26:05

回答

0

改变这一行

(数据集)的ViewState [“莱杰“];到(DataTable)ViewState [“Ledger”];

您正试图强制转换数据表为DataSet 你会得到以下异常

无法投型“System.Data.DataTable”的对象键入“System.Data.DataSet中”。

因为的ViewState [“总帐”]包含数据表(已分配数据表的话)


我创建了一个示例项目它究竟是你的代码相同。它的工作精细对我来说请检查

protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!IsPostBack) 
     { 
      DataTable table = new DataTable(); 
      table.Columns.Add("Dosage", typeof(int)); 
      table.Columns.Add("Drug", typeof(string)); 
      table.Columns.Add("Patient", typeof(string)); 
      table.Columns.Add("Date", typeof(DateTime)); 

      // Here we add five DataRows. 
      table.Rows.Add(25, "Indocin", "David", DateTime.Now); 
      table.Rows.Add(50, "Enebrel", "Sam", DateTime.Now); 
      table.Rows.Add(10, "Hydralazine", "Christoff", DateTime.Now); 
      table.Rows.Add(21, "Combivent", "Janet", DateTime.Now); 
      table.Rows.Add(100, "Dilantin", "Melanie", DateTime.Now); 
      GridView1.DataSource = table; 
      GridView1.DataBind(); 
      ViewState["Ledger"] = table; 
     } 
    } 

    protected void Button1_Click(object sender, EventArgs e) 
    { 
     Response.Clear(); 
     Response.AddHeader("content-disposition", "attachment;filename=LedgerReport.xls"); 
     Response.ContentType = "application/vnd.xls"; 
     System.IO.StringWriter stringWrite = new System.IO.StringWriter(); 
     System.Web.UI.HtmlTextWriter htmlWrite = new HtmlTextWriter(stringWrite); 

     htmlWrite.Write("<table><tr><td colspan='4'><center>Report Date </center></td></tr></table>"); 
     GridView1.AllowPaging = false; 
     GridView1.AllowSorting = false; 
     GridView1.DataSource = (DataTable)ViewState["Ledger"]; 
     GridView1.DataBind(); 
     for (int i = 0; i <= GridView1.Columns.Count - 1; i++) 
     { 
      GridView1.HeaderRow.Cells[i].Style.Add("background-color", "#2FA4E7"); 
      GridView1.HeaderRow.Cells[i].Style.Add("color", "#FFFFFF"); 

     } 

     GridView1.RenderControl(htmlWrite); 
     string style = @"<style> .textmode { mso-number-format:\@; } </style>"; 
     Response.Write(style); 
     Response.Write(stringWrite.ToString()); 
     Response.End(); 
    } 
    public override void VerifyRenderingInServerForm(Control control) 
    { 
     /* Confirms that an HtmlForm control is rendered for the specified ASP.NET 
      server control at run time. */ 
    } 
+0

没有效果它与 – 2015-03-02 10:03:54

+0

之前的文件名相同像这样(.xls改为.xlsx)Response.AddHeader(“content-disposition”,“attachment; filename = LedgerReport_”+ FromDateTextBox.Text +“To”+ ToDateTextBox .Text +“.xlsx”) – 2015-03-02 10:06:48

+0

无效,与以前相同 – 2015-03-02 10:16:38