2011-10-03 24 views
-1

"StoreId"列を持つデータセットをキャッシュしました。 データセットをExcelにエクスポートするときに、データセットとExprotから「StoreId」列を削除するとします。Asp.netキャッシングの問題

以下は、Excelへの削除とExcelへのエクスポートのコードです。

データをエクスポートした後
if (HttpContext.Current.Cache["stores"] != null) 
     { 
      using (DataSet dsStores = (DataSet)HttpContext.Current.Cache["stores"]) 
      { 
       if (TrainingUtil.isDataSetValid(dsStores)) 
       { 
        DataTable dt = dsStores.Tables[0]; 
        dt.Columns.Remove("storeId"); 
        Quality.Qulaity_Utility.ExportDataSet(dt, ddlCity.SelectedItem.Text.ToString() + "_StoreCodes"); 
       } 

      } 
     } 

    public static void ExportDataSet(DataTable dt,string filename) 
    { 
     HttpContext.Current.Response.Clear(); 
     HttpContext.Current.Response.Buffer = true; 
     HttpContext.Current.Response.ContentType = "application/vnd.xls"; 
     HttpContext.Current.Response.Charset = ""; 
     HttpContext.Current.Response.AddHeader("content-disposition", "attachment; filename=" + filename.Replace(" ", "_").ToString() + ".xls"); 

     DataGrid dgRecord = new DataGrid(); 
     //Color Setttings 
     dgRecord.HeaderStyle.BackColor = System.Drawing.Color.Cyan; 

     dgRecord.DataSource = dt; 
     dgRecord.DataBind(); 

     //Cells color settings 
     foreach (DataGridItem dgi in dgRecord.Items) 
     { 
      foreach (TableCell tcGridCells in dgi.Cells) 
      { 
       tcGridCells.Attributes.Add("class", "sborder"); 
      } 
     } 
     //Render the datagrid 

     StringWriter stringWriter = new StringWriter(); 
     HtmlTextWriter htmlTextWriter = new HtmlTextWriter(stringWriter); 
     dgRecord.RenderControl(htmlTextWriter); 
     //lstMonthlyReport.RenderControl(htmlTextWriter); 
     //Add the style sheet class here 
     HttpContext.Current.Response.Write(@"<style> .sborder { color : Black;border : 1px Solid Black; } </style> "); 
     //Export 
     HttpContext.Current.Response.Write(stringWriter.ToString()); 
     //End 
     HttpContext.Current.Response.End(); 
     //style to format numbers to string 
     //string style = @"<style> body { mso-number-format:\@; } </style>"; 
    } 
} 

と私は一度againgキャッシュされたデータセット から店舗情報を欲しいとき、私は「StoreId」列を見つけることができませんでした、 私は私が間違ってやってできない数字アウトです。 Plzは私を助けます。

ありがとうございます。

答えて

2

キャッシュに入れたオブジェクトを決して変更しないと、あなたの人生は楽になります。 DataSetから列を削除することはスレッドセーフではないため、複数の要求が同時にキャッシュにアクセスすると問題が発生します。

この場合、データセットのクローンを作成し、そのクローンをエクスポートします。

DataSet dsStores = ((DataSet)HttpContext.Current.Cache["stores"]).Copy() 

またはDataSetを変更する必要はありませんエクスポートを行うための方法を見つける:これを行うには、DataSet.Copyメソッドを使用します。

+0

ありがとうございました。 –