加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net – 在运行时更改SqlDataSource.SelectCommand会破坏分页

发布时间:2020-12-16 00:01:30 所属栏目:asp.Net 来源:网络整理
导读:我有一个绑定到SqlDataSource的GridView,默认的SelectCommand定义如下: asp:SqlDataSource ID="SqlDataSource1" runat="server" DataSourceMode="DataSet" ConnectionString="%$ConnectionStrings:MyConn %" ProviderName="MySql.Data.MySqlClient" SelectC
我有一个绑定到SqlDataSource的GridView,默认的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.

有什么方法吗?

谢谢,
标记

解决方法

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

所以你要做的就是告诉SqlDataSource它在上次正确加载时对SQL有什么用处.

最简单的方法是在设置SqlDataSource的SelectCommand时将View存储在ViewState中,然后在Page_Load事件中再次检索它并将其重新设置.

例如:假设您有一些标准的TextBox和一个搜索按钮.当用户在TextBox中输入一些文本,然后单击“搜索”按钮时,您希望它构建一些SQL(顺便说一下,这会让您大量接触SQL注入攻击.确保您擦除了标准好.)然后设置SqlDataSource的SelectCommand属性.在这一点上,您可能希望保存SQL.然后在Page_Load事件中,您需要检索它并将SelectCommand属性设置为该值.

在Click of your按钮中,您可以存储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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读