我想用datalist制作一个分页,具体要是实现的情况是:
<< << 1 2 3 4 5 6…… >> >> 共多少页 转到多少页点第一个<<转到首页 点第二个<<向上一页 点数字的时候就转到数字所在的页面,后面同理如果你是高手,如果你做个这样的分页,可以留下你的例子参考参考么????
<< << 1 2 3 4 5 6…… >> >> 共多少页 转到多少页点第一个<<转到首页 点第二个<<向上一页 点数字的时候就转到数字所在的页面,后面同理如果你是高手,如果你做个这样的分页,可以留下你的例子参考参考么????
解决方案 »
- 数据导出和导入问题
- 求专家,DataList嵌套Repeater,包含的个数不等,不想要每行等高,去掉空白
- 关于母板页的问题
- 有没有那个高手能用vb.net实现把excel中的数据导入到sqlserver中
- checkboxlist如何判断第一个被选中的?
- 求助:vs 2005 msdn 不能用,为什么?
- 写上后,反而出现下面错误:
- 如何通过网页启动服务器上的应用程序
- 这是怎么回事呀?请大虾们指教,不胜感激!!(我已倾囊相求了)555
- 斑竹,你的《DataGrid问题集锦~~~!!》的连接不对,打不开,拜托查一下。大家都来顶:)
- 还是datagrid的问题,如何实现DataGrid删除确认及Item颜色交替?
- C#里头用图片做按钮怎么写啊?
根据操作动态生成sql语句,或是直接利用分页存储过程(如果你没有可以到数据库区搜一下)
也可以直接用 DataAdapter.Fill()方法的一个重载。来获得要取得的条数
然后填充DataList参照
msdn 2003 ms-help://MS.MSDNQTR.2003FEB.2052/cpref/html/frlrfsystemdatacommondbdataadapterclassfilltopic.htm
这个方法分的页 ,应该很久了
去看看msdn吧
主题不要写得这么嚣张~~~~~~其实新手不一定是不会的~~
我也不知道我是不是新手~但这个我会....在datagrid里,有一个分页类叫做PagedDataSource,这个类有一些属性是datagrid分页的属性(相信大家都知道datagrid的分页很好)
//这个类的用法
PagedDataSource objPage=new PagedDataSource();//定义类
objPage.DataSource=DataSet;//将已经填充好的dataset放到这个类的datasource里
objPage.AllowPaging=true;//设置自动分页
objPage.PageSize=8;//设置记录数
objPage.CurrentPageIndex=NowPage;//设置当前页数
this.datalist.DataSource = objPage;//返回给datalist
this.datalist.DataBind();//这个不用说其实你可能会骂我,这个和你们的主题没有关系....
但并不是的,只要你把填充好的dataset放到这个类的datasource里,然后就会有一连串的相关属性。
只要你用用你的脑,就能编出<< << 1 2 3 4 5 6…… >> >>这个来,我记得以前在vb里我也编过这个东西。如果你觉得自己编麻烦...你可以把datagrid里的那个分页控件也找出来,传说中datagrid里还有很多分页有用的东西
只要将数据源分页就解决了,
构思一个数据源分页的方法
不管点击哪一页,
传个页码的关键字进来这个方法就行了.
<%@ import namespace="System.Data"%>
<%@ import namespace="System.Data.OleDb"%>
<%@ import namespace="System.Data.SqlClient"%>
<%@ import namespace="System.Web.UI"%>
<%@ import namespace="System.Web.UI.WebControls"%>
<%@ import namespace="System.Web.UI.HtmlControls"%>
<%@ import namespace="System.Collections"%>
<%@ import namespace="System.Web.SEssionState"%>
<%@ import namespace="System.Configuration"%>
<script language="c#" runat="server">
OleDbConnection MyConn;
int PageSize,RecordCount,PageCount,CurrentPage,i;
ArrayList Al_PageNum; public void Page_Load(Object src,EventArgs e)
{ PageSize = 4; //设定PageSize
//连接语句
string strcon="provider=Microsoft.jet.OLEDB.4.0;data Source="+Server.MapPath(ConfigurationSettings.AppSettings["MDBpath"])+";";
MyConn = new OleDbConnection(strcon);
MyConn.Open();
if(!Page.IsPostBack) //第一次请求执行
{
RecordCount = CalculateRecord(); //计算总共有多少记录/
PageCount = RecordCount/PageSize; //计算总共有多少页
if (RecordCount%PageSize > 0) //取整
PageCount = PageCount + 1;
lblPageCount.Text = PageCount.ToString();
lblRecordCount.Text = RecordCount.ToString();
ViewState["PageCount"] = PageCount;
CurrentPage = 0;
ViewState["PageIndex"] = 0;
Al_PageNum= new ArrayList();//绑定DROPDOWNLIST
for(i=1;i<=PageCount;i++) //从1开始循环,为了不出现0页码
Al_PageNum.Add(i.ToString());
Ddl_PageNumber.DataSource=Al_PageNum;
Ddl_PageNumber.DataBind();
ListBind(); //绑定
}
MyConn.Close();
}
protected string FormatString(string str)
{
str=str.Replace(" "," ");
str=str.Replace("<","<");
str=str.Replace(">",">");
str=str.Replace('\n'.ToString(),"<br>");
return str;
} public int CalculateRecord() //计算总共有多少条记录
{
int intCount;
string strCount = "select count(*) as co from gbook ";
OleDbCommand MyComm = new OleDbCommand(strCount,MyConn);
OleDbDataReader dr = MyComm.ExecuteReader();
if(dr.Read())
{
intCount = Int32.Parse(dr["co"].ToString());
}
else
{
intCount = 0;
}
dr.Close();
return intCount;
}
ICollection CreateSource()
{ int StartIndex; //设定导入的起终地址
StartIndex = CurrentPage*PageSize; //计算记录数的起始点
string strSel = "select * from gbook order by id desc";
DataSet ds = new DataSet();
OleDbDataAdapter MyAdapter = new OleDbDataAdapter(strSel,MyConn);
MyAdapter.Fill(ds,StartIndex,PageSize,"Score");
return ds.Tables["Score"].DefaultView;
}
public void ListBind()
{
MyList.DataSource = CreateSource();
MyList.DataBind();
lbnNextPage.Enabled = true;
lbnPrevPage.Enabled = true;
if(PageCount==0)
{
lblCurrentPage.Text = "0";
lbnNextPage.Enabled = false;
lbnPrevPage.Enabled = false;
}
else
{
if(CurrentPage==(PageCount-1)) lbnNextPage.Enabled = false;
if(CurrentPage==0) lbnPrevPage.Enabled = false;
lblCurrentPage.Text = (CurrentPage+1).ToString();
}
}
public void Page_OnClick(Object sender,CommandEventArgs e)
{
CurrentPage = (int)ViewState["PageIndex"];
PageCount = (int)ViewState["PageCount"];
string cmd = e.CommandName; //判断cmd,以判定翻页方向
switch(cmd)
{
case "next":
if(CurrentPage<(PageCount-1)) CurrentPage++;
break;
case "prev":
if(CurrentPage>0) CurrentPage--;
break;
} ViewState["PageIndex"] = CurrentPage; ListBind(); }
public void PageNum_SelectIndexChanged(object sender,System.EventArgs e) {
ViewState["PageIndex"] =int.Parse(Ddl_PageNumber.SelectedItem.Value)-1;//保持不出现0页码
PageSize = 4;
CurrentPage = (int)ViewState["PageIndex"];
PageCount = (int)ViewState["PageCount"];
ListBind();
//MyList.DataSource = CreateSource();
//MyList.DataBind();
}
override protected void OnInit(EventArgs e)
{
InitializeComponent();
base.OnInit(e);
} private void InitializeComponent()
{
this.Load+=new System.EventHandler(this.Page_Load);
this.Ddl_PageNumber.SelectedIndexChanged+=new System.EventHandler(this.PageNum_SelectIndexChanged);
}
public string test(string str)
{
string str2="";
if(str==String.Empty)
{
str2="暂无回复";
}
else
{
string str3="回复:<br> ";
str2=str3+str;
}
return str2;
}
/* for(int i=10;i<20;i++)
{
DropDownList1.Items.Add(new ListItem("第"+i.ToString()+"页",i.ToString()));
} */</script>
<asp:DataList id="MyList" RepeatColumns="1" runat="server"> <itemtemplate> <table width="500" border="0" cellpadding="4" cellspacing="1" bgcolor="8c9aa5">
<tr bgcolor="cecfd6">
<td colspan="2" align="left" bgcolor="#dedbde"><strong> No.<%# DataBinder.Eval(Container.DataItem, "id") %>
<%# DataBinder.Eval(Container.DataItem, "title") %></strong>
</td>
</tr>
<tr>
<td width="95" rowspan="2" align="center" valign="middle" bgcolor="f7f7f7" class="word">
<table width="95" border="0" cellspacing="0" cellpadding="0" class="table1">
<tr>
<td align="center" valign="top" ><br><image src="<%# DataBinder.Eval(Container.DataItem, "sex_image") %>" border=0 ></td>
</tr>
<tr>
<td align="center" class="word" ><%# DataBinder.Eval(Container.DataItem, "username") %><br><%# DataBinder.Eval(Container.DataItem, "sex") %></td>
</tr>
</table>
</td>
<td width="386" height="129" valign="top" bgcolor="f7f7f7" class="word">
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td class="word">留言:<Br> <%# DataBinder.Eval(Container.DataItem, "content") %><br><br><Br><BR></td>
</tr>
<tr>
<td width="80%" bgcolor="#c6c3c6" height="1"></td>
</tr>
<tr>
<td class="word"><br><font color=red><%# test(DataBinder.Eval(Container.DataItem, "r_content").ToString()) %><font></FONT><br><br></td>
</tr>
</table>
</td>
</tr>
<tr>
<td height="22" bgcolor="cecfd6" valign="top">
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td align="left"><table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td>IP地址:<%# DataBinder.Eval(Container.DataItem, "ip") %>   发表时间:<%# DataBinder.Eval(Container.DataItem, "regdate") %></td>
<td width="15%" align="right"><a href="<%# DataBinder.Eval(Container.DataItem, "website") %>" target="_blank"><img src="img/url.gif" border=0></a> <a href="mailto:<%# DataBinder.Eval(Container.DataItem, "email") %>" target="_blank"><img src="img/email2.gif" border=0></a></td>
</tr>
</table>
</td>
</tr>
</table></td>
</tr>
</table>
<br>
</itemtemplate>
</asp:DataList>
<table width="530" border="1" align="center" cellspacing="0" cellpadding="3" bgcolor="#FFFFFF" bordercolor="#C0C0C0" style="border-collapse: collapse">
<tr>
<td align="right" bgcolor="#ECECEC" colspan="2"><asp:LinkButton id="lbnPrevPage" Text="上一页" CommandName="prev" OnCommand="Page_OnClick" runat="server" />
<asp:LinkButton id="lbnNextPage" Text="下一页" CommandName="next" OnCommand="Page_OnClick" runat="server" />
共有<asp:Label id="lblRecordCount" ForeColor="red" runat="server" />条记录
当前为<asp:Label id="lblCurrentPage" ForeColor="red" runat="server" />/<asp:Label id="lblPageCount" ForeColor="red" runat="server" />页 <asp:dropdownlist ID="Ddl_PageNumber" runat="server" AutoPostBack="true" CssClass="lanyu"></asp:dropdownlist>
</td>
</tr></table>你自己改改就能用了,大体是这个意思
用这个控件试试
因为DataGrid控件我们采用直接绑定记录集来显示数据.所以分页处理我们采用了间接的办法,定义另一个记录集objrs,将分页后的记录集付给objrs.然后绑定DataGrid'效果还不错 , 我加了详细地注释?像pagesize, AbsolutePage的用法可参考msdn
VB中新建工程,form中添加DataGrid控件,按钮cmdPrevious和cmdNext,文本框txtPage'引用microsoft active data object 2.x object libraryOption ExplicitDim conn As ADODB.ConnectionDim lCurrentPage As Long
Private Sub cmdNext_Click() lCurrentPage = lCurrentPage + 1 Call Loadcontrol(lCurrentPage)End Sub
Private Sub cmdPrevious_Click() If lCurrentPage > 1 Then lCurrentPage = lCurrentPage - 1 Call Loadcontrol(lCurrentPage)End IfEnd Sub Private Sub Form_Load() Set conn = New ADODB.Connectionconn.CursorLocation = adUseClient conn.Open "PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\test2000.mdb;" lCurrentPage = 1 Call Loadcontrol(lCurrentPage) End SubPrivate Sub Loadcontrol(lPage As Long) Dim adoPrimaryRS As ADODB.Recordset Dim lPageCount As Long Dim nPageSize As IntegerDim lCount As Long '每页显示的纪录 nPageSize = 10 Set adoPrimaryRS = New ADODB.Recordset adoPrimaryRS.Open "select * from numbers", conn, adOpenStatic, adLockOptimistic adoPrimaryRS.PageSize = nPageSize '页数 lPageCount = adoPrimaryRS.PageCount If lCurrentPage > lPageCount Then lCurrentPage = lPageCount End If adoPrimaryRS.AbsolutePage = lCurrentPage '定义另一个记录集Dim objrs As New ADODB.Recordset '添加字段名称For lCount = 0 To adoPrimaryRS.Fields.Count - 1 objrs.Fields.Append adoPrimaryRS.Fields(lCount).Name, adVarChar, adoPrimaryRS.Fields(lCount).DefinedSize Next '打开记录集objrs.Open '将指定记录数循环添加到objrs中 For lCount = 1 To nPageSize objrs.AddNew objrs!id = adoPrimaryRS!id objrs!anumber = adoPrimaryRS!anumber adoPrimaryRS.MoveNext Next '绑定 Set DataGrid1.DataSource = objrs '在文本框显示页数 txtPage = lPage & "/" & adoPrimaryRS.PageCountEnd Sub Private Sub Form_Unload(Cancel As Integer)If Not conn Is Nothing Then conn.CloseEnd If Set conn = NothingEnd Sub‘文本框中输入页数,回车跳转到指定位置Private Sub txtPage_KeyDown(KeyCode As Integer, Shift As Integer) lCurrentPage = Val(txtPage.Text) Call Loadcontrol(lCurrentPage)End Sub