【问题标题】:Keeping Data in GridView after PostBackPostBack 后将数据保留在 GridView 中
【发布时间】:2013-08-10 09:04:11
【问题描述】:

我有一个与SqlDataSource 关联的GridView

当我单击Button 时,我会更改SelectCommand,然后我使用DataBind 来更新GridView

在 PostBack 之后,我希望保留最新的数据,我不希望 GridView 被原始 SelectCommand 加载。

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

我在 Grid 本身上尝试了 EnableViewState="true"EnableViewState="false",但没有成功。

代码

<asp:GridView ID="GridView1" ...... DataSourceID="UsersSource" >

<asp:SqlDataSource ID="UsersSource" ... SelectCommand="SELECT * FROM USERS"></asp:SqlDataSource>

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

现在我点击Button,它执行以下操作:

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

GridView 被新数据填充。

现在假设,我点击一个表头对这个表进行排序,会有一个回发,之后这个表中的数据会包含第一次查询的结果。

这里需要做什么?

更多信息

声明:

&lt;%@ Page Language="C#" AutoEventWireup="true" CodeFile="Admin.aspx.cs" Inherits="Admin" %&gt;

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

【问题讨论】:

  • 你能显示你的 包含gridview的页面的声明吗?您的 Page_Load 事件中还有代码吗?
  • @FlopScientist 请检查更新。

标签: c# asp.net gridview postback viewstate


【解决方案1】:

这是设计使然。这里的问题是 SqlDataSource 在页面加载时被重新创建,它不会在回发时维护 selectcommand,而是恢复到创建 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"];

参考微软的这篇帖子:http://connect.microsoft.com/VisualStudio/feedback/details/105069/sqldatasource-selectcommand-not-persisting-on-postback

【讨论】:

    猜你喜欢
    • 2011-12-23
    • 2011-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多