Gridview查询后,对查询结果进行编辑,可无法定位我要的记录行,解决方法

终于解决了!
这是由于SQLDataSource中的SelectCommand是不被保留的。  
所以当您修改了SelectCommand后,点击了编辑后,ASP.net会自动再重新生成一次SqlDataSource,而他的SelectCommand依旧使用的还是原先默认设置中的select * from Table。所以他会从去数据库中,将所有的数据都都回来。  
解决的方法就是将SelectCommand加入到Session或是ViewState或是Cookie中,然后再每次页面Load的时候,将内容付给SqlDataSource  
如下:  
1、将页面中自动生成的数据源查询命令语句设置为空。然后在 pageload中 检查session如果不为空则说明有查询语句,赋给即可。如果初次打开页面,可以else 给默认语句,即可。
protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)  ‘控件查询事件
{  
SqlDataSource1.SelectCommand = "select * from table4 where id = '6'";  
Session["SqlDataSouce1Command"] = SqlDataSource1.SelectCommand;  
}  

protected void Page_Load(object sender, EventArgs e)  
{  
if (!(Session["SqlDataSouce1Command"] == null))  
SqlDataSource1.SelectCommand = Session["SqlDataSouce1Command"].ToString();  

}  

vb.net 的
 Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

        '将数据源 语句存到sesson中,而不是写在页面中  为了解查询结果不编辑时,行错。
        If Session("sqlcmd") <> "" Then '如果session中有语句则就设置上
            AccessDataSource1.SelectCommand = Session("sqlcmd").ToString()
        End If

End Sub
Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim can1, can2 As String
        can1 = DropDownList1.SelectedValue
        can2 = TextBox1.Text
        If can2.Trim() <> "" Then
            AccessDataSource1.SelectCommand = "SELECT  *  FROM [gslist] where " & can1 + " like'" & can2 + "%'"
            GridView1.DataBind()
            If GridView1.Rows.Count() = 0 Then Button2.Enabled = False Else Button2.Enabled = True
        End If

        '将语句存放到session中
        AccessDataSource1.SelectCommand = "SELECT  *  FROM [gslist] where " & can1 + " like'" & can2 + "%'"
        Session("sqlcmd") = AccessDataSource1.SelectCommand
End Sub
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值