我在web.aspx页面中有四个文本框(一个用来输入查询条件,三个用来输出查询结果),一个查询按钮 我想达到的目的是按一下按钮,输出datatable中的第一条记录,再按一下,输出第二条。 我在web.aspx.vb中写了如下代码:   在声明中         Dim dt As New Data.DataTable 
        Dim da As New System.Data.SqlClient.SqlDataAdapter 
        Dim i as int   在page_load中         Dim sel As String = D1.Text                                    
        Dim sqlcom As String 
        sqlcom = "Select * from test where ([select] ='" & sel & "')"            Dim conn As New Data.SqlClient.SqlConnection 
        conn.ConnectionString = ConfigurationSettings.AppSettings("ConnectionString")         Dim myCommand As New Data.SqlClient.SqlCommand(sqlcom, conn) 
        conn.Open()         da.SelectCommand = myCommand 
        da.Fill(dt)         i = dt.Rows.Count - 1   在Button1_Click中         tb1.Text = dt.Rows(i)("select") 
        tb2.Text = dt.Rows(i)("textbox") 
        tb3.Text = dt.Rows(i)("label")         i = i - 1 
现在执行后,按一下,第一条记录在三个文本框出来了,没有问题,但是在按一下仍然是第一条记录,好像按好按钮系统会自动执行page_load,最后的i = i - 1白执行了。有什么办法可以解决这个问题么?

解决方案 »

  1.   

    在Page_Load中用
    if(!Page.IsPostBack)
    {
        绑定数据
    }
      

  2.   

    1楼的正解你按了一次button页面就会刷新一次
    自然就要读取page_load事件了咯先用Page.IsPostBack判断是否是首次载入页面
      

  3.   

        Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
            Dim i As Integer
            If (Page.IsPostBack = False) Then
                Dim sel As String = D1.Text                                    
                Dim sqlcom As String 
                sqlcom = "Select * from test where ([select] ='" & sel & "')"                Dim conn As New Data.SqlClient.SqlConnection 
                conn.ConnectionString = ConfigurationSettings.AppSettings("ConnectionString")             Dim myCommand As New Data.SqlClient.SqlCommand(sqlcom, conn) 
                conn.Open()             da.SelectCommand = myCommand 
                da.Fill(dt)             i = dt.Rows.Count - 1             If Session("i") Is Nothing Then
                    Session("i") = i
                End If
            End If
        End Sub    Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim i As Integer = CType(Session("i"), Integer)        tb1.Text = dt.Rows(i)("select") 
            tb2.Text = dt.Rows(i)("textbox") 
            tb3.Text = dt.Rows(i)("label")         i = i - 1         Session("i") = i    End Sub
      

  4.   


    这个MS不是VB语句吧?
      

  5.   

    运行到 tb1.Text = dt.Rows(i)("select")提示 在位置 1 处没有任何行此时i = 1的
      

  6.   

    怎么不用datareader呢?这个是顺序执行的
      

  7.   

    if(!this.IsPostBack)
    {
    绑定数据;
    }
      

  8.   

    把i定义成静态的static
    再价格变量对应所有记录数,如
    Dim count as int 
    然后再page_load里面加上代码
    if(!IsPostback)
    {
    count  = dt.Rows.Count - 1;
    i= count;
    }
    就可以了。
      

  9.   


    if(!this.IsPostBack) 

    //绑定数据; 
    }