asp.net - 在运行时更改 SqlDataSource.SelectCommand 会中断分页

标签 asp.net gridview pagination sqldatasource selectcommand

我有一个绑定(bind)到 SqlDataSourceGridView,默认的 SelectCommand 定义如下:

<asp:SqlDataSource ID="SqlDataSource1" runat="server" DataSourceMode="DataSet"
      ConnectionString="<%$ ConnectionStrings:MyConn %>" 
      ProviderName="MySql.Data.MySqlClient" 
      SelectCommand="select * from blah blah" />

在某些情况下,我必须在运行时动态更改此查询,因此我执行以下操作:

SqlDataSource1.SelectCommand = sql; // 'sql' is the new query
GridView1.PageIndex = 0;
GridView1.EditIndex = -1;
GridView1.SelectedIndex = -1;
GridView1.DataBind();
updatePanel.Update();

这实际上工作得很好,但是当我单击分页控件时,结果集默认返回到 SqlDataSource1 中定义的 SelectCommand

有办法解决这个问题吗?

谢谢, 标记

最佳答案

这里的问题是,当页面在 Pager 链接发出的提交后加载时,SqlDataSource 会被重新创建。没有什么可以告诉它动态加载您设置的内容。如果您要使用带有参数的存储过程,那么 ASP 会将参数保存到 ViewState 中,并在页面加载时重新运行 SqlDataSource 中的选择。

所以你要做的就是告诉 SqlDataSource 最后一次正确加载时它为 SQL 提供了什么。

最简单的方法是在设置 SqlDataSource 的 SelectCommand 时将 SQL 存储在 ViewState 中,然后在 Page_Load 事件中再次检索它并将其设置回来。

例如:假设您有一个用于某些条件的文本框和一个搜索按钮。当用户在文本框中输入一些文本,然后单击“搜索”按钮时,您希望它构建一些 SQL(顺便说一下,这会让您面临 SQL 注入(inject)攻击的巨大风险。请务必清理您的 SQL 注入(inject)攻击)条件。),然后设置 SqlDataSource 的 SelectCommand 属性。此时您需要保存 SQL。然后,在 Page_Load 事件中,您需要检索它并将 SelectCommand 属性设置为该值。

在单击按钮时,您可以存储 SQL:

Dim sSQL as String

sSQL = "SELECT somefields FROM sometable WHERE somefield = '" & Me.txtCriteria.Text & "'"
SqlDataSource1.SelectCommand = sSQL
ViewState("MySQL") = sSQL

然后在 Page_Load 事件中您可以检索 SQL 并设置 SelectCommand 属性:

Dim sSQL as String

If Me.IsPostBack() Then
    sSQL = ViewState("MySQL")
    SqlDataSource1.SelectCommand = sSQL
End If

关于asp.net - 在运行时更改 SqlDataSource.SelectCommand 会中断分页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3319358/

相关文章:

c# - 实体状态错误

javascript - 如何禁用浏览器中的后退、前进和刷新功能?

java - Android GridView 适配器与 AsyncTask

android - 如何在android中为 GridView 实现onclickevent和ontouchevent

wordpress - 自定义帖子 wp_query 上的分页

asp.net - 在 visual studio 中处理 aspx 文件时,如何让 chrome 停止缓存

c# - 获取 GridView 行的单元格值

java - 更新分页。是否可以?

php - WordPress的category.php页面分页显示404页面

asp.net - 我们可以通过客户端浏览器看到 html localstorage 内容吗?