2012-08-11 128 views
0

我有這個ASP.Net Web應用程序,並在我的一個頁面我使用JQuery JQGrid,我想能夠導出JQGrid到Excel表,所以使用JavaScript我收集在數組,然後將值稱爲一個WebService,以填補在DataGrid的價值觀,我成功地做到了這一切,除了在沒有出現文件下載WebService的出口,這是我的web服務代碼:Excel導出ASP.NET Web服務

[WebMethod] 
public void GetData(object[] Values) 
{ 
    DT_ToFill.Columns.Add("CaseID"); 
    DT_ToFill.Columns.Add("SR"); 

    foreach (object Value in Values) 
    { 
     Dictionary<string, object> DictVals = new Dictionary<string, object>(); 
     DictVals = (Dictionary<string, object>)Value; 
     string CaseID = DictVals["CaseID"].ToString(); 
     string SR = DictVals["SR"].ToString(); 

     object[] Obj = new object[2] { CaseID, SR }; 
     DT_ToFill.Rows.Add(Obj); 
    } 
    ExportToExcel(DT_ToFill, Context.Response); 
} 

[WebMethod] 
public string HelloWorld() 
{ 
    return "Hello World"; 
} 

public void ExportToExcel(DataTable dt, HttpResponse Response) 
{ 
    GridView GridView1 = new GridView(); 
    GridView1.DataSource = dt; 
    Response.Buffer = true; 
    Response.AddHeader("Content-Disposition", "inline;filename=Schedule_ExcelSheet.xls"); 
    Response.Charset = ""; 
    Response.ContentType = "application/ms-excel"; 
    Response.Charset = "UTF-8"; 
    Response.ContentEncoding = Encoding.UTF8; 
    StringWriter sw = new StringWriter(); 
    HtmlTextWriter ht = new HtmlTextWriter(sw); 
    GridView1.AllowPaging = false; 
    GridView1.DataBind(); 
    GridView1.RenderControl(ht); 
    Response.Output.Write(sw.ToString()); 
    Response.Flush(); 
    Response.End(); 
} 

public void VerifyRenderingInServerForm(Control control) 
{ 
} 

幫助請... 謝謝

回答

0

聽起來像你發送excel文件作爲迴應的ajax請求?如果是這樣,我不認爲你可以通過ajax進行文件下載工作。

也許像現在這樣通過ajax發送數據,然後做一個新窗口或一個iframe(將它附加到document.body)並將src設置爲一個返回excel文件的url。這應該會觸發文件下載。這是我通常做的。

+0

是的,你的對@ @ Forrest,但我不明白第二部分,我該怎麼做......?! – YMELS 2012-08-11 19:03:27

+0

嗨。對不起,我會盡力澄清。 – jForrest 2012-08-12 19:35:09

+0

如果您打開一個新窗口或在頁面上添加一個iframe,文件下載將起作用。最簡單的可能是一個新窗口。所以:1)現在要做的是將數據發送到服務器2)打開一個新窗口。將新窗口指向一個URL,它會像你現在正在做的那樣發送xls(也許使用用戶會話發送正確的pdf回來?)3)當新窗口加載時,它會下載xls – jForrest 2012-08-12 19:41:37