Datalist控件分页问题
有一vs2003.net做的datalist分页页面,如100条记录,pagesize=10时,显示共10页,但每页只显示5条记录
pagesize=5时每页显示3条记录,只有在pagesize=1时才正确。
datalist设置:RepeatColumns= "1 "
--------------------------------------
相关源码:
#region 公共属性
public int ItemCount
{
get { return Convert.ToInt32(ViewState[ "ITEMCOUNT "]); }
set { ViewState[ "ITEMCOUNT "] = value; }
}
public int PageCount
{
get { return Convert.ToInt32(ViewState[ "PAGECOUNT "]); }
set { ViewState[ "PAGECOUNT "] = value; }
}
public int CurrentPage
{
get
{
if (ViewState[ "PAGE "] != null)
{
return Convert.ToInt32(ViewState[ "PAGE "]);
}
else
{
return 1;
}
}
set { ViewState[ "PAGE "] = value; }
}
#endregion
private void DataGridBind()
{
DataView dv = GetDataSource();
dv.RowFilter = InitQuery();
ItemCount = dv.Count;
PagedDataSource pds = new PagedDataSource();
pds.DataSource = dv;
pds.AllowPaging = true;
pds.PageSize = 10;
pds.CurrentPageIndex = CurrentPage - 1;
PageCount = pds.PageCount;
try
{
dlCADStyleMaster.DataSource = pds;
dlCADStyleMaster.DataBind();
}
catch
{
this.DataGridBind();
}
}
private void dlCADStyleMaster_ItemCommand(object source, System.Web.UI.WebControls.DataListCommandEventArgs e)
{
if (e.CommandName == "首页 ")
{
CurrentPage = 1;
DataGridBind();
}
if (e.CommandName == "前十页 ")
{
CurrentPage = CurrentPage - 10;
DataGridBind();
}
if (e.CommandName == "上一页 ")
{
CurrentPage --;
DataGridBind();
}
if (e.CommandName == "下一页 ")
{
CurrentPage ++;
DataGridBind();
}
if (e.CommandName == "后十页 ")
{
CurrentPage = CurrentPage + 10;
DataGridBind();
}
if (e.CommandName == "末页 ")
{
CurrentPage = PageCount;
DataGridBind();
}
}
private void cmdSearch_Click(object sender, System.EventArgs e)
{
CurrentPage = 1;
DataGridBind();
}
private void dlCADStyleMaster_ItemCreated(object sender, System.Web.UI.WebControls.DataListItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Header || e.Item.ItemType == ListItemType.Footer)
{
Label Space = new Label();
Label PageStyleInfo = new Label();
PageStyleInfo.Text = " 第 <font color=red> "
+ CurrentPage.ToString()
+ " </font> 页/共 <font color=red> "
+ PageCount.ToString()
+ " </font> 页 "
+ "(共 <font color=red> " + ItemCount.ToString() + " </font> 张单) ";
LinkButton FirstPage = new LinkButton();
FirstPage.Text = "首页 ";
FirstPage.CommandName = "首页 ";
LinkButton PrevTen = new LinkButton();
PrevTen.Text = "前十页 ";
PrevTen.CommandName = "前十页 ";
LinkButton PrevPage = new LinkButton();
PrevPage.Text = "上一页 ";
PrevPage.CommandName = "上一页 ";
LinkButton NextPage = new LinkButton();
NextPage.Text = "下一页 ";
NextPage.CommandName = "下一页 ";
LinkButton NextTen = new LinkButton();
NextTen.Text = "后十页 ";
NextTen.CommandName = "后十页 ";
LinkButton LastPage = new LinkButton();
LastPage.Text = "末页 ";
LastPage.CommandName = "末页 ";
Space = new Label();
Space.Text = " ";
e.Item.Controls.AddAt(0, Space);
e.Item.Controls.AddAt(0, LastPage);
Space = new Label();
Space.Text = " ";
e.Item.Controls.AddAt(0, Space);
e.Item.Controls.AddAt(0, NextTen);
Space = new Label();
Space.Text = " ";
e.Item.Controls.AddAt(0, Space);
e.Item.Controls.AddAt(0, NextPage);
Space = new Label();
Space.Text = " ";
e.Item.Controls.AddAt(0, Space);
e.Item.Controls.AddAt(0, PrevPage);
Space = new Label();
Space.Text = " ";
e.Item.Controls.AddAt(0, Space);
e.Item.Controls.AddAt(0, PrevTen);
Space = new Label();
Space.Text = " ";
e.Item.Controls.AddAt(0, Space);
e.Item.Controls.AddAt(0, FirstPage);
Space = new Label();
Space.Text = " ";
e.Item.Controls.AddAt(0, Space);
e.Item.Controls.AddAt(0, PageStyleInfo);
//如果当前页面是第一页
FirstPage.Enabled = (CurrentPage != 1);
PrevTen.Enabled = (CurrentPage != 1);
PrevPage.Enabled = (CurrentPage != 1);
//如果当前页面是最后一页
LastPage.Enabled = (CurrentPage != PageCount);
NextTen.Enabled = (CurrentPage != PageCount);
NextPage.Enabled = (CurrentPage != PageCount);
NextTen.Enabled = (CurrentPage + 10 <= PageCount);
PrevTen.Enabled = (CurrentPage - 10 > = 1);
}
}
页面文件:
<asp:datalist id= "dlCADStyleMaster " style= "Z-INDEX: 105; LEFT: 8px; POSITION: absolute; TOP: 144px "
runat= "server " RepeatColumns= "1 " RepeatDirection= "Horizontal ">
<HeaderTemplate>
<FONT face= "宋体 "> </FONT>
</HeaderTemplate>
<FooterStyle HorizontalAlign= "Right " Height= "30px " ForeColor= "#330099 " BorderStyle= "Ridge " BackColor= "#FFFFCC "> </FooterStyle>
<FooterTemplate>
<FONT face= "宋体 "> </FONT>
</FooterTemplate>
[解决办法]
GetDataSource();
查查他吧,用datalist/grid的自带分页,必须把所有记录全取出来,但仍然有很多问题,页码计算要和他内部关联起来
[解决办法]
PagedDataSource 应该是这个类的问题.
[解决办法]
GetDataSource()
或者
PagedDataSource;写的有问题吧
[解决办法]
public partial class DooDleShow : System.Web.UI.Page
{
int PerPage = 4;
protected void Page_Load(object sender, System.EventArgs e)
{
if(!IsPostBack)
{
ViewState[ "CurrentPageNumber "]=1;
LinkButton1.Enabled=false;
LinkButton2.Enabled=false;
bind();
fenye();
}
}
public void fenye()
{
LinkButton1.Enabled=(int)ViewState[ "CurrentPageNumber "]==1?false:true;
LinkButton2.Enabled=(int)ViewState[ "CurrentPageNumber "]==1?false:true;
LinkButton3.Enabled=(int)ViewState[ "CurrentPageNumber "]==(int)ViewState[ "PageCount "]?false:true;
LinkButton4.Enabled=(int)ViewState[ "CurrentPageNumber "]==(int)ViewState[ "PageCount "]?false:true;
}
public void bind()
{
SqlConnection cn = new SqlConnection(ConfigurationSettings.AppSettings[ "SQLCONNECTIONSTRING "]);
int newTop = PerPage * (int)ViewState[ "CurrentPageNumber "];
int oldTop = newTop - PerPage;
string str = "select * from (select top "+newTop+ " * from [DoodleLabel] order by DooDle_ID DESC) a where a. DooDle_ID not in(select top "+oldTop+ " DooDle_ID from [DoodleLabel] order by DooDle_ID DESC) order by DooDle_ID DESC ";
SqlCommand cm = new SqlCommand(str,cn);
SqlDataAdapter da = new SqlDataAdapter(cm);
DataSet dr = new DataSet();
da.Fill(dr);
DataList1.DataSource=dr;
DataList1.DataBind();
cm.CommandText= "select count(DooDle_ID) from [DoodleLabel] ";
cn.Open();
int cout = (int)cm.ExecuteScalar();
cn.Close();
int PageCount = cout%PerPage==0?cout/PerPage:cout/PerPage+1;
ViewState[ "PageCount "]=PageCount;
int PageIndex = (int)ViewState[ "CurrentPageNumber "];
Label1.Text= "第 "+PageIndex+ "页/共 "+PageCount + "页 ";
}
private void LinkButton1_Click(object sender, System.EventArgs e)
{//第一页
ViewState[ "CurrentPageNumber "]=1;
fenye();
bind();
}
private void LinkButton2_Click(object sender, System.EventArgs e)
{//上一页
ViewState[ "CurrentPageNumber "]=(int)ViewState[ "CurrentPageNumber "]-1;
fenye();
bind();
}
private void LinkButton3_Click(object sender, System.EventArgs e)
{//下一页
ViewState[ "CurrentPageNumber "]=(int)ViewState[ "CurrentPageNumber "]+1;
fenye();
bind();
}
private void LinkButton4_Click(object sender, System.EventArgs e)
{//最后一页
ViewState[ "CurrentPageNumber "]=(int)ViewState[ "PageCount "];
fenye();
bind();
}
}
}
[解决办法]
mark
[解决办法]
问题在这里面
private void DataGridBind()
{
DataView dv = GetDataSource();
dv.RowFilter = InitQuery();
ItemCount = dv.Count;
PagedDataSource pds = new PagedDataSource();
pds.DataSource = dv;
pds.AllowPaging = true;
pds.PageSize = 10;
pds.CurrentPageIndex = CurrentPage - 1;
PageCount = pds.PageCount;
try
{
dlCADStyleMaster.DataSource = pds;
dlCADStyleMaster.DataBind();
}
catch
{
this.DataGridBind();
}
}
你把涉及到的类的代码贴出来吧
[解决办法]
学习
[解决办法]
看到头都大了
[解决办法]
jf up 学习