DataList與DataGrid都是很好用的控件,但是非常遺憾的是DataList不具有象DataGrid那樣的自動分頁功能,即:他不具備PageSize這樣的屬性來控制分頁,而DataGrid卻不具備DataList的RepeatDirection和 RepeatColumns屬性。本人根據DataGrid的分頁思想自己寫了個DataList的分頁程序,如有什麽不足的地方歡迎指正.
a.aspx頁:
<TABLE cellSpacing=0 cellPadding=0 width=784 height="120" align=center border=0>
<tr>
<td align=center>
<asp:datalist id="MyDataGrid" RepeatDirection=Horizontal RepeatColumns=5 showfooter=true borderwidth=0 runat=server>
<HeaderTemplate>
<table width=784 cellpadding=0 cellspacing=0 border=0 >
<tr>
</HeaderTemplate>
<ItemTemplate>
<td align=center>
<table width="100%" height="120">
<tr>
<td width=154 align="center">
<img width=130 height=90 src='<%# DataBinder.Eval(Container.DataItem, "P_ID", "Img.aspx?id={0}")%>'>
</td>
</tr>
<tr>
<td align=center>
名稱: <%# DataBinder.Eval(Container.DataItem, "P_Name")%>
</td>
</tr>
</table>
</td>
</ItemTemplate>
<FooterTemplate>
</tr>
</table>
</FooterTemplate>
</asp:datalist>
</td>
</tr>
</table>
<table id=ttt width=784 align=center>
<tr align="center" valign="middle" width=100%>
<td align="center" valign="middle"><asp:LinkButton ID="btnFrist" runat="server" CommandName="Pager" CommandArgument="Frist" OnCommand="PagerButtonClick" Text="首頁"></asp:LinkButton></td>
<td align="center" valign="middle"><asp:LinkButton ID="btnPrev" runat="server" CommandName="Pager" CommandArgument="Prev" OnCommand="PagerButtonClick" Text="上壹頁"></asp:LinkButton></td>
<td align="center" valign="middle"><asp:LinkButton ID="btnNext" runat="server" CommandName="Pager" CommandArgument="Next" OnCommand="PagerButtonClick" Text="下壹頁"></asp:LinkButton></td>
<td align="center" valign="middle"><asp:LinkButton ID="btnLast" runat="server" CommandName="Pager" CommandArgument="Last" OnCommand="PagerButtonClick" Text="尾頁"></asp:LinkButton></td>
<td align="right"valign="middle">頁<asp:Label ID="lblCurrentPage" runat="server" /></td><td align="left" valign="middle">/<asp:Label ID="lalPageCount" runat="server"/></td>
<td align="center" valign="middle">***<asp:Label ID="lblRecordCount" runat="server" />條記錄</td>
<td align="center" valign="middle">轉到第<asp:DropDownList ID="D1" runat="server" AutoPostBack="True" OnSelectedIndexChanged="D1_SelectedIndexChanged" />頁</td>
</tr>
</td>
</tr>
</table>
a.aspx.cs頁:
private static int PageIndex;//保存當前頁的索引
private static int pagesize;//保存每個頁面中的記錄數目
private static int CurrentPage;//為當前頁序號-1
private static int PageCount;//保存總頁數
private static int RecordCount;//總記錄數
public bool DropFill;
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
DropFill = true;
pagesize = 10;//pagesize = MyDataGrid.RepeatColumns;可以設DataList的屬性RepeatDirection="Horizontal" RepeatColumns="10",通過RepeatColumns來設置每頁顯示的條數
CurrentPage = 0;
GetPageCount();//得到總記錄數
Databind();
}
}
public void GetPageCount()
{
string sql = "select * from prizes ";
Conn c1 = new Conn();
SqlCommand cmd = new SqlCommand(sql, c1.SqlConnection());
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();
da.Fill(ds, "table");
RecordCount = ds.Tables["table"].DefaultView.Count;
c1.SqlConnection().Close();
}
public void Databind()
{ D1.Items.Clear();
string sql = "select * from prizes";
Class1 c1 = new Class1();
SqlCommand cmd = new SqlCommand(sql, c1.SqlConnection());
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();
PageIndex = CurrentPage * pagesize;
da.Fill(ds,PageIndex,pagesize, "table");
MyDataGrid.DataSource = ds.Tables["table"];
MyDataGrid.DataBind();
c1.CloseSqlConnection();
PageCount = RecordCount / pagesize;
if (RecordCount % pagesize != 0)
PageCount++;
lalPageCount.Text = PageCount.ToString();
lblRecordCount.Text = RecordCount.ToString();
if (lblCurrentPage.Text == "")
{
lblCurrentPage.Text = "1";
}
if (CurrentPage == 0)
{
btnFrist.Enabled = false;
btnPrev.Enabled = false;
}
if (CurrentPage == PageCount - 1)
{
btnLast.Enabled = false;
btnNext.Enabled = false;
}
//給下拉鏈表中添加頁數
if (DropFill == true)
{
for (int i = 1; i <= PageCount; i++)
{
D1.Items.Add(new ListItem(i.ToString()));
}
}
else
{
D1.Items.Add("1");
}
}
protected void D1_SelectedIndexChanged(object sender, EventArgs e)
{
btnFrist.Enabled = true;
btnLast.Enabled = true;
btnNext.Enabled = true;
btnPrev.Enabled = true;
DropFill = false;
CurrentPage = Int32.Parse(D1.SelectedValue.ToString())-1;
//MyDataGrid.CurrentPageIndex = Pageindex - 1;
DropFill = false;
Databind();
lblCurrentPage.Text = (CurrentPage+1).ToString();
}
protected void PagerButtonClick(object sender, CommandEventArgs e)
{
btnFrist.Enabled = true;
btnLast.Enabled = true;
btnNext.Enabled = true;
btnPrev.Enabled = true;
DropFill = false;
string age = e.CommandArgument.ToString();
switch (age)
{
case "Next":
if (CurrentPage < PageCount - 1)
{
CurrentPage++;
}
break;
case "Prev":
if (CurrentPage > 0)
{
CurrentPage--;
}
break;
case "Frist":
{
CurrentPage = 0;
}
break;
case "Last":
{
CurrentPage = PageCount - 1;
}
break;
}
//MyDataGrid.CurrentPageIndex = PageIndex;
Databind();
lblCurrentPage.Text = Convert.ToString(CurrentPage+1);
}