我做的分页怎么老是出错?

gltgl 2003-09-11 11:54:21
提示如下:
当 AllowPaging 设置为真并且选定的数据源不实现 ICollection 时,AllowCustomPaging 必须为真,并且 ID 为 MyGrid 的 DataGrid 必须设置 VirtualItemCount。

我的网页设计如下:
<asp:datagrid id="MyGrid" style="Z-INDEX: 110; LEFT: 230px; POSITION: absolute; TOP: 245px" AutoGenerateColumns="False" PagerStyle-PrevPageText="上一页" pagerstyle-NextPageText="下一页" PageSize="5" OnPageIndexChanged="GridPageChange" AllowPaging="True" Runat="server" PagerStyle-HorizontalAlign="Right">

如果添加了AllowCustomPaging=True,那么“下一页”的按钮就没有作用了。我的另一个程序用的是同样的语句,只是顺序不一样,可是却是正常的。

后台程序:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click


Dim strSQL As String
Dim Strbt = txtBT.Text
Dim Strnr = txtNR.Text

If Strnr = "" And Strbt = "" Then
strSQL = "select * from files order by id desc"
ElseIf Strbt = "" Then
strSQL = "select * from files where texts like '%" & Strnr & "%' order by id desc"
ElseIf Strnr = "" Then
strSQL = "select * from files where topic like '%" & Strbt & "%' order by id desc"
Else
strSQL = " select * from files where topic like '%" & Strbt & "%' and texts like '%" & Strnr & "%' order by id desc"
End If
Label5.Text = strSQL
datafiller()

End Sub

Sub DataFiller()
Dim StrConn As String = ConfigurationSettings.AppSettings("DataConn")
Dim objConn As New SqlConnection(StrConn)
objConn.Open()

Dim strSQL As String = Label5.Text

Dim objComm As New SqlCommand(strSQL, objConn)
Dim objReader As SqlDataReader = objComm.ExecuteReader()

MyGrid.DataSource = objReader
MyGrid.DataBind()
End Sub

Sub GridPageChange(ByVal S As Object, ByVal E As DataGridPageChangedEventArgs)
MyGrid.CurrentPageIndex = E.NewPageIndex
DataFiller()
End Sub
...全文
55 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
gltgl 2003-09-28
  • 打赏
  • 举报
回复
仔细再看了一遍程序,发现把 dongbeiren() 朋友的SetVirtualItemCount()过程改写以后放进我的程序就对了。
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
If Not IsPostBack Then
SetVirtualItemCount()
End If
End Sub

Private Sub LinkButton1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles LinkButton1.Click
Response.Redirect("htmlpage1.htm")
End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click


Dim strSQL As String
Dim Strbt = Trim(txtBT.Text)
Dim Strnr = Trim(txtNR.Text)

If Strnr = "" And Strbt = "" Then
strSQL = "select * from files order by id desc"
ElseIf Strbt = "" Then
strSQL = "select * from files where texts like '%" & Strnr & "%' order by id desc"
ElseIf Strnr = "" Then
strSQL = "select * from files where topic like '%" & Strbt & "%' order by id desc"
Else
strSQL = " select * from files where topic like '%" & Strbt & "%' and texts like '%" & Strnr & "%' order by id desc"
End If
Label5.Text = strSQL
datafiller()

End Sub

Sub DataFiller()
Dim StrConn As String = ConfigurationSettings.AppSettings("DataConn")
Dim objConn As New SqlConnection(StrConn)
objConn.Open()

Dim strSQL As String = Label5.Text

Dim objAdapter As New SqlDataAdapter(strSQL, objConn)

Dim objDataSet As New DataSet()
objAdapter.Fill(objDataSet, "topic")

MyGrid.DataSource = objDataSet.Tables.Item("topic")
MyGrid.DataBind()
End Sub

Sub GridPageChange(ByVal S As Object, ByVal E As DataGridPageChangedEventArgs)
MyGrid.CurrentPageIndex = E.NewPageIndex
DataFiller()
End Sub

Sub SetVirtualItemCount()
' Set up the connection
Dim strConn As String = ConfigurationSettings.AppSettings("DataConn")
Dim conn As New SqlConnection(strConn)

' Set up the command
Dim strCmd As String = "SELECT COUNT(*) FROM files"
Dim cmd As SqlCommand = New SqlCommand(strCmd, conn)

' Execute the command
conn.Open()
Dim nItemCount As Int32 = cmd.ExecuteScalar()
conn.Close()

MyGrid.VirtualItemCount = nItemCount
End Sub
gltgl 2003-09-23
  • 打赏
  • 举报
回复
changezhong(小刀):
谢谢你的程序,不过不好意思——我看不太懂……
gltgl 2003-09-23
  • 打赏
  • 举报
回复
我改用SqlDataAdapter,DataSet好像又可以了。
gltgl 2003-09-17
  • 打赏
  • 举报
回复
请教一下:
“选定的数据源不实现 ICollection ”是什么意思?
gltgl 2003-09-17
  • 打赏
  • 举报
回复
请教一下:
“选定的数据源不实现 ICollection ”是什么意思?
gltgl 2003-09-17
  • 打赏
  • 举报
回复
dongbeiren():
我照你的程序改写了自己的东西,可是没有用,还是出同样的提示,好像SetVirtualItemCount()这个过程没有起作用一样。
dongbeiren 2003-09-17
  • 打赏
  • 举报
回复
不会吧,怎么可能呢,吧你的原吗发给我,我给你看看,发给我后,给我短信息
yidongyuan001@sina.com
changezhong 2003-09-12
  • 打赏
  • 举报
回复
建议把以上代码考到本机上用文本编辑器打开看比较清晰
changezhong 2003-09-12
  • 打赏
  • 举报
回复
我们是同等级人物呵呵,我做网页已经3年了,给你一段DataGrid的程序做参考吧,分页的功能我们一般都是在后台实现的(我用的是C#做的后台)
html:
<asp:DataGrid ID="datagridReportInfo" BorderColor="#A285C9" AutoGenerateColumns="False" AllowPaging="True" Runat="server">
后台:
//分页处理
private void loadReplist_MRR()
{
try
{
string strUserID = Session["User"].ToString().Trim();
string strUserType = Session["UserType"].ToString().Trim();

MRRReport_Interface objload = new MRRReport_Interface();
DataSet dsReportList = objload.getReportList(strUserID,strUserType,"MRR");
DataView dvReportList = dsReportList.Tables[0].DefaultView;
dvReportList.Sort = "RMICDATE DESC";
this.datagridReportInfo.DataSource = dvReportList;

int pagesum;
if(dvReportList.Count % datagridReportInfo.PageSize == 0)
pagesum = dvReportList.Count/datagridReportInfo.PageSize;
else
pagesum = dvReportList.Count/datagridReportInfo.PageSize + 1;

if(dvReportList.Count == 0)
pagesum = 1;

if(datagridReportInfo.CurrentPageIndex >= pagesum)
datagridReportInfo.CurrentPageIndex = pagesum - 1;

this.datagridReportInfo.DataBind();

}
catch(Exception er)
{
throw er;
}
}
//实现分页
private void datagridReportInfo_PageIndexChanged(object source, System.Web.UI.WebControls.DataGridPageChangedEventArgs e)
{
try
{
datagridReportInfo.EditItemIndex = -1;
datagridReportInfo.CurrentPageIndex = e.NewPageIndex;
loadReplist_MRR();
}
catch(Exception sysErr)
{
ShowErrMessage(sysErr);
}
}


孟子E章 2003-09-12
  • 打赏
  • 举报
回复
http://xml.sz.luohuedu.net/xml/ShowDetail.asp?id=B12283DE-DB20-4322-ACCC-12724442808A
gltgl 2003-09-12
  • 打赏
  • 举报
回复
dongbeiren() :
你的意思是通过查询得到的结果要首先给VirtualItemCount这个属性赋值?
奇怪我做的第一个程序怎么不用这么做呢,他只是列出全部的记录,而查询的结果也有可能是全部记录啊,但是出错了。
你的程序是用C#做的,有点看不明白,但是还是很感谢你。
能不能再说明白点,VirtualItemCount这个属性是起什么作用的?

pengcheng 2003-09-12
  • 打赏
  • 举报
回复
关注……ing.
dongbeiren 2003-09-11
  • 打赏
  • 举报
回复
public void Page_Load(Object sender, EventArgs e)
{
// Initialize only the first time...
if (!Page.IsPostBack)
{
lblURL.Text = Request.Url + "<hr>";
SetVirtualItemCount();
}
}

SqlDataReader dr;
private SqlDataReader CreateDataSource(int nPageIndex)
{
// page index is assumed to be 0-based
int nPageSize = grid.PageSize;
int nBaseProductID = nPageSize * nPageIndex;


// Set up the connection
String strConn = "DATABASE=Northwind;SERVER=localhost;UID=sa;PWD=sa;";
SqlConnection conn = new SqlConnection(strConn);

// Set up the command
String strCmd = "SELECT TOP " + nPageSize + " " +
"productid, productname, quantityperunit, unitsinstock " +
"FROM products " +
"WHERE productid >" + nBaseProductID;
SqlCommand cmd = new SqlCommand(strCmd, conn);

// Execute the command
conn.Open();
dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
return dr;
}

public void PageIndexChanged(Object sender, DataGridPageChangedEventArgs e)
{
grid.CurrentPageIndex = e.NewPageIndex;
grid.DataSource = CreateDataSource(grid.CurrentPageIndex);
grid.DataBind();
dr.Close();
}

public void OnLoadData(Object sender, EventArgs e)
{
grid.DataSource = CreateDataSource(0);
grid.DataBind();
dr.Close();
}

public void SetVirtualItemCount()
{
// Set up the connection
String strConn = "DATABASE=Northwind;SERVER=localhost;UID=sa;PWD=sa;";
SqlConnection conn = new SqlConnection(strConn);

// Set up the command
String strCmd = "SELECT COUNT(*) FROM products";
SqlCommand cmd = new SqlCommand(strCmd, conn);

// Execute the command
conn.Open();
int nItemCount = (int) cmd.ExecuteScalar();
conn.Close();

grid.VirtualItemCount = nItemCount;
return;
}
dongbeiren 2003-09-11
  • 打赏
  • 举报
回复
用sqldatareader是可以的,但你要另设查询查你符合条件的语句总数,把它设给VirtualItemCount属性
DeanMonica 2003-09-11
  • 打赏
  • 举报
回复
不能用SqlDataReader应该改为SqlDataAdapter,DataSet

62,025

社区成员

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

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

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

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