2011-05-25 20 views
6

Bu yüzden ASPX sayfamda bir GridView var. Ben <asp:Button id="btnBindIt" runat="server" /> tıkladığınızda aşağıdaki gibi PostBack sonrası kalıcı DataSource Postback

bir datatable bağlar:

theDataTable = GetAllTheRecords(); 
gvTheGridView.DataSource = theDataTable; 
gvTheGridView.DataBind(); 

Not: theDataTable beklendiği gibi çalışır üyesi

private DataTable theDataTable; 

olduğunu. GridView güzel görüntülenmesinden sonra

Şimdi, CSV veri vermek istediğiniz, ben şimdi kod çalışır <asp:Button id="btnExportIt" runat="server" /> tıklayın:

exportToCsv(theDataTable); 

ama theDataTable boş.

yüzden de null

exportToCsv(gvTheGridView.DataSource) 

çalıştı.

Bu verinin kalıcı olarak devam etmesinin standart yolu nedir? Gerçekten DB'ye vurmak istemiyorum, çünkü oldukça uzun bir SPROC ve kullanıcı zaten bir kez bekledi.

Şimdiden teşekkürler! Sınıf düzeyi değişkenleri geri gönderme sırasında değerlerini koruyamazlar.

cevap

-2

Herkesin cevapları için teşekkürler.

VeiwState'e ya da gereksiz yere oturum açtığınızdan emin olduğum için, bu verileri sürdürmenin en iyi yolunun bunu Önbelleğe alması olduğunu düşünüyorum.

Bunun için en uygun yer, MemoryCache olduğunu düşünüyorum, bunun nasıl uygulanacağını açıkladım.

+1

-1: http: // stackoverflow.com/questions/15408117/why-isnt-caching-system-web-önbelleğe alma-önbellek-için-devlet-yönetimi- –

+0

Bence oturumda böyle büyük miktarda veri depolamak için kötü bir fikir. Benim için çözümüm, veritabanında planladığım sonuçları saklamak değildi, ancak önbelleğe alma ile sonuçları daha hızlı bir şekilde sorgulayan sorguyu yapmaktı. Durumum için iyi çalıştı. –

11

Ancak, Verileri Sayfa Sonrası Geri Alma: ViewState and Session State'da tutmanın iki yolu vardır. Ancak, senaryosunu ViewState içine koymanızı öneririm.

ViewState["theDataTable"] = theDataTable; 
Session["theDataTable"] = theDataTable; 

Ve sonra sayfa postback erişebilirsiniz şu şekildedir:

DataTable theDataTable = (DataTable)ViewState["theDataTable"]; 
DataTable theDataTable = (DataTable)Session["theDataTable"]; 
+0

Teşekkürler Muhammed. Oturumu kullanarak veya büyük bir veri kümesine sahip görünümle ilgileniyorum. Bunu büyük bir veri kümesi için yapmayı önerir misiniz? –

+0

Gridview verilerini CSV'ye dışa aktarırsanız ne olur? –

+0

Başka bir yol, Gridview Satırlarınızı sunucuda yineleyebilir ve GridView'dan DataTable'ı çıkarabilir ve daha sonra csv dosyasını dışa aktarabilirsiniz. –

5

Datatable beyan ve

private string _theDataTable="theDataTable"; 
    private DataTable theDataTable 
    { 
      get 
      { 
        if(ViewState[_theDataTable]==null) 
          return new DataTable(); 
        return (DataTable)ViewState[_theDataTable]; 
      } 
      set 
      { 
        ViewState[_theDataTable] = value; 
      } 
    } 

şerefe her şeyin beklendiği gibi çalışır!

+0

yazmak yerine, yeni DataTable() döndürün; ViewState değeri sıfır olduğunda, veri kaynağından yeni bir veri almak daha iyi olurdu (veritabanı veya ne olduğu). – WAQ