作者 主題: 請教asp.net gridview分頁及自訂SQL語法分析  (閱讀 8892 次)

0 會員 與 1 訪客 正在閱讀本文。

Quota

  • 活潑的大學生
  • ***
  • 文章數: 352
    • 檢視個人資料
    • http://home.kimo.com.tw/jiannrongkimo/
請問如果我用CheckBoxList做SQL條件篩選,而GridView有設定分頁
現在的問題是 一旦我跳到第二頁 他就變成全部顯示 而不會做條件篩選
而且CheckBoxList原勾選的項目會被清除
請問我該如何修改呢?
附上我的程式碼如下:



Partial Class _default
Inherits System.Web.UI.Page
Protected Sub btnQuery_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnQuery.Click
Dim whereCmd As String = ""
Dim choict As Integer = 0
Dim txtbox1 As Integer = 0
whereCmd = "SELECT id,noticeDate,Title FROM notice WHERE ( "
For i As Integer = 0 To Me.CheckBoxList1.Items.Count - 1
If Me.CheckBoxList1.Items(i).Selected Then
If CheckBoxList1.Items(i).Value = "1" Then
If choict = 1 Then '代表其他項目已經勾選
whereCmd += [String].Format(" or ((Id)=1) AND ((Title) Like '%{0}%')) , Me.tbTitle.Text.Trim(), Me.tbTitle.Text.Trim())
Else
'以下語法先省略,語法為SQL語法設定
End If
End If
If CheckBoxList1.Items(i).Value = "2" Then
If choict = 1 Then '代表其他項目已經勾選

'以下語法先省略,語法為SQL語法設定
Else
'以下語法先省略,語法為SQL語法設定
End If
End If
If CheckBoxList1.Items(i).Value = "3" Then
If choict = 1 Then '代表其他項目已經勾選

'以下語法先省略,語法為SQL語法設定
Else
'以下語法先省略,語法為SQL語法設定
End If
End If
If CheckBoxList1.Items(i).Value = "4" Then
If choict = 1 Then '代表其他項目已經勾選

'以下語法先省略,語法為SQL語法設定
Else
'以下語法先省略,語法為SQL語法設定
End If
End If
End If
Next
'判斷是否有勾選,若四個都沒有選取
If choict = 0 And tbTitle.Text.Length > 0 Then
'以下語法先省略,語法為SQL語法設定
ElseIf choict = 0 Then '沒有checkbox 也沒有textbox輸入 顯示全部
whereCmd = AccessDataSource1.SelectCommand
Else
whereCmd += " ) "
End If
AccessDataSource1.SelectCommand = whereCmd
GridView1.DataBind()
End Sub
Protected Sub viewAll_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles viewAll.Click
tbTitle.Text = ""
For i As Integer = 0 To Me.CheckBoxList1.Items.Count - 1
CheckBoxList1.Items(i).Selected = False
Next
GridView1.DataSourceID = "accessdatasource1"
GridView1.DataBind()
End Sub
End Class

jonnyhuang

  • 可愛的小學生
  • *
  • 文章數: 11
  • 性別: 男
    • 檢視個人資料
因為ASP.NET是無狀態管理所以修改過的SelectCommand不會被保留
建議將whereCmd改成Session("whereCmd")來存取
在Page_Load去判斷
If Session("whereCmd") IsNot Nothing Then
  AccessDataSource1.SelectCommand = Session("whereCmd")
End If

GridView1.DataSourceID & GridView1.DataBind() 擇一就好
若已經指定DataSourceID就不用再叫用DataBind()
只在錯誤中學習