请教DATAGRID分页问题!!!
请教DATAGRID分页问题,问题是这样的,以前用这段分页代码是没有问题的,但现在调用的数据绑定用到递归函数了,分页就出问题了,一点“下一页”或“上一页”就会提示值超出范围,由于比较菜,弄了好久都不知道问题出在哪儿?所以请大家帮忙看看,万分感谢!!!
该页面的源代码如下:
Partial Class intellimenuv
Inherits System.Web.UI.Page
Public instiid As String
Public classid As String
Dim MyConn As New System.Data.OleDb.OleDbConnection("Provider=MSDAORA.1;Data
Source=oraerpzhu;User ID=resource_man;Password=Resource;")
'定义一个数据集,用于缓存数据
Dim mySet As New Data.DataSet()
'定义一个数据库适配器,用于联系数据库和数据集
Dim myAdapter As New System.Data.OleDb.OleDbDataAdapter()
'声明三个数组,来存放将要删除节点的ID集合和TEXT集合;
Public arraynodeID(300) As String
Public arraynodetext(300) As String
'节点的孩子的个数
Public nodecount As Integer
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
MyBase.Load
'在此处放置初始化页的用户代码
Dim parentID As String
If Not IsPostBack Then
If Request("nodeID") = "" Then
Me.Label1.Text = "该节点下的管理制度信息为0条!!"
Else
parentID = Me.Request.QueryString("nodeid")
'定义一个连接字符串,连接ORACLE,在运行时设置连接属性
MyConn = New System.Data.OleDb.OleDbConnection("Provider=MSDAORA.1;Data
Source=oraerpzhu;User ID=resource_man;Password=Resource;")
'如果删除的是类别,那么查找与类别相关的工资项。相关的资料全部删除。
'实例化选择条件字符串,取出所有的数据在所要查找数据的表。
Dim strselecttext As String
strselecttext = "select * from intelligence_tree where nodeid='" & parentID & "'"
'定义数据阅读器
Dim myreader As System.Data.OleDb.OleDbDataReader
'定义数据阅读器将用到的数据命令
Dim readersql As Data.OleDb.OleDbCommand
'命令行实例化
readersql = New Data.OleDb.OleDbCommand(strselecttext, MyConn)
'打开数据连接
MyConn.Open()
'运行命令,调用ExecuteReader方法。填充阅读器
myreader = readersql.ExecuteReader()
'关闭阅读器
myreader.Close()
MyConn.Close()
BindGrid()
ShowStats()
End If
End If
End Sub
Private Sub BindGrid()
Dim parentID As String
parentID = Me.Request.QueryString("nodeid")
'至少要删除当前节点,所以要删除节点的个数先为1
nodecount = 1
'获得当前节点的ID值
arraynodeID(0) = parentID
getnode(parentID)
'定义一个k为数值型变量,其作用是记录并传递当前记录的ID
Dim k As New Integer()
'定义一个连接字符串,连接ORACLE,在运行时设置连接属性
MyConn = New System.Data.OleDb.OleDbConnection("Provider=MSDAORA.1;Data
Source=oraerpzhu;User ID=resource_man;Password=Resource;")
MyConn.Open()
For k = 0 To nodecount - 1
Dim da As Data.OleDb.OleDbDataAdapter = New Data.OleDb.OleDbDataAdapter("select
distinct * from intelligence_info where classid='" & arraynodeID(k) & "' order by id desc ",
MyConn)
da.Fill(mySet, "intelligence_info")
Me.myDatagrid1.DataSource = mySet.Tables("intelligence_info").DefaultView
Me.myDatagrid1.DataBind()
Dim Count As Integer = mySet.Tables("intelligence_info").Rows.Count
Me.Label1.Text = "该节点下的管理制度信息为" & Count & "条!!"
Next
MyConn.Close()
ShowStats()
End Sub
Sub ShowStats()
pagecurrent.Text = "第 " + (myDatagrid1.CurrentPageIndex + 1).ToString() + " 页"
pagecount.Text = "总共 " + myDatagrid1.PageCount.ToString() + " 页"
End Sub
Private Sub getnode(ByVal parentId As Integer)
'在运行时连接,并设置连接属性
MyConn = New System.Data.OleDb.OleDbConnection("Provider=MSDAORA.1;Data
Source=oraerpzhu;User ID=resource_man;Password=Resource;")
'设置SelectCommand命令
myAdapter.SelectCommand = New System.Data.OleDb.OleDbCommand("select * from
intelligence_tree where parentID='" & parentId & "' ", MyConn)
'填充数据集
myAdapter.Fill(mySet, "intelligence_tree")
Dim dv As New Data.DataView()
Dim drv As Data.DataRowView
'Dim tmpNd As Microsoft.Web.UI.WebControls.TreeNode
'intId为数值型变量,其作用是记录并传递当前记录的ID,做为它子节点的PARENTID值
Dim intId As Integer
dv.Table = mySet.Tables("intelligence_tree")
'parentId传递的是 additem函数中的intId.下面语句的作用是找出当前节点的子孩子集合。
dv.RowFilter = "parentID='" & parentId & "'"
'如果当前节点有孩子,则遍历所有的孩子,把所有孩子的节点ID记录下来。
Dim Count As Integer = mySet.Tables("intelligence_tree").Rows.Count
For Each drv In dv
arraynodeID(nodecount) = drv("nodeID")
arraynodetext(nodecount) = drv("nodename")
' 将节点的ID放入数组,然后数组指针移到下一个。
nodecount = nodecount + 1
intId = drv("nodeID")
'调用递归函数,找下一个孩子
getnode(intId)
Next
End Sub
'分页代码
Protected Sub LB_last_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles
LB_last.Click
If myDatagrid1.CurrentPageIndex = myDatagrid1.PageCount - 1 Then
Exit Sub
Else
myDatagrid1.CurrentPageIndex += 1
BindGrid()
ShowStats()
End If
End Sub
Protected Sub LB_first_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles
LB_first.Click
myDatagrid1.CurrentPageIndex = 0
BindGrid()
ShowStats()
End Sub
Protected Sub LB_pre_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles
LB_pre.Click
If myDatagrid1.CurrentPageIndex = 0 Then
Exit Sub
Else
myDatagrid1.CurrentPageIndex -= 1
BindGrid()
ShowStats()
End If
End Sub
Protected Sub LB_next_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles
LB_next.Click
myDatagrid1.CurrentPageIndex = myDatagrid1.PageCount - 1
BindGrid()
ShowStats()
End Sub
End Class