在web页面中,连接好数据库,并填充了DataSet,我想用TextBox来显示DataSet中的数据,然后有4个按钮分别为"第一页","上一页","下一页","最末页",用来查看每条数据.除了"第一页"和"最末页",能正确响应以外,"上一页"和"下一页"都无效,是咋回事咧?我的方法和相关代码如下:我定义了一个类库来实现数据库的连接,并获得相应的数据,代码如下:
Imports System
Imports System.Data
Imports System.Data.SqlClientPublic Class dataClass
    '定义一个数据库连接,下面所以的方法都用到了这个连接
    Dim sqlConn As New SqlConnection("server=localhost;uid=sa;pwd=123456;database=shopping")    '自定义函数,用于获得指定行、列的数据
    Public Function getData(ByVal n As Integer, ByVal m As Integer) As String
        Dim result As String
        Dim adapter As New SqlDataAdapter("b_showNews", sqlConn)
        adapter.SelectCommand.CommandType = CommandType.StoredProcedure
        Dim ds As New DataSet
        adapter.Fill(ds, "news")
        result = ds.Tables("news").Rows(n).Item(m)
        Return result
    End Function    '自定义函数,用于获得数据集的行数
    Public Function getDSRows() As Integer
        Dim rows As Integer
        Dim adapter As New SqlDataAdapter("b_showNews", sqlConn)
        adapter.SelectCommand.CommandType = CommandType.StoredProcedure
        Dim ds As New DataSet
        adapter.Fill(ds, "news")
        rows = ds.Tables("news").Rows.Count
        Return rows
    End Function
End Class然后,在应用程序中,引用这个项目.为了获得当前行,定义一个整型变量n来表示当前行,代码如下:
   .
   .
   .
'前面的略
    'n为当前行号
    Dim n As Integer = 0    '定义一个新类,也就是上面引入的类库的实例
    Dim myCla As New showData.dataClass    '定义一个显示数据的函数
    Private Function showTextBoxData()
        Me.TextBox1.Text = myCla.getData(n, 0)
        Me.TextBox2.Text = myCla.getData(n, 1)
        Me.TextBox3.Text = myCla.getData(n, 2)
        Me.TextBox4.Text = myCla.getData(n, 3)
        Me.TextBox5.Text = myCla.getData(n, 4)
    End Function    Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        '在此处放置初始化页的用户代码
        If Not Page.IsPostBack Then
            '显示第一条数据
            showTextBoxData()
        End If
    End Sub    '第一条
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        n = 0
        showTextBoxData()
    End Sub    '上一条
    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        n = n - 1
        If n < 0 Then
            n = 0
        End If
        showTextBoxData()
    End Sub    '下一条
    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
        n = n + 1
        If n > myCla.getDSRows() - 1 Then
            n = myCla.getDSRows() - 1
        End If
        showTextBoxData()
    End Sub    '最末条
    Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
        n = myCla.getDSRows() - 1
        showTextBoxData()
    End Sub
End Class可是我点"上一条"和"下一条"按钮的时候n这个变量始终不变,不知是咋回事,我在窗体应用程序中使用同样的方法都能达到目的,但是在web应用程序中好象就不行了,狂郁闷~~~~~~~~~~~~谁能帮我看看呀?谢谢!

解决方案 »

  1.   

    这样不行
    不要设置n变量,改为一个ViewState变量或使用一个控件保存当前页的值
      

  2.   

    Dim n As Integer = 0这句话有问题,因为你点当中的一个按钮后,n又变成0了
      

  3.   

    在每次触发服务器事件时,Class都要经过一个load,unload的生命周期。
    因此,在网页中,不同的服务器事件中,n都将被重新初始化,因此你的n在每一个服务器事件中都是以初始值出现的。
      

  4.   

    可以这样改:
    Private Function showTextBoxData()
            Dim n As Int32
            n = Convert.ToInt32(ViewState("RowNum"))        Me.TextBox1.Text = myCla.getData(n, 0)
            Me.TextBox2.Text = myCla.getData(n, 1)
            Me.TextBox3.Text = myCla.getData(n, 2)
            Me.TextBox4.Text = myCla.getData(n, 3)
            Me.TextBox5.Text = myCla.getData(n, 4)
    End Function然后在page_Load的时候写ViewState("RowNum")=0,再每个按钮中写:比如点“上一页”,那么ViewState("RowNum") -= 1