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)
· 第一个页面的后台代码如下:
private void Page_Load( object sender, System.EventArgs e)
{
if (!Page.IsPostBack)
{
// 每页显示12条记录
int PageSize=12;
// 当前显示页
int CurrentPage=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)
{
throw new Exception(ex.Message);
}
}
Asp.net : DataList 分页技术 (3)
· // 以第一列 定单编号 做个超级链接,链接到第二页显示详细信息
public string show ( object orderID)
{
return "<a href=WebForm2.aspx?id="+orderID+" target='_blank'>"+orderID+" </a>";
}
// 将数据绑定到Datalist控件
public void 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)
{
throw new 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();
}