Ajax分页 问题解决 立即结帖 高手帮忙

happy664618843 2010-01-08 10:15:18
在网上找到一个例子 改的
我想 不通过前台手动输入a href="javascript:getData(1)">2</a>
现在问题是怎样让页面一加载就输出页数如1,2,3,4 并且页面加载显示绑定数据 点击数字跳到相应的页面
高手怎么改啊 谢谢!
这是前台代码

<script type="text/javascript">


var xmlHttp;

function getData(pIndex) {

if (window.ActiveXObject) {
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");

}
else if (window.XMLHttpRequest)
{
xmlHttp = new XMLHttpRequest();
}
var url = "MyAjaxPager.aspx?index=" + escape(pIndex) + "&num=" + new Date().getDate();
alert(url);

xmlHttp.open("GET", url, true);

xmlHttp.onreadystatechange = ShowRepeaterData;
xmlHttp.send(null);
}


function ShowRepeaterData() {
if (xmlHttp.readyState == 4 && xmlHttp.status == 200) {

var gridData = xmlHttp.responseText;
alert(gridData);
var grid = document.getElementById("grid");
grid.innerHTML =gridData;
}
}

</script>


<a href="javascript:getData(0)">1</a>
<a href="javascript:getData(1)">2</a>
<a href="javascript:getData(2)">3</a>
<a href="javascript:getData(3)">4</a>

<div id="grid">
<asp:Repeater ID="rptGrid" runat="server">
<HeaderTemplate>
<table>
<tr>
<th style="border:solid 1px red;">编号</th>
<th style="border:solid 1px red;">姓名</th>
<th style="border:solid 1px red;">性别</th>
<th style="border:solid 1px red;">生日</th>
</tr>
</HeaderTemplate>
<ItemTemplate>
<tr>
<td style="border:solid 1px red;"><%# Eval("EmployeeID") %></td>
<td style="border:solid 1px red;"><%# Eval("EmployName") %></td>
<td style="border:solid 1px red;"><%# Eval("Sex") %></td>
<td style="border:solid 1px red;"><%# Eval("Birthday") %></td>
</tr>
</ItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:Repeater>

MyAjaxPager.aspx后台代码

private void BindInfo(int index)
{
SqlConnection Conn = new SqlConnection(connstr);
SqlCommand cmd = new SqlCommand();
cmd.CommandText = "select * from EmployeeInfo";
cmd.Connection = Conn;
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();
da.Fill(ds);
ps = new PagedDataSource();
ps.AllowPaging = true;
ps.PageSize = 1;
ps.CurrentPageIndex = index;
ps.DataSource = ds.Tables[0].DefaultView;
rptGrid.DataSource = ps;
rptGrid.DataBind();
}
private string GetHtml(Control control)
{
StringBuilder sb = new StringBuilder();
StringWriter writer = new StringWriter(sb);
HtmlTextWriter writer2 = new HtmlTextWriter(writer);
control.RenderControl(writer2);
return sb.ToString();
}

protected void Page_Load(object sender, EventArgs e)
{
//BindInfo(0) 如果这样绑定数据当点击数字总是第一页 加page.ispostBack没用
int index = 0;
if (int.TryParse(Request.QueryString["index"], out index))
{
//获取到index再进行操作
BindInfo(index);

Response.Clear();
string html = this.GetHtml(rptGrid);
Response.Write(html);
Response.End();

注释部分 不行 非要点击数字再出现
//for (int i = 1; i <= ps.PageCount; i++)
//{
// LinkButton lb = new LinkButton();
// lb.ID = "lb" + i.ToString();
// lb.Text = i.ToString();
// lb.OnClientClick = "javascript:getData(" + i.ToString() + ")";
// Page.Controls.Add(lb);
//}

}

...全文
266 30 打赏 收藏 转发到动态 举报
写回复
用AI写文章
30 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhanmingbo 2010-01-14
  • 打赏
  • 举报
回复
顶一下
happy664618843 2010-01-11
  • 打赏
  • 举报
回复
[Quote=引用 22 楼 anncesky 的回复:]
我知道
你加载就显示页数不是有
for (int i=1; i <= ps.PageCount; i++)
                {
                    LinkButton lb=new LinkButton();
                    lb.ID="lb"+ i.ToString();
                    lb.Text= i.ToString();
                    lb.OnClientClick="javascript:getData("+ i.ToString()+")";
                    Page.Controls.Add(lb);
                }
不是有这段了吗,当然你最好用用户控件或者自定义控件

加载页面就绑定数据你用在页面加载的时候就调用
getData(0);
所以加上
Label l = new Label();
l.Text = " <script>getData(1); </script>";
Page.Controls.Add(l);
当我这只是告诉你一个问题的结症在哪
专业开发如果是我的话绝不会这么干的
[/Quote]
刚开始就绑定getData(0)时候 但每次点击的时候就会触发page_load事件 还是第一页!!
YnSky 2010-01-11
  • 打赏
  • 举报
回复
看看.
mzjmicrosoft 2010-01-11
  • 打赏
  • 举报
回复

友情帮顶
upbiuGIS 2010-01-11
  • 打赏
  • 举报
回复
那么复杂,建议你再多加点分数有可能会有更厉害的高手帮你解答了
happy664618843 2010-01-11
  • 打赏
  • 举报
回复
没有满意答案! 结帖算了 页面加载循环出页数 未将对象引用到设置实例
anncesky 2010-01-11
  • 打赏
  • 举报
回复
我知道
你加载就显示页数不是有
for (int i=1; i <= ps.PageCount; i++)
{
LinkButton lb=new LinkButton();
lb.ID="lb"+ i.ToString();
lb.Text= i.ToString();
lb.OnClientClick="javascript:getData("+ i.ToString()+")";
Page.Controls.Add(lb);
}
不是有这段了吗,当然你最好用用户控件或者自定义控件

加载页面就绑定数据你用在页面加载的时候就调用
getData(0);
所以加上
Label l = new Label();
l.Text = "<script>getData(1);</script>";
Page.Controls.Add(l);
当我这只是告诉你一个问题的结症在哪
专业开发如果是我的话绝不会这么干的
anncesky 2010-01-11
  • 打赏
  • 举报
回复
..................
我无语了。。。。。。
你点击的是LinkButton 它当然会回调啊
lb.OnClientClick="javascript:getData("+ i.ToString()+");return false;";



加了
Label l = new Label();
l.Text = " <script>getData(1); </script>";
Page.Controls.Add(l);
其实你的数据根本不用在本页面的CS里绑

数据全在MyAjaxPager.aspx这个页面传来的
happy664618843 2010-01-10
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 anncesky 的回复:]
注释部分 不行 非要点击数字再出现
                //for (int i = 1; i <= ps.PageCount; i++)
                //{
                //    LinkButton lb = new LinkButton();
                //    lb.ID = "lb" + i.ToString();
                //    lb.Text = i.ToString();
                //    lb.OnClientClick = "javascript:getData(" + i.ToString() + ")";
                //    Page.Controls.Add(lb);
                //}
----------------------------------------------
这个很简单
C# codefor (int i=1; i<= ps.PageCount; i++)
{
LinkButton lb=new LinkButton();
lb.ID="lb"+ i.ToString();
lb.Text= i.ToString();
lb.OnClientClick="javascript:getData("+ i.ToString()+")";
Page.Controls.Add(lb);
}
Label l=new Label();
l.Text="<script>getData(1);</script>";//加上这两句就行了
[/Quote]
呵呵..你误解我的意思 . 不是显示不出来的问题!
<a href="javascript:getData(0)">1</a>
<a href="javascript:getData(1)">2</a>
<a href="javascript:getData(2)">3</a>
<a href="javascript:getData(3)">4</a>

这个是手动输入的点击数字就跳到相应的页面. 我想是页面加载就显示页数并绑定数据我这个需要传参数
bestdowt1314 2010-01-10
  • 打赏
  • 举报
回复
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default5.aspx.cs" Inherits="Default5" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>无标题页</title>
<script type="text/javascript" src="jquery.js"></script>
</head>



<body>
<script type="text/javascript">

$(function(){
AjaxCuterPaper('1');
})

function AjaxCuterPaper(pageIndex)
{
var pageSize=5;
var itemCount=20 ;
var prvePageNo = 1;
var nextPageNo = 1;
var currPageNo = 1; //装当前页号的容器
var lastPageNo = 1; //装总共多少页的容器


if(itemCount/pageSize > parseInt(itemCount/pageSize)){
lastPageNo=parseInt(itemCount/pageSize)+1;
}
else{
lastPageNo=parseInt(itemCount/pageSize);
}

currPageNo = pageIndex ? pageIndex : 1;
prvePageNo=currPageNo>1?currPageNo-1:1;
nextPageNo=currPageNo<lastPageNo?currPageNo+1:currPageNo;

var toalHmtl='<p class="total"><i>共</i><strong>'+itemCount+'</strong><i>条</i><strong class="block">'+currPageNo+'/'+lastPageNo+'</strong><i>页</i></p>';
var prevHtml='';
var nextHtml='';
var prevRequst='AjaxCuterPaper('+prvePageNo+')';
var nextRequst='AjaxCuterPaper('+nextPageNo+')';
if(prvePageNo==currPageNo)
{ prevHtml='<span class="page normal">上一页</span>';}
else
{prevHtml='<a class="page" onclick="'+prevRequst+'">上一页</a>';}

if(nextPageNo==currPageNo)
{ nextHtml='<span class="page normal">下一页</span>';}
else
{nextHtml='<a class="page" onclick="'+nextRequst+'">下一页</a>';}

var itemsHtml='<p class="pagenum">';
for(var i=1;i<=lastPageNo;i++)
{
var itemHtml='';
var itmeRequst='AjaxCuterPaper('+i+')';
if(i==currPageNo)
{itemHtml='<span class="num active">'+i+'</span>';}
else
{itemHtml='<a class="num" onclick="'+itmeRequst+'">'+i+'</a>';}
itemsHtml+=itemHtml;
}
itemsHtml+='</p>';

var pagHtml='<div class="TemplatePageNum">'+toalHmtl+prevHtml+itemsHtml+nextHtml+'</div>';
$("#paging").html(pagHtml);
}

</script>
<form id="form1" runat="server">
<div id="paging">

</div>
</form>
</body>
</html>

本质就是js分页,然后动态再获取页号设置其它onclick的事件代码,和样式就行了。
anncesky 2010-01-10
  • 打赏
  • 举报
回复
哦别忘了
Page.Controls.Add(l);
anncesky 2010-01-10
  • 打赏
  • 举报
回复
注释部分 不行 非要点击数字再出现
//for (int i = 1; i <= ps.PageCount; i++)
//{
// LinkButton lb = new LinkButton();
// lb.ID = "lb" + i.ToString();
// lb.Text = i.ToString();
// lb.OnClientClick = "javascript:getData(" + i.ToString() + ")";
// Page.Controls.Add(lb);
//}
----------------------------------------------
这个很简单

for (int i = 1; i <= ps.PageCount; i++)
{
LinkButton lb = new LinkButton();
lb.ID = "lb" + i.ToString();
lb.Text = i.ToString();
lb.OnClientClick = "javascript:getData(" + i.ToString() + ")";
Page.Controls.Add(lb);
}
Label l = new Label();
l.Text = "<script>getData(1);</script>";//加上这两句就行了
xray2005 2010-01-10
  • 打赏
  • 举报
回复
直接用aspnetpager不就是了吗。或者Pager控件
andrewsway 2010-01-10
  • 打赏
  • 举报
回复
写一个生成分页条的方法,调用就可以了

方法里就判断当前页,然后左右一加,思路就是这样!我有一段以前的代码,怎么把字符串交给页面就不阐述了

public static String GetPagerString(int curr, int pagesize, int count, int _class, string page)
{
decimal pagec = Math.Ceiling(Convert.ToDecimal(count) / pagesize);
string str = "<span> 共" + count + "条 共" + pagec + "页 </span>";
if (curr != 1) str += "<a href=\"/" + page + "/" + _class.ToString() + ".shtml\">首页</a> <a href=\"/" + page + "/" + _class.ToString() + "/" + (curr - 1) + ".shtml\">前页</a>";
for (int pageb = curr - 4; pageb <= curr + 4 && pageb <= pagec; pageb++)
{
if (pageb > 0)
{
if (pageb != curr)
{
str += " <a href=\"/" + page + "/" + _class.ToString() + "/" + pageb + ".shtml\">" + pageb.ToString() + "</a>";
}
else
{
str += " <font color=red>" + pageb + "</font>";
}
}
}
if (curr != pagec) str += " <a href=\"/" + page + "/" + _class.ToString() + "/" + (curr + 1) + ".shtml\">后页</a> <a href=\"/" + page + "/" + _class.ToString() + "/" + pagec + ".shtml\">末页</a>";
return str;
}
hunzib 2010-01-10
  • 打赏
  • 举报
回复
public string page()
{
System.Text.StringBuilder sb = new System.Text.StringBuilder();
int start, end;
int num = new DataConnect.news().SelsctNum();
num = num / 10;
if (num >= 0)
{
num = num + 1;
}
for (int i = 1; i <= num; i++)
{
if (i <= 1)
{
end = i * 10;
start = end - 10;
sb.Append("<div class=\"fenye\" onclick=\"page(");
sb.Append(start);
sb.Append(",");
sb.Append(end);
sb.Append(")\">");
sb.Append("[");
sb.Append("首页");
sb.Append("]");
sb.Append("</div>");
}
end = i * 10;
start = end - 10;
sb.Append("<div class=\"fenye\" onclick=\"page(");
sb.Append(start);
sb.Append(",");
sb.Append(end);
sb.Append(")\">");
sb.Append("[");
sb.Append(i);
sb.Append("]");
sb.Append("</div>");
if (end / 10 == num)
{
end = i * 10;
start = end - 10;
sb.Append("<div class=\"fenye\" onclick=\"page(");
sb.Append(start);
sb.Append(",");
sb.Append(end);
sb.Append(")\">");
sb.Append("[");
sb.Append("尾页");
sb.Append("]");
sb.Append("</div>");
}
}
return sb.ToString();
}

-------------------------------

function page(start, end) {
var url = "../ajax/page.ashx?start=" + start + "&end=" + end + "&t=" + new Date().getTime();
createXmlHttpRequest();
xmlHttp.onreadystatechange = Data;
xmlHttp.open('POST', url, true);
xmlHttp.send(null);
}

----
我用sqlite数据库 以上代码还没完
yangxun527686 2010-01-10
  • 打赏
  • 举报
回复
学习来了~~
happy664618843 2010-01-09
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 rjzou2006 的回复:]
JScript code//创建分页function createpage(recordcount, curr_index, pagesize) {var indexs= Math.ceil(recordcount/ pagesize);//页数var pageDiv="";//容器var indexSize=10;//显示多少个按钮var gotosize=1;var minindex= curr_index;//当前最小页码
pageDiv="<span><span class='span_count_page'>"+ curr_index+"/"+ indexs+"</span> <span>"if (curr_index>1) {
pageDiv= pageDiv+ createaEml(curr_index-1,"<");//上一页 gotosize= curr_index- indexSize-1;if (gotosize<=0) {
gotosize=1;
}
pageDiv= pageDiv+ createaEml(gotosize,"<<");
}if (curr_index+ indexSize> indexs) {
minindex= indexs- indexSize+1<1?1 : indexs- indexSize+1;
}//创建按钮for (var i= minindex; i< minindex+ indexSize&& i<= indexs; i++) {if (i== curr_index) {var item="<a class='current_pager_link' href='javascript:change_page("+ i+")'>"+ i+"</a>"
}else {var item= createaEml(i, i)
}

pageDiv= pageDiv+ item;
}if (indexs> indexSize&& minindex+ indexSize<= indexs) {
gotosize= curr_index+ indexSize> indexs? indexs : curr_index+ indexSize;
pageDiv= pageDiv+ createaEml(gotosize,">>");
}if (indexs>1&& curr_index< indexs) {
pageDiv= pageDiv+ createaEml(curr_index+1,">");
}

document.getElementById('pageInDiv').innerHTML= pageDiv;
}


createpage(recordcount, curr_index, pagesize)
通过ajax取还要有总记录数recordcount。
curr_index 可以js算出来
pagesize Js设定


[/Quote]
高手 在哪里调用该函数? 能实现页面一加载就显示页数吗
rjzou2006 2010-01-09
  • 打赏
  • 举报
回复

//创建分页
function createpage(recordcount, curr_index, pagesize) {
var indexs = Math.ceil(recordcount / pagesize); //页数
var pageDiv = ""; //容器
var indexSize = 10; //显示多少个按钮
var gotosize = 1;
var minindex = curr_index; //当前最小页码

pageDiv = "<span><span class='span_count_page'>" + curr_index + "/" + indexs + "</span> <span>"
if (curr_index > 1) {
pageDiv = pageDiv + createaEml(curr_index - 1, "< "); //上一页
gotosize = curr_index - indexSize - 1;
if (gotosize <= 0) {
gotosize = 1;
}
pageDiv = pageDiv + createaEml(gotosize, "<< ");
}

if (curr_index + indexSize > indexs) {
minindex = indexs - indexSize + 1 < 1 ? 1 : indexs - indexSize + 1;
}

//创建按钮
for (var i = minindex; i < minindex + indexSize && i <= indexs; i++) {
if (i == curr_index) {
var item = "<a class='current_pager_link' href='javascript:change_page(" + i + ")'>" + i + "</a>"
}
else {
var item = createaEml(i, i)
}

pageDiv = pageDiv + item;
}

if (indexs > indexSize && minindex + indexSize <= indexs) {
gotosize = curr_index + indexSize > indexs ? indexs : curr_index + indexSize;
pageDiv = pageDiv + createaEml(gotosize, ">> ");
}

if (indexs > 1 && curr_index < indexs) {
pageDiv = pageDiv + createaEml(curr_index + 1, "> ");
}

document.getElementById('pageInDiv').innerHTML = pageDiv;
}



createpage(recordcount, curr_index, pagesize)
通过ajax取还要有总记录数recordcount。
curr_index 可以js算出来
pagesize Js设定

happy664618843 2010-01-09
  • 打赏
  • 举报
回复
高手帮忙! 阿非 风语兄 人生如梦.....都到哪里去了?
加载更多回复(8)

62,041

社区成员

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

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

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

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