2009-11-25 160 views
1

我有以下情況。我有兩種用數據填充GridView的方法。這些如下:Gridview:導出爲csv問題

protected void btSearch_Click(object sender, EventArgs e) 
{ 

    lqPackWeights.WhereParameters.Clear(); 
    ControlParameter cp = new ControlParameter(); 
    cp.Type = TypeCode.String; 


    if (radBuyer.Checked) 
    { 
     cp.ControlID = "ddlProd"; 
     cp.PropertyName = "SelectedValue"; 
     lbRadMiss.Text = ""; 
    } 

    else if (radProd.Checked) 
    { 
     cp.ControlID = "tbxProdAC"; 
     cp.PropertyName = "Text"; 
     lbRadMiss.Text = ""; 
    } 

    else 
    { 
     cp.ControlID = "lbRadMiss"; 
     cp.PropertyName = "Text"; 
     lbRadMiss.Text = "Please check appropriate radio button before you attempt a search"; 
    } 

    cp.Name = "IDDesc"; 
    lqPackWeights.WhereParameters.Add(cp); 
    GridView1.DataSourceID = "lqPackWeights"; 
    GridView1.DataBind(); 

} 

而且

protected void btnShowPaper_Click(object sender, EventArgs e) 
{ 
    ORWeightsDataClassesDataContext dbPa = new ORWeightsDataClassesDataContext(); 
    int max = 0; 
    if (int.TryParse(txtbxHowMany.Text, out max)) 
    { 
     var queryPa = dbPa.tblOnlineReportingCOMPLETEWeights 
        .Where(x => x.MaterialLevel == "Primary" && x.MaterialText == "Paper" && x.MemberId == "FM00012") 
        .OrderByDescending(x => x.ProductPercentage).Take(max); 

     GridView1.DataSource = queryPa; 
     GridView1.DataBind(); 

這些都工作得不錯的填充與他們approrpiate數據集GridView的。

我也有下面的代碼,出口gridview的內容,以CSV:

protected void btnExportCSV_Click(object sender, EventArgs e) 
{ 
    Response.Clear(); 
    Response.Buffer = true; 
    Response.AddHeader("content-disposition", "attachment;filename=GridViewExport.csv"); 
    Response.Charset = ""; 
    Response.ContentType = "application/text"; 

    GridView1.AllowPaging = false; 
    GridView1.DataBind(); 

    StringBuilder sb = new StringBuilder(); 
    for (int k = 0; k < GridView1.Columns.Count; k++) 
    { 
     sb.Append(GridView1.Columns[k].HeaderText + ','); 
    } 

    sb.Append("\r\n"); 
    for (int i = 0; i < GridView1.Rows.Count; i++) 
    { 
     for (int k = 0; k < GridView1.Columns.Count; k++) 
     { 
      sb.Append(GridView1.Rows[i].Cells[k].Text + ','); 
     } 
     sb.Append("\r\n"); 
    } 
    Response.Output.Write(sb.ToString()); 
    Response.Flush(); 
    Response.End(); 

} 

到CSV的出口工作得很好在第一種情況下(即如果/否則,如果情況),但是當它涉及到第二種情況,只有標題被提取。

這是怎麼回事?我已經加入了幾個休息時間,它看起來像是正在執行csv代碼的輸出,但實際的GridView內容不會放在同一個csv文件中。

任何想法?

+0

是否有可能在GridView是不實際尚未在你試圖導出時限(因而沒有行)? – 2009-11-25 09:46:11

回答

0

確保您在重新導入數據之前執行導出操作。我在項目中遇到了同樣的問題,因爲我們在GridView上關閉了VIEWSTATE,所以在回發時我們試圖導出數據,之後網格被填充數據。

+0

Hello Mattruma - 感謝您對此進行調查。對於我的無知抱歉,但我應該如何重新整理數據,即我應該在哪裏放置數據綁定? 我覺得像這樣一個工具問這些問題,因爲我知道它們很可能,可笑容易。 – MrDean 2009-11-25 10:39:04

+0

不是問題!我們通常在我們的代碼中有一個名爲BindData()的方法,它將數據綁定到網格,並進行任何過濾。在我們的導出方法中,我們總是先調用BindData(),然後執行導出。 – mattruma 2009-11-25 10:45:56

0

我實際上解決了這個問題,通過刪除GridView1.AllowPaging = false; GridView1.DataBind();從導出腳本。

不知道它爲什麼可行......但它確實!