在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