一、前言
前几个章节,就“容器与控件”、“跨页传值”等分两个系列进行了详细阐述,接下来,我们这个系列
将对数据控件DataList/Repeater、GrivewList/ListView和FormView/DetailsView进行系统阐述。
以上三组控件,既有共同点,也有不同点,主要是:
1、使用效果不同:DataList/Repeater主要以项的形式对多个纪录进行重复显示,而FormView/DetailsView
则是显示单个纪录,而GridView则是以表格形式显示多个纪录。
2、功能不同:DataList/Repeater功能相对简单,但使用灵活,便于根据需要布局、美化显示结果。而GridView/ListView
功能强大,内置程序丰富。不管是布局,还是分页、排序、编辑等都有内置程序。所以GridView/ListView使用起来,
比较容易, 不需要写大多代码,但是根据用户需要而改变的灵活性不够。
二、DataList分页功能的实现
我们知道,GridView有自动分页功能,而DataList没有这个功能,所在,就要借助PageDataSource控件来帮助实现分页。
实现步骤:
1、定 义PageDataSource实例: protected static PagedDataSource Page_Control=new PagedDataSource();
2、设定Page_Control实例的三个分页属性: AllowPaging、PageSize、CurrentPageIndex
Page_Control.AllowPaging = true; //允许分页设置为真
Page_Control.PageSize = 6; //每页显示项(纪录)数
Page_Control.CurrentPageIndex = CurrentPageNum; //当前页码
3、绑定分页实例与数据源:格式,分页实例名.DataSource=数据源名(可以是DataTable)
如: Page_Control.DataSource = DlDataSet.Tables["DlTable"].DefaultView; //将实例 Page_Control与名为"DlTable"的DataTable绑定
4、实现分页实例与DataList绑定:格式,DataList实例名.DataSoruce=分页实例名。如:下例,DataList实例名为: DLPage;
分页实例名 Page_Control,具体如下:
DLPage.DataSource = Page_Control;
DLPage.DataBind();
5、在DataList中设分页按钮(功能)和定义分页事件:如,下例在DataList的脚注模板中设定了四个分页按FstPage( 首页)、PrePage(前一 页)、"NxtPage(下一页) 、 LasPage(最后页) 按 钮。在DataList头部定义OnItemCommand="事件程序"
2、代码部分:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
public partial class DataListPage_DataListPage : System.Web.UI.Page
{
protected static PagedDataSource Page_Control=new PagedDataSource();
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
Datalist_Bind(0);
}
}
public void Datalist_Bind(int CurrentPageNum)
{
Page_Control.AllowPaging = true;
Page_Control.PageSize = 6;
Page_Control.CurrentPageIndex = CurrentPageNum;
string DLConString = ConfigurationManager.AppSettings["Conn"].ToString();
SqlConnection DLCon = new SqlConnection(DLConString);
string DLString = "select * from employee";
SqlCommand DLSqlCommand = new SqlCommand(DLString, DLCon);
SqlDataAdapter DlData = new SqlDataAdapter();
DlData.SelectCommand = DLSqlCommand;
DataSet DlDataSet = new DataSet();
DLCon.Open();
DlData.Fill(DlDataSet, "DlTable");
Page_Control.DataSource = DlDataSet.Tables["DlTable"].DefaultView;
DLPage.DataSource = Page_Control;
DLPage.DataBind();
}
protected void DLPage_ItemCommand(object source, DataListCommandEventArgs e)
{
switch (e.CommandName)
{
case "Fst":
Page_Control.CurrentPageIndex=0;
Datalist_Bind(Page_Control.CurrentPageIndex);
break;
case "Pre":
Page_Control.CurrentPageIndex=Page_Control.CurrentPageIndex-1;
Datalist_Bind(Page_Control.CurrentPageIndex);
break;
case "Nxt":
Page_Control.CurrentPageIndex=Page_Control.CurrentPageIndex+1;
Datalist_Bind(Page_Control.CurrentPageIndex);
break;
case "Las":
Page_Control.CurrentPageIndex = Page_Control.PageCount - 1;
Datalist_Bind(Page_Control.CurrentPageIndex);
break;
case "SchButton":
if(e.Item.ItemType==ListItemType.Footer)
{
TextBox MyTextBox= (TextBox)e.Item.FindControl("SchText");
int Dl_Number=0;
if(!MyTextBox.Equals(""))
{
Dl_Number=int.Parse(MyTextBox.Text.ToString());
if(Dl_Number>0 & Dl_Number<=Page_Control.PageCount)
{
Datalist_Bind(Dl_Number-1);
}
}
}
break;
}
}
protected void DLPage_ItemDataBound(object sender, DataListItemEventArgs e)
{
if(e.Item.ItemType==ListItemType.Footer){
Label MyLabel = (Label)e.Item.FindControl("LblCurrentpage");
Label MyCountLabel = (Label)e.Item.FindControl("LblCount");
TextBox MyTextbox = (TextBox)e.Item.FindControl("SchText");
LinkButton MyFstButton = (LinkButton)e.Item.FindControl("FstPage");
LinkButton MyNextButton = (LinkButton)e.Item.FindControl("NxtPage");
LinkButton MyPreButton = (LinkButton)e.Item.FindControl("PrePage");
LinkButton LstButton = (LinkButton)e.Item.FindControl("LasPage");
MyLabel.Text = (Page_Control.CurrentPageIndex + 1).ToString();
MyCountLabel.Text = (Page_Control.PageCount).ToString();
if (Page_Control.IsFirstPage)
{
MyFstButton.Enabled = false;
MyPreButton.Enabled = false;
}
if (Page_Control.IsLastPage)
{
LstButton.Enabled = false;
MyNextButton.Enabled = false;
}
}
}
}



