请教一个为何PageCount总是为0的问题!(在线等待)

supnet1 2003-01-29 11:39:13
在asp.net页面中引用一个DataGrid控件类,生成一个DataGrid,然后在该页面中当点击“Insert”按钮时报错误是:
“异常详细信息: System.Web.HttpException: 无效的 CurrentPageIndex 值。它必须大于等于 0 且小于 PageCount。”

的确是当用Response.Write(grid.PageCount)和Response.Write(grid.CurrentPageIndex)测试时该值都为零!

请问如何修改这样的错误???

源代码如下:
using System;
using System.Text;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using EditorLib.Controls;
namespace WebApp_System
{
public class codetable : System.Web.UI.Page
{
protected System.Web.UI.WebControls.LinkButton Linkbutton1;
protected System.Web.UI.WebControls.HyperLink HyperLink1;
protected EditorLib.Controls.EditableGrid grid;
public string m_connString="......";//暂省去
if (!IsPostBack)
{
PhysicalDataRead();
UpdateDataView();
}
private DataView PhysicalDataRead()
{
SqlDataAdapter myCommand = new SqlDataAdapter("Select * From tb_tmp",m_connString);
DataSet ds = new DataSet();
myCommand.Fill(ds);
code = ds.Tables[0].Columns["code"];
codemean = ds.Tables[0].Columns["codemean"];
DataView dv = new DataView(ds.Tables[0]);
return dv;
}

public void UpdateDataView()
{
grid.DataSource = (DataView)PhysicalDataRead();
grid.DataBind(); //错误行
}
}
}

谢谢大家!!
...全文
228 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
supnet1 2003-03-21
  • 打赏
  • 举报
回复
谢谢大家!请接分!!
supnet 2003-03-21
  • 打赏
  • 举报
回复
add code to cs:
int nRemainder = (dt.Rows.Count % PageSize);
int nNewItemIndex = nRemainder;
if (dt.Rows.Count < PageSize)
CurrentPageIndex = dt.Rows.Count / PageSize;
else
CurrentPageIndex = (dt.Rows.Count / PageSize)-1;
if (CurrentPageIndex <=0)
{
CurrentPageIndex = 0;
}
if (nNewItemIndex >0)
{
CurrentPageIndex ++;
if (nNewItemIndex == 0)
{
nNewItemIndex = PageSize-1;
}
else
{
nNewItemIndex--;
}
supnet 2003-03-21
  • 打赏
  • 举报
回复
up
supnet1 2003-03-21
  • 打赏
  • 举报
回复
因为当你分页后没有及时判断该页是否为当前页,当添加“insert”时页面认为还在第一页,
所以会报错!
试试添加以下代码:
CurrentPageIndex = (dt.Rows.Count / PageSize)-1;
if (CurrentPageIndex <=0)
{
CurrentPageIndex = 0;
}
if (nNewItemIndex >0)
{
CurrentPageIndex ++;
if (nNewItemIndex == 0)
{
nNewItemIndex = PageSize-1;
}
else
{
nNewItemIndex--;
}
supnet1 2003-03-21
  • 打赏
  • 举报
回复
you try:

private int SetIndexesToLastPage(DataTable dt)
{
int nRemainder = (dt.Rows.Count % PageSize);
int nNewItemIndex = nRemainder;
if (dt.Rows.Count < PageSize)
CurrentPageIndex = dt.Rows.Count / PageSize; // 0-based
else
CurrentPageIndex = (dt.Rows.Count / PageSize)-1; // 0-based
if (CurrentPageIndex <=0)
CurrentPageIndex = 0;
if (nNewItemIndex >0)
CurrentPageIndex ++;
if (nNewItemIndex == 0)
nNewItemIndex = PageSize-1;
else
nNewItemIndex--;
return nNewItemIndex;
}
supnet1 2003-01-29
  • 打赏
  • 举报
回复
这两个code、codemean是在该aspx中绑定的Column!!
该页面源代码如下:
<form id="Form1" runat="server">
<expo:editablegrid id="grid" runat="server" AutoGenerateColumns="false" DataKeyField="code" OnInitRow="InitRow" OnUpdateView="UpdateView" OnSaveData="SaveData" OnInsertData="InsertData" OnDeleteData="DeleteData">
<COLUMNS>
<ASP:BOUNDCOLUMN runat="server" headertext="代码" datafield="code"></ASP:BOUNDCOLUMN>
<ASP:BOUNDCOLUMN runat="server" headertext="代码含义" datafield="codemean"></ASP:BOUNDCOLUMN>
</COLUMNS>
</expo:editablegrid>
<p></p>
<asp:linkbutton id="Linkbutton1" onclick="OnInsert" runat="server" Font-Name="verdana" Font-Size="x-small" Text="Insert"></asp:linkbutton>
</form>

huan_jinwu 2003-01-29
  • 打赏
  • 举报
回复
code = ds.Tables[0].Columns["code"];
codemean = ds.Tables[0].Columns["codemean"];
///////////////////////这二句是干什么的?!
private void Page_Load(object sender, System.EvenArgs e)
{
if (!IsPostBack)
{
PhysicalDataRead();
UpdateDataView();
}
}
huan_jinwu 2003-01-29
  • 打赏
  • 举报
回复
<expo:editablegrid id="grid" runat="server" AutoGenerateColumns="false" DataKeyField="code" OnInitRow="InitRow" OnUpdateView="UpdateView" OnSaveData="SaveData" OnInsertData="InsertData" OnDeleteData="DeleteData">
改为:
<expo:editablegrid id="grid" runat="server" AutoGenerateColumns="false" DataKeyField="code" OnInitRow="InitRow" OnUpdateView="UpdateView" OnSaveData="SaveData" OnInsertData="InsertData" OnDeleteData="DeleteData" OnPageIndexChanged="DataGrid1_Updt">//最后一句
再在cs代码里加:

public void DataGrid1_Updt(object sender,DataGridPageChangedEventArgs e)
{
this.grid.CurrentPageIndex = e.NewPageIndex ;
UpdateDataView();
}
supnet1 2003-01-29
  • 打赏
  • 举报
回复
To yohomonkey
你说的分页属性是指什么?
谢谢!!
新年快乐!!
yohomonkey 2003-01-29
  • 打赏
  • 举报
回复
去掉你的分页属性。
用来分页却没有指定对应的pageindex。
所以报错!
新年快乐!

62,046

社区成员

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

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

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

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