c# - 回发后将数据保留在 GridView 中

标签 c# asp.net gridview postback viewstate

我有一个 GridViewSqlDataSource 相关联.

当我点击 Button , 我改变了 SelectCommand然后我使用 DataBind更新 GridView .

PostBack 后,我希望保留最新的数据,我不想要 GridView由原版加载SelectCommand .

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

我都试过了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填充了新数据。

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

这里需要做什么?

更多信息

声明:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Admin.aspx.cs" Inherits="Admin" %>

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

最佳答案

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

因此您需要告诉 SqlDataSource 在上次正确加载时它对 SelectCommand 有什么。

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

<%@ Page ViewStateEncyptionMode="Always" %>

在您的按钮点击事件中,将您的新命令存储在 View 状态中:

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

关于c# - 回发后将数据保留在 GridView 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18160368/

相关文章:

c# - 使用 linq to entities c# 的 gridview_sorting 事件

c# - 在 ASP.net 中使用 SQL 填充的 GridView 的日期格式 - 非绑定(bind)字段

asp.net - 用于 Flex 4.6 前端的 ASP.NET 中没有 MVC 框架的 Web API

c# - 在 Gridview 中获取 TemplateFields 的值

c# - 将 GUI 与微 Controller 连接

c# - .Net 中嵌入两次的字符串常量?

javascript - 根据之前访问过的页面历史记录控制图像

希望进入 SharePoint 的 ASP.NET 开发人员 - 2007 或 2010?

c# - gridview 标题模板中的 foreach 复选框

c# - AngularJs/webAPI : recieving null in the parameter of webAPI