今天看了一下ListView和DataPager配合做數據分頁的教程,感覺很爽很方便,用在自己的項目上面時卻出現了問題,具體表現在點擊上一頁、下一頁或者數字跳轉頁面時通常要點兩下纔能有反應,而且有時候亂跳頁。
我開始測試的代碼是這樣的:
{
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
BindData();
}
protected void BindData()
{
DBDataContext db = new DBDataContext();
var ds = db.Category;
ListView1.DataSource = ds;
ListView1.DataBind();
db.Dispose();
}
}
出現如開始提及的問題,找了半天原因也沒有找到。後來在國外的一個論壇上找到了同病相憐的人,有專家給出了一個解決方案。把Page_Load裏的數據綁定移到Page_PreRender中,也就是:
{
protected void Page_Load(object sender, EventArgs e)
{
//if (!Page.IsPostBack)
// BindData();
}
protected void Page_PreRender(object sender, EventArgs e)
{
BindData();
}
protected void BindData()
{
DBDataContext db = new DBDataContext();
var ds = db.Category;
ListView1.DataSource = ds;
ListView1.DataBind();
db.Dispose();
}
}
試了一下分頁果然正常了。難道是Page_Load來的太遲?不得而知。另外,還有一種方法同樣可行:
{
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
BindData();
}
protected void Page_PreRender(object sender, EventArgs e)
{
//BindData();
}
protected void ListView1_PagePropertiesChanging(object sender, PagePropertiesChangingEventArgs e)
{
DataPager1.SetPageProperties(e.StartRowIndex, e.MaximumRows, false);
BindData();
}
protected void BindData()
{
DBDataContext db = new DBDataContext();
var ds = db.Category;
ListView1.DataSource = ds;
ListView1.DataBind();
db.Dispose();
}
}