在PostBack之后将数据保存在GridView中

我有一个与SqlDataSource相关联的GridView

当我单击一个Button ,我更改了SelectCommand ,然后使用DataBind来更新GridView

在PostBack之后,我想要保留最新的Data,我不希望GridView由原始的SelectCommand加载。

我知道这是通过一个名为ViewState的东西完成的,但我没有设法以正确的方式实现它。

我在Grid上尝试了EnableViewState="true"EnableViewState="false" ,没有运气。

  

在启动时, GridView将填充SELECT * FROM USERS的结果。

现在我单击一个Button ,执行以下操作:

 UsersSource.SelectCommand = "SELECT * FROM USERS WHERE user_id = 1"; GridView1.DataBind(); 

GridView充满了新的数据。

现在让我们说,我点击一个标题对这个表进行排序,会有一个回发,之后,这个表中的数据将包含第一个查询的结果。

这里有什么需要做的?

更多信息

宣言:

页面加载方法中没有任何内容。

这是设计的。 这里的问题是当页面加载时重新创建SqlDataSource它不会在回发时维护select命令,而是恢复到创建DataSource时设置的那个。

因此,您需要告诉SqlDataSource它在上次正确加载时对SelectCommand含义。

只需将SQL COMMAND存储在ViewState中,并通过在Page指令上设置ViewStateEncryptionMode来启用加密来保护内容。 [始终选择安全作为标准]

 <%@ Page ViewStateEncyptionMode="Always" %> 

在按钮单击事件中,将新命令存储在视图状态中:

 ViewState["currentCommand"] = "SELECT * FROM USERS WHERE user_id = 1"; UsersSource.SelectCommand = ViewState["currentCommand"]; GridView1.DataBind(); 

现在在页面加载事件中,设置它:

 if( ViewState["currentCommand"] !=null) UsersSource.SelectCommand = ViewState["currentCommand"]; 

请参阅Microsoft的这篇文章: http : //connect.microsoft.com/VisualStudio/feedback/details/105069/sqldatasource-selectcommand-not-persisting-on-postback