请教DATAGRID分页问题!!!

FLYZHUZHU_1 2006-10-24 11:43:11
请教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
...全文
239 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
huamin19821124 2006-10-25
  • 打赏
  • 举报
回复
在Datagrid的属性生成器中,有分页这个选项。选择一下就可以了,无需写代码。
ustbwuyi 2006-10-24
  • 打赏
  • 举报
回复
up
aafshzj 2006-10-24
  • 打赏
  • 举报
回复
数据库端分页,datagrid总是只绑定当前页。
Knight94 2006-10-24
  • 打赏
  • 举报
回复
winform?

可以参看
http://blog.csdn.net/knight94/archive/2006/03/23/635885.aspx
http://blog.csdn.net/knight94/archive/2006/03/27/640008.aspx
一直在攀登 2006-10-24
  • 打赏
  • 举报
回复
try put
"Dim parentID As String
parentID = Me.Request.QueryString("nodeid")"
out of BindGrid function.
let parentID become a class variable.
FLYZHUZHU_1 2006-10-24
  • 打赏
  • 举报
回复
不好意思next和last写反了!!
xingyaohua 2006-10-24
  • 打赏
  • 举报
回复
next首先有问题
Protected Sub LB_next_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles

LB_next.Click
myDatagrid1.CurrentPageIndex = myDatagrid1.CurrentPageIndex + 1
BindGrid()
ShowStats()
End Sub
FLYZHUZHU_1 2006-10-24
  • 打赏
  • 举报
回复
up
FLYZHUZHU_1 2006-10-24
  • 打赏
  • 举报
回复
感谢各位的回复!!!大家给我的建议我都试试,但是还是麻烦大家帮我看看,上面的代码为什么不能实现分页呢?用在其他地方没什么问题啊!!!
Knight94 2006-10-24
  • 打赏
  • 举报
回复
webform

ref:
http://www.codeproject.com/useritems/WebDataGridPaging_Problem.asp
http://www.codeproject.com/aspnet/CustomisingDataGridPager.asp
FLYZHUZHU_1 2006-10-24
  • 打赏
  • 举报
回复
"Dim parentID As String
parentID = Me.Request.QueryString("nodeid")"写在BindGrid()外面,问题也依然存在!!!有没有什么好的办法解决啊!!!


to: Knight94(愚翁)

是webform

16,549

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧