转:http://blog.sina.com.cn/s/blog_4a87caab010006kr.html
Asp.net:DataList分页技术(1)
· 技术点一:
DataList分页主要用到了da.Fill方法的第一个重载方法。它的参数分别是数据集DataSet ,开始记录数StartRecord,最大的记录数MaxRecord,数据表名TableName 。如下:
da.Fill(System.Data.DataSet ds ,int startRecord,int maxRecords,string srcTable)
技术点二:
要使绑定列的一列成为一个超级链接列。
HTML端代码:
<%#show(DataBinder.Eval(Container.DataItem,”OrderID”))%>
后台代码一个show()的方法:
public string show (object orderID)
{
return "<a href=WebForm2.aspx?id="+
orderID+" target='_blank'>"+orderID+" </a>";
}
第一个页面的前台代码如下:
<TABLE id="Table1" cellSpacing="0" width="752" border="0">
<TR>
<TD>
<FONT face="宋体">DataList分页技术和超级链接</FONT>
</TD>
</TR>
<TR>
<TD>
<asp:datalist id="DataList1" runat="server" Width="100%" Height="96px"> <HeaderTemplate>
定单编号<td>
员工编号<td>
定单日期<td>
运费<td>
运往所在城市
</HeaderTemplate>
<ItemTemplate>
<%# show(DataBinder.Eval(Container.DataItem,"OrderID"))%>
<td>
<%# DataBinder.Eval(Container.DataItem,"CustomerID")%>
<td>
<%# DataBinder.Eval(Container.DataItem,"OrderDate")%>
<td>
<%# DataBinder.Eval(Container.DataItem,"Freight")%>
<td>
<%# DataBinder.Eval(Container.DataItem,"ShipCity")%>
</ItemTemplate>
</asp:datalist></TD>
</TR>
<TR>
<TD>
<asp:linkbutton id="FirstLB" runat="server" OnCommand="LinkButton_Click" CommandName="first">第一页</asp:linkbutton>
<asp:linkbutton id="PreviousLB" runat="server" OnCommand="LinkButton_Click" CommandName="prev">上一页</asp:linkbutton>
<asp:linkbutton id="NextLB" runat="server" OnCommand=LinkButton_Click CommandName="next">下一页</asp:linkbutton>
<asp:linkbutton id="EndLB" runat="server" OnCommand=LinkButton_Click CommandName="end">最后一页</asp:linkbutton>
总页<asp:label id="TotalLbl" runat="server"></asp:label>
当前第<asp:label id="CurrentLbl" runat="server"></asp:label>页 <asp:linkbutton id="JumpLB" runat="server" OnCommand=LinkButton_Click CommandName="jump">跳到</asp:linkbutton>
第<asp:textbox id="TextBox1" runat="server" Width="90px"></asp:textbox> 页
</TD>
</TR>
</TABLE>
Asp.net:DataList分页技术(2)
· 第一个页面的后台代码如下:
privatevoid Page_Load(object sender, System.EventArgs e)
{
if(!Page.IsPostBack)
{
//每页显示12条记录
int PageSize=12;
//当前显示页
intCurrentPage=0;
//索引页
ViewState["PageIndex"]=0;
//计算共有多少记录
int rdCount=CalculateRecord();
//计算共有多少页
int PageCount=RecordCount/PageSize;
ViewState["PageCount"]=PageCount;
//显示总页数
this.TotalLbl.Text=PageCount.ToString();
this.DataListBind();
}
}
?/P>
//计算总共有多少条记录
private int CalculateRecord()
{
try
{
int recordCount;
SqlConnection con =new SqlConnection("server=.;database=Northwind;uid=sa;pwd=sa");
con.Open();
string sql="select count(*)as count from Orders";
SqlCommand cmd = new SqlCommand(sql,con);
SqlDataReader sdr = cmd.ExecuteReader();
if(sdr.Read())
{
recordCount=Int32.Parse(sdr["count"].ToString());
}
else
{
recordCount = 0;
}
sdr.Close();
con.Close();
return recordCount;
}
catch(Exception ex)
{
thrownew Exception(ex.Message);
}
}
Asp.net:DataList分页技术(3)
· //以第一列定单编号做个超级链接,链接到第二页显示详细信息
publicstring show (object orderID)
{
return "<a href=WebForm2.aspx?id="+orderID+" target='_blank'>"+orderID+" </a>";
}
//将数据绑定到Datalist控件
publicvoid DataListBind()
{
try
{
//设定导入的起终地址
int StartIndex = CurrentPage*PageSize;
string sql = "select * from Orders";
DataSet ds = new DataSet();
SqlConnection con=new SqlConnection("server=.;database=Northwind;uid=sa;pwd=");
con.Open();
SqlDataAdapter sda= new SqlDataAdapter(sql,con);
sda.Fill(ds,StartIndex,PageSize,"orders");
this.DataList1.DataSource =
ds.Tables["orders"].DefaultView;
this.DataList1.DataBind();
this.PreviousLB.Enabled = true;
this.NextLB.Enabled = true;
if(CurrentPage==(PageCount-1))
{
//当为最后一页时,下一页链接按钮不可用
this.NextLB.Enabled = false;
}
if(CurrentPage==0)
{
//当为第一页时,上一页按钮不可用
this.PreviousLB.Enabled = false;
}
//当前页数
this.CurrentLbl.Text = (CurrentPage+1).ToString();
}
catch(Exception ex)
{
thrownew Exception(ex.Message);
}
}
Asp.net:DataList分页技术(4)
· //自己编写的按钮点击事件
public void LinkButton_Click
(Object sender,CommandEventArgs e)
{
//获得当前页索引
int CurrentPage = (int)ViewState["PageIndex"];
//获得总页数
int PageCount = (int)ViewState["PageCount"];
string cmd = e.CommandName;
switch(cmd)
{
case "prev"://上一页
if(CurrentPage>0)
CurrentPage--;
break;
case "next"://下一页
if(CurrentPage<(PageCount-1))
CurrentPage++;
break;
case "first"://第一页
CurrentPage=0;
break;
case "end"://最后一页
CurrentPage=PageCount-1;
break;
case "jump"://跳转
if(this.TextBox1.Text.Trim()==""||Int64.Parse(this.TextBox1.Text.Trim())>PageCount)
{
//如果输入数字为空或超出范围则返回
return;
}
else
{
CurrentPage=Int32.Parse(this.TextBox1.Text.ToString())-1;
break;
}
}
//获得当前页
ViewState["PageIndex"] = CurrentPage;
//重新将DataList绑定到数据库
this.DataListBind();
}
第二页用来显示详细信息,用的控件是DataGird。代码如下:
private void Page_Load(object sender, System.EventArgs e)
{
string id=Request.QueryString["id"];
SqlConnection con=new SqlConnection("server=.;database=Northwind;uid=sa;pwd=");
con.Open();
SqlDataAdapter sda=new SqlDataAdapter();
sda.SelectCommand=new SqlCommand("select * from [Order Details] where OrderID='"+id+"'",con);
DataSet ds=new DataSet();
sda.Fill(ds,"orders");
this.DataGrid1.DataSource=ds.Tables["orders"].DefaultView; this.DataGrid1.DataBind();
con.Close();
}