2011-03-31 108 views
3

嗨 我绑定一个DataTable到一个gridview。 我想在某些回发事件中使用DataTable,并且ii想使用viewstate。 确实gridview保存数据在viewstate?如果没有什么是做这件事的最好方法。gridview保存视图状态的数据?

(完整的故事: 我有一个自定义的GridView从标准asp.net gridview的衍生, 和我把标题按钮导出数据到Excel,我想使用保存在ViewState中的数据导出到Excel)

感谢

+1

的ViewState不[“删除需要重新填充在每次请求的数据”( http://weblogs.asp.net/infinitiesloop/archive/2006/08/03/Truly-Understanding-Viewstate.aspx) – Greg 2011-03-31 18:21:21

回答

6

简短的回答是肯定的,在GridView显示信息,就像任何控制的当前状态,存储在ViewState中。但是,我认为如果可能的话,将这些数据从WebControls可用的ViewState集合中解放出来并不容易。相反,ASP.NET在生命周期中运行事件处理程序之前从ViewState中填充值,因此如果在处理程序中询问GridView对象服务器端,应该会看到单元格的当前值。

+0

谢谢,但我需要一个直接的答案。 – ehsan 2011-03-31 17:26:42

+6

实际上这非常直接。他回答了你关于ViewState存储的问题,并提出了一种检索数据的方法。 – 2011-03-31 18:06:18

4

还有像其他的方法:

1:在会话中存储你的数据表

2:根据所导出按钮多久将要使用和获取的数据量,你可以做一个数据库调用。

+0

+1如果您需要的数据完全相同,请执行#1。如果你不这样做,那么做#2。您的数据库应该能够比Web服务器的会话更好地处理它。 – Greg 2011-03-31 18:19:13

0

以下声明将使思路明确:

这清楚地表明,gridview的数据存储在视图状态:

//Binding GridView 
gv_Settlements.DataSource = dt_settlements; 
gv_Settlements.DataBind(); 

//Retrieving Data 
DataTable dt = (DataTable)gv_Settlements.DataSource; 
+2

如果所有三个语句都在相同的请求中运行,那么'dt' ='dt_settlements'。如果前两行在一个请求中运行,并且最后一行在第二个和'gv_Settlements.ViewStateMode = UI.ViewStateMode.Disabled'中,那么dt将不起作用。 – Trisped 2012-12-12 20:59:40