1.在转入另一页面的是否,把当然页面的DataGrid页数保存到Session里,或者通过URL传递过去,修改完成返回后,根据Session或者传过来的URL参数,再设置DataGrid的当前页
2.在绑定之前判断一下DataTable中的记录数是否与当前页相匹配

解决方案 »

  1.   

    给你一个我以前写的完整代码,不过格式可能不是很清楚,将就点吧:)
    Dim strprov As String = "provider=microsoft.jet.oledb.4.0;data source=" & Server.MapPath("database.mdb")
        Dim edits As String
        Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            '在此处放置初始化页的用户代码
            If Not IsPostBack Then
                adocmd = New OleDbDataAdapter("select * from class", strprov)
                Dim ds As DataSet = New DataSet()
                adocmd.Fill(ds, "class")
                mytable = ds.Tables.Item(0)
                Dim value As ArrayList = New ArrayList()
                Dim i As Integer
                For i = 0 To mytable.Rows.Count - 1
                    myrow = mytable.Rows.Item(i)
                    value.Add(myrow.Item(0))
                Next
                DropDownList1.DataSource = value
                DropDownList1.DataBind()
                Dim newadocmd As OleDbDataAdapter
                newadocmd = New OleDbDataAdapter("select class as 产品,id as 编号,name as 名称,style as 规格,sour as 厂家,monery as 价格 from datasour", strprov)
                Dim newds As DataSet = New DataSet()
                newadocmd.Fill(newds, "datasour")
                DataGrid1.DataSource = newds.Tables.Item(0)
                DataGrid1.DataBind()
            Else
            End If    End Sub    Private Sub DataGrid1_PageIndexChanged(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridPageChangedEventArgs) Handles DataGrid1.PageIndexChanged
            Dim newadocmd As OleDbDataAdapter
            newadocmd = New OleDbDataAdapter("select class as 产品,id as 编号,name as 名称,style as 规格,sour as 厂家,monery as 价格 from datasour", strprov)
            Dim newds As DataSet = New DataSet()
            newadocmd.Fill(newds, "datasour")
            DataGrid1.DataSource = newds.Tables.Item(0)
            DataGrid1.CurrentPageIndex = e.NewPageIndex
            DataGrid1.DataBind()
        End Sub    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim dss As DataSet = New DataSet()
            System.Diagnostics.Debug.Write(DropDownList1.SelectedItem.Value)
            Dim strconn As String = "select class as 产品,id as 编号,name as 名称,style as 规格,sour as 厂家,monery as 价格 from datasour where class='" & Trim(DropDownList1.SelectedItem.Text) & "'"
            adocmd = New OleDbDataAdapter(strconn, strprov)
            adocmd.Fill(dss, "datasour")
            DataGrid1.DataSource = dss.Tables.Item(0)
            DataGrid1.DataBind()
        End Sub    Private Sub DataGrid1_DeleteCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridCommandEventArgs) Handles DataGrid1.DeleteCommand
            Dim i As Integer = (DataGrid1.CurrentPageIndex * 15) + e.Item.ItemIndex
            adocmd = New OleDbDataAdapter("select * from datasour", strprov)
            Dim d As DataSet = New DataSet()
            adocmd.Fill(d, "datasour")
            mytable = d.Tables.Item(0)
            mytable.Rows.Item(i).Delete()
            cmd = New OleDbCommandBuilder(adocmd)
            adocmd.Update(d, "datasour")
            Response.Redirect("temp.htm")
            ' Dim newadocmd As OleDbDataAdapter
            ' newadocmd = New OleDbDataAdapter("select class as 产品,id as 编号,name as 名称,style as 规格,sour as 厂家,monery as 价格 from datasour", strprov)
            ' Dim newds As DataSet = New DataSet()
            ' newadocmd.Fill(newds, "datasour")
            ' DataGrid1.DataSource = newds.Tables.Item(0)
            '  DataGrid1.DataBind()
        End Sub    Private Sub DataGrid1_EditCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridCommandEventArgs) Handles DataGrid1.EditCommand
            DataGrid1.EditItemIndex = e.Item.ItemIndex
            'Dim text As TextBox
            'text = CType(e.Item.Cells(3).Controls(0), TextBox)
            'edit = text.Text
            Dim newadocmd As OleDbDataAdapter
            newadocmd = New OleDbDataAdapter("select class as 产品,id as 编号,name as 名称,style as 规格,sour as 厂家,monery as 价格 from datasour", strprov)
            Dim newds As DataSet = New DataSet()
            newadocmd.Fill(newds, "datasour")
            DataGrid1.DataSource = newds.Tables.Item(0)
            DataGrid1.DataBind()
        End Sub    Private Sub DataGrid1_CancelCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridCommandEventArgs) Handles DataGrid1.CancelCommand
            DataGrid1.EditItemIndex = -1
            Dim newadocmd As OleDbDataAdapter
            newadocmd = New OleDbDataAdapter("select class as 产品,id as 编号,name as 名称,style as 规格,sour as 厂家,monery as 价格 from datasour", strprov)
            Dim newds As DataSet = New DataSet()
            newadocmd.Fill(newds, "datasour")
            DataGrid1.DataSource = newds.Tables.Item(0)
            DataGrid1.DataBind()
            DataGrid1.DataBind()
        End Sub    Private Sub DataGrid1_UpdateCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridCommandEventArgs) Handles DataGrid1.UpdateCommand
            Dim i As Int16
            i = (DataGrid1.CurrentPageIndex * 15) + e.Item.ItemIndex
            adocmd = New OleDbDataAdapter("select * from datasour", strprov)
            Dim dd As DataSet = New DataSet()
            adocmd.Fill(dd, "datasour")
            mytable = dd.Tables.Item(0)
            myrow = mytable.Rows.Item(i)
            edits = myrow.Item(1)
            System.Diagnostics.Debug.Write(myrow.Item(1))
            Dim tb As TextBox
            tb = CType(e.Item.Cells(7).Controls(0), TextBox) 'id
            Dim tb1 As TextBox
            tb1 = CType(e.Item.Cells(4).Controls(0), TextBox) 'name
            Dim tb2 As TextBox
            tb2 = CType(e.Item.Cells(5).Controls(0), TextBox) 'stylw
            Dim tb3 As TextBox
            tb3 = CType(e.Item.Cells(6).Controls(0), TextBox)
            '   myrow.Item(5) = tb.Text
            '   mytable.GetChanges()
            '  adocmd.Update(dd, "datasour")
            '===========================================================
            Dim strsele As String = "update datasour set monery='" & tb.Text & "',name='" & tb1.Text & "',style='" & tb2.Text & "',sour='" & tb3.Text & "' where id='" & edits & "'"
            System.Diagnostics.Debug.Write(edits.ToString)
            Dim sqlconn As New OleDbConnection(strprov)
            Dim cmdtable As OleDbCommand = New OleDbCommand(strsele, sqlconn)
            cmdtable.CommandType = CommandType.Text
            If sqlconn.State <> ConnectionState.Open Then
                sqlconn.Open()
            End If
            cmdtable.ExecuteNonQuery()
            If sqlconn.State <> ConnectionState.Closed Then
                sqlconn.Close()
            End If
            DataGrid1.EditItemIndex = -1
            Dim newadocmd As OleDbDataAdapter
            newadocmd = New OleDbDataAdapter("select class as 产品,id as 编号,name as 名称,style as 规格,sour as 厂家,monery as 价格 from datasour", strprov)
            Dim newds As DataSet = New DataSet()
            newadocmd.Fill(newds, "datasour")
            DataGrid1.DataSource = newds.Tables.Item(0)
            DataGrid1.DataBind()
        End Sub    Private Sub DataGrid1_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DataGridItemEventArgs) Handles DataGrid1.ItemDataBound
            If e.Item.ItemType = ListItemType.EditItem Then
                Dim box As TextBox
                Dim x As Integer
                For x = 2 To 7
                    box = CType(e.Item.Cells(x).Controls(0), TextBox)
                    If x = 2 Or x = 5 Or x = 6 Then
                        box.Width = Unit.Pixel(55)
                    ElseIf x = 3 Then
                        box.Width = Unit.Pixel(65)
                    ElseIf x = 4 Then
                        box.Width = Unit.Pixel(190)
                    Else
                        box.Width = Unit.Pixel(50)                End If
                Next
            End If
        End Sub
    End Class
      

  2.   

    呵呵,太多了,上面包括了更新时更改text控件的长度,获取编辑时的哪一行等.
      

  3.   

    1.点击编辑时,记录下来int i=DataGrid.CurrentPageIndex,把它保存在Session,或ViewState中,返回时再把i赋给DataGrid.CurrentPageIndex=i;
    2.删除前先判断DataTable.Rows.Count % DataGrid.PageSize ==0并且dataGrid.CurrentPageIndex>0
    使datagrid.CurrentPageIndex =datagrid.PageCount -2;