关于winfrom里DataGrid的自动分页的问题!

blue_apple 2004-11-22 08:04:02
各位老大!我又来提问题了!

我VS里使用DataGrid的属性生成器给DataGrid设定了自动分页的功能,但是执行的时候,我按DataGrid下面的分页按钮,DataGrid没有任何反应,依然是显示首页,请问这问题如何解决?谢谢!
...全文
359 43 打赏 收藏 转发到动态 举报
写回复
用AI写文章
43 条回复
切换为时间正序
请发表友善的回复…
发表回复
blue_apple 2004-11-23
  • 打赏
  • 举报
回复
差不多吧,反正使得,人为的改动DropDownList1或TextBox1的值也不会改变原来的DataGrid里面的值就OK了!系统操作员的水平不高,就怕她们不听话乱搞的话又说我的系统有问题就麻烦了。

下班了,下午在继续讨论吧!谢谢高手!
zhrenxi 2004-11-23
  • 打赏
  • 举报
回复
那你的意思就是要保存Table2?
blue_apple 2004-11-23
  • 打赏
  • 举报
回复
我不希望PageIndexChanged中有:
If DropDownList1.SelectedValue = "用户编号" Then txtSql = "select * from tbyh where 用户编号=" & TextBox1.Text.Trim
If DropDownList1.SelectedValue = "用户名称" Then txtSql = "select * from tbyh where 用户名称 like '%" & TextBox1.Text & "%'"
If DropDownList1.SelectedValue = "用户地址" Then txtSql = "select * from tbyh where 用户地址 like '%" & TextBox1.Text & "%'"
If DropDownList1.SelectedValue = "用户电话" Then txtSql = "select * from tbyh where 用户电话 like '%" & TextBox1.Text & "%'"

这段程序,因为万一在这一过程中DropDownList1或TextBox1的值被人为改变,那整个DataGrid就变了,不是原来那个了。
zhrenxi 2004-11-23
  • 打赏
  • 举报
回复
那你的目的是什么?
blue_apple 2004-11-23
  • 打赏
  • 举报
回复
Public Class sfcx
Inherits System.Web.UI.Page
Dim Sqlcnn As SqlConnection
Dim SqlDa As New SqlClient.SqlDataAdapter
Dim dt2 As New DataSet
Dim Table2 As New DataTable

Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'在此处放置初始化页的用户代码
Sqlcnn = New SqlClient.SqlConnection
Sqlcnn.ConnectionString = "workstation id=WIN2003;packet size=4096;user id=sa;Pwd=123456789;data source=""192.168.0.2"";pers" & _
"ist security info=False;initial catalog=sfxtdb"
Sqlcnn.Open()
End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
DataGrid1.Visible = True
Panel1.Visible = True
DataGrid2.Visible = False

Dim txtSql As String
Dim a As String = DropDownList1.SelectedValue

If DropDownList1.SelectedValue = "用户编号" Then txtSql = "select * from tbyh where 用户编号=" & TextBox1.Text.Trim
If DropDownList1.SelectedValue = "用户名称" Then txtSql = "select * from tbyh where 用户名称 like '%" & TextBox1.Text & "%'"
If DropDownList1.SelectedValue = "用户地址" Then txtSql = "select * from tbyh where 用户地址 like '%" & TextBox1.Text & "%'"
If DropDownList1.SelectedValue = "用户电话" Then txtSql = "select * from tbyh where 用户电话 like '%" & TextBox1.Text & "%'"


Dim SqlDa2 As New SqlClient.SqlDataAdapter(txtSql, Sqlcnn)
SqlDa = SqlDa2
SqlDa2.Fill(dt2, "tbyh")
SqlDa.Fill(dt2, "tbyh")
Table2 = dt2.Tables(0)
DataGrid1.DataSource = Table2
DataGrid1.DataBind()
这就是我的按钮程序。

我把它加入进去是可以的,你可以看看上面我贴出来的一个成功的程序。但这不是我的目的。
zhrenxi 2004-11-23
  • 打赏
  • 举报
回复
你把Table2绑定数据的部分复制粘贴在 ---//还是中间这里要加代码-------------这里应该就可以了,试一下
amendajing 2004-11-23
  • 打赏
  • 举报
回复
up
zhrenxi 2004-11-23
  • 打赏
  • 举报
回复
响应事件之后, 页面重新打开,程序再依次执行,首先又要定义参数,所以你定义的全局变量又会重新调用一次,根本不可能保存你上次的table2的
zhrenxi 2004-11-23
  • 打赏
  • 举报
回复
全局变量也不行的
zhrenxi 2004-11-23
  • 打赏
  • 举报
回复
Private Sub DataGrid1_PageIndexChanged(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridPageChangedEventArgs) Handles DataGrid1.PageIndexChanged

DataGrid1.CurrentPageIndex = e.NewPageIndex

//还是中间这里要加代码

DataGrid1.DataBind()

End Sub

你再什么地方对Datgrid1加数据的,是什么代码,你再到这里面写一次就可以了
blue_apple 2004-11-23
  • 打赏
  • 举报
回复
问题是:
必须绑定DataGrid以前,再运行一次绑定数据院的函数。

这样就是在运行一次按钮搜索的程序?可不可以不运行啊?我如何可以把上次运行的Table2保存下来?

我已经把Table2定义为全局变量了,怎么数据还保存不了?要如何才能不需要在运行一次搜索程序啊?
zhrenxi 2004-11-23
  • 打赏
  • 举报
回复
是的,你双击那事件就出现了Private Sub DataGrid1_PageIndexChanged(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridPageChangedEventArgs) Handles DataGrid1.PageIndexChanged
是吧?那这没问题啊
blue_apple 2004-11-23
  • 打赏
  • 举报
回复
在VS开发界面里头选的咯,先在左边选DataGrid1,然后在右边选PageIndexChanged
zhrenxi 2004-11-23
  • 打赏
  • 举报
回复
那你说你的Private Sub DataGrid1_PageIndexChanged(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridPageChangedEventArgs) Handles DataGrid1.PageIndexChanged
是怎么出来的?
blue_apple 2004-11-23
  • 打赏
  • 举报
回复
Private Sub DataGrid1_PageIndexChanged(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridPageChangedEventArgs) Handles DataGrid1.PageIndexChanged
必须从事件中添加的。什么意思啊?

必须绑定DataGrid以前,再运行一次绑定数据院的函数。

这样就是在运行一次按钮搜索的程序?可不可以不运行啊?我如何可以把上次运行的Table2保存下来?
zhrenxi 2004-11-23
  • 打赏
  • 举报
回复
还有,你这个Private Sub DataGrid1_PageIndexChanged(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridPageChangedEventArgs) Handles DataGrid1.PageIndexChanged
必须从事件中添加的。否则是不会运行的。
zhrenxi 2004-11-23
  • 打赏
  • 举报
回复
事件发生后,你的Table2变量已经丢失参数了吧,所以你分页的时候,这个Table2已经是null,以至出现------------无效的 CurrentPageIndex 值。它必须大于等于 0 且小于 PageCount。
这样的错误,所以问题要解决,你就必须绑定DataGrid以前,再运行一次绑定数据院的函数。
blue_apple 2004-11-23
  • 打赏
  • 举报
回复
奇怪,我把搜索按钮程序加进去:
Private Sub DataGrid1_PageIndexChanged(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridPageChangedEventArgs) Handles DataGrid1.PageIndexChanged

DataGrid1.CurrentPageIndex = e.NewPageIndex
Dim txtSql As String
Dim a As String = DropDownList1.SelectedValue

If DropDownList1.SelectedValue = "用户编号" Then txtSql = "select * from tbyh where 用户编号=" & TextBox1.Text.Trim
If DropDownList1.SelectedValue = "用户名称" Then txtSql = "select * from tbyh where 用户名称 like '%" & TextBox1.Text & "%'"
If DropDownList1.SelectedValue = "用户地址" Then txtSql = "select * from tbyh where 用户地址 like '%" & TextBox1.Text & "%'"
If DropDownList1.SelectedValue = "用户电话" Then txtSql = "select * from tbyh where 用户电话 like '%" & TextBox1.Text & "%'"


Dim SqlDa2 As New SqlClient.SqlDataAdapter(txtSql, Sqlcnn)
SqlDa2.Fill(dt2, "tbyh")
Table2 = dt2.Tables(0)
DataGrid1.DataSource = Table2
DataGrid1.DataBind()

End Sub
竟然成功了,但是我把程序改为:
Private Sub DataGrid1_PageIndexChanged(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridPageChangedEventArgs) Handles DataGrid1.PageIndexChanged

DataGrid1.CurrentPageIndex = e.NewPageIndex

DataGrid1.DataSource = Table2
DataGrid1.DataBind()

End Sub
就不成功,请问是什么原因?如何解决?
blue_apple 2004-11-23
  • 打赏
  • 举报
回复
TO: goody9807()

dgOrder.DataSource = GetDv(ViewState("strSort").ToString())

这句不是很明白,我是用VB写的,能解释一下这句话吗?
goody9807 2004-11-23
  • 打赏
  • 举报
回复
Private Function GetDv(ByVal strSort As String) As DataView
'定义数据库连接
Dim dv As DataView
Dim CN As New SqlConnection()
Try
'初始化连接字符串
CN.ConnectionString = "data source=pmserver;
initial catalog=Northwind;persist security info=False;user id=sa;Password=sa;"
CN.Open()
'从NorthWind得到orders表的数据
Dim adp As SqlDataAdapter = New SqlDataAdapter("select * from orders", CN)
Dim ds As New DataSet()
adp.Fill(ds)
'得到数据视图
dv = ds.Tables(0).DefaultView
Catch ex As Exception
#If DEBUG Then
Session("Error") = ex.ToString()
Response.Redirect("../error.aspx") '跳转程序的公共错误处理页面
#End If
Finally
'关闭连接
CN.Close()
End Try
'排序
dv.Sort = strSort
Return dv
End Function

Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
If Not IsPostBack Then
ViewState("strSort") = "orderid"
dgOrder.DataSource = GetDv(ViewState("strSort").ToString())
dgOrder.DataBind()
End If
End Sub
'排序
Private Sub dgOrder_SortCommand(ByVal source As Object,
ByVal e As System.Web.UI.WebControls.DataGridSortCommandEventArgs) Handles dgOrder.SortCommand
dgOrder.CurrentPageIndex = 0
'得到排序的列
ViewState("strSort") = e.SortExpression.ToString()
dgOrder.DataSource = GetDv(ViewState("strSort").ToString())
dgOrder.DataBind()
End Sub

'分页
Private Sub dgOrder_PageIndexChanged(ByVal source As Object,
ByVal e As System.Web.UI.WebControls.DataGridPageChangedEventArgs) Handles dgOrder.PageIndexChanged
'得到分页的页号
dgOrder.CurrentPageIndex = e.NewPageIndex
dgOrder.DataSource = GetDv(ViewState("strSort").ToString())
dgOrder.DataBind()
End Sub
加载更多回复(23)

62,050

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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