• 全部
  • .NET Framework
  • ASP
  • Web Services
  • .NET互联网桌面应用
  • VB
  • 图表区
  • 分析与设计
  • 组件/控件开发
  • AppLauncher
  • 问答

为什么DataGrid分页,删除到 mydatagrid.pagecount mod mydatagrid.pagesize =1就失败

supersyd 2004-03-15 10:26:38
为什么DataGrid分页,并且 可以删除记录。
删除到 mydatagrid.pagecount mod mydatagrid.pagesize =1就失败
Invalid CurrentPageIndex value. It must be >= 0 and < the PageCount

举个例子 ,数据库有9条记录,4条分一页,当删除第三页(第9条记录)
即出现以上错误!
但如果在第二页或第一页删除就没有出错信息!
具体怎么改?

'------------------------绑定Mydgrd 数据(既绑定用户的留言) ----------
'----------------------------------------------------------------->>>
Sub Bind_Mydgrd()
MyConnection = New SqlConnection(dbconn)
Myada =New SqlDataAdapter("select * from electro_gov",MyConnection)
Myds = New DataSet
Myada.Fill(Myds,"info")
Mydgrd.DataSource = Myds.Tables("info").DefaultView
Mydgrd.DataBind()
MyConnection.Close()
ShowCounts()
End Sub
'<<<--------------------------------------------------------------------
'----------------------------------------------------------------------

'-------------------------------------------------------------------------
'------------------------删除Mydgrd 数据(既删除用户的留言)-------------->>>
Sub delete_it(S As Object,E As EventArgs)
warn.Text =nothing
Strsql ="delete from electro_gov where id= " & s.CommandArgument
MyConnection = New SqlConnection(dbconn)
Mycmd =New SqlCommand(Strsql ,MyConnection)
MyConnection.Open()
Try
Mycmd.ExecuteNonQuery()
Catch Exc As SQLException
warn.Text ="数据库操作(删除)失败!"
warn.ForeColor=System.Drawing.Color.Red
Finally
MyConnection.Close()
End Try
'Mydgrd.CurrentPageIndex=0
Bind_Mydgrd()
End Sub
'<<<------------------------------------------------------------------------------
'------------------------------------------------------------------------------
Sub Mydgrd_Page(sender As Object, e As DataGridPageChangedEventArgs)
Mydgrd.CurrentPageIndex = e.NewPageIndex
Bind_Mydgrd()
End Sub

<asp:label ID="warn" Font-Size="9" runat="server"/><asp:label ID="page_count" Font-Size="9" runat="server"/>
<asp:datagrid
ID="Mydgrd"
AutoGenerateColumns="false"
BorderWidth="0"
Width="100%"
ItemStyle-VerticalAlign="top"
ShowHeader="false"
DataKeyField="id"
AllowPaging="True"

PageSize="4"
PagerStyle-Mode="NumericPages"
OnPageIndexChanged="Mydgrd_Page"
runat="server">
<columns>
<asp:templatecolumn>
<itemtemplate>
</datagrid>
...全文
16 点赞 收藏 10
写回复
10 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
supersyd 2004-04-03
谢谢vabug(边缘) 解决了。 散分了!
回复
supersyd 2004-04-01
vabug(边缘)大哥,你的这段话是加在sub pagechanged 中吗?
回复
supersyd 2004-04-01
谢谢大家哦。我好久没看这个帖子了,这两天就结贴,其实上面说的我以前都理解,非常明白
但我怎么改都不成,有具体的解决方案吗
回复
vabug 2004-03-23
这是一个很著名的问题,好像zdnet上有篇英文的文章介绍了解决方案,笔者还咨询过微软,当然微软没有回答,DeleteCommand至少个占位符,什么也不干,代码自己得写!

解决方案:::
int l=Myds.Tables("info").Rows.Count % Mydgrd.PageSize ;
if(l==0)
DataGdTB.CurrentPageIndex=DataGdTB.PageCount-2;
DataGdTB.DataSource=Myds.Tables("info");
DataGdTB.DataBind();
回复
Mybeautiful 2004-03-23
zhongkeruanjian(编程亮子)
分析的够透彻了,
用wwfloat(方舟)的方法试着解决一下...
回复
caojingui 2004-03-23
删除后从新绑定就可以了
回复
wwfloat 2004-03-23
if (DataGrid1.CurrentPageIndex>DataGrid1.PageCount-1)
{
DataGrid1.CurrentPageIndex=DataGrid1.PageCount-1;
}
回复
HenanBoy 2004-03-23
你每次删除后从新邦定不久性了
回复
zhongkeruanjian 2004-03-23
很简单,
第一点,当DATAGRID第一次绑定的时候,他的PAGEINDEX就已经VIEWSTATE,除非你显式的改变它,比如在PANGCHANGE事件中,而PAGECOUNT是根据绑定数据源的条数来确定的。
第二点,PAGEINDEX必须大于等于0和小于PAGECOUNT,不要问我为什么,呵呵
好,看看你的代码
当你在第三页删除记录的时候,你的第三页只有一条记录(这是很重要的),现在你的PAGECOUNT是3,PAGEINDEX是2,好,你点击DELETE按钮,页面回访,页面调用你的删除方法,
呵呵,重新绑定,DATAGRID重新计算PAGECOUNT(根据PAGESIZE)重新设置PAGECOUNT为2,而现在呢,你的PAGEINDEX为2,呵呵,你发现问题了吧,
好吧,剩下的工作你自己做吧
回复
WAWQ 2004-03-23
up
回复
相关推荐
发帖
.NET技术社区
创建于2007-09-28

5.8w+

社区成员

.NET技术交流专区
申请成为版主
帖子事件
创建了帖子
2004-03-15 10:26
社区公告
暂无公告