分页控件代码不是很熟悉,现在遇到一个很傻的情况。数据源是用DataSource
并附上分页源代码分页源代码太长,没有办法贴出来,我贴在回贴里
我现在遇到的问题我在页面里使用了两个分面引用
代码如下:
<uc1:Pager ID="Pager1" runat="server" ControlToBePaged="list1" DataSource="<%# GetImageList() %>" NumbersCount="5" PageSize="20" SkinPath="~/PagerSkin1.ascx" /><uc1:Pager ID="Pager2" runat="server" ControlToBePaged="list1" DataSource="<%# GetImageList() %>" NumbersCount="5" PageSize="20" SkinPath="~/PagerSkin1.ascx" />分页代码可以正常显示出来,但我用其中任何一个点击分页,另一个没有同步。这个问题要如何改呢。我是一个.net新手,这样的问题没有做过,请高手可以附上要修改的代码嘛。
并附上分页源代码分页源代码太长,没有办法贴出来,我贴在回贴里
我现在遇到的问题我在页面里使用了两个分面引用
代码如下:
<uc1:Pager ID="Pager1" runat="server" ControlToBePaged="list1" DataSource="<%# GetImageList() %>" NumbersCount="5" PageSize="20" SkinPath="~/PagerSkin1.ascx" /><uc1:Pager ID="Pager2" runat="server" ControlToBePaged="list1" DataSource="<%# GetImageList() %>" NumbersCount="5" PageSize="20" SkinPath="~/PagerSkin1.ascx" />分页代码可以正常显示出来,但我用其中任何一个点击分页,另一个没有同步。这个问题要如何改呢。我是一个.net新手,这样的问题没有做过,请高手可以附上要修改的代码嘛。
解决方案 »
- CheckBoxList的绑定和拿到值
- asp.net(C#)app_code的引用问题。
- [无法识别的配置节“membership”]是怎么回事???
- Button的OnClientClick事件,不能响应
- treeview中如何判断一个子节点是否被点击上?(没有用checkbox)
- 紧急求救(!!!)
- WebConfig中Access的連接字符串書寫問題
- 急,选定了DataGrid的某一行,如何能得到该行中的某个字段的值。
- 如何使某个目录不应用自定义的HttpHandler?
- 打开新窗口的问题,我查询过仍然没有得到满意答案
- 请问读取AD中未disable的用户信息的searcher条件该怎么写?
- 100分! vs.net2003 中用的吴旗娃的分页控件在 vs.net2005 下要如何修改写法?
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.ComponentModel;
using System.Reflection;
using System.Collections.Generic;namespace PumpersShow {
public partial class Pager: CtrlBase {
protected void Page_Load(object sender, EventArgs e) {
} [IDReferenceProperty, TypeConverter(typeof(ControlIDConverter)),
DefaultValue("")]
public string ControlToBePaged {
get {
object obj1 = this.ViewState["ControlToBePaged"];
if (obj1 != null) {
return (string)obj1;
}
return string.Empty;
}
set {
this.ViewState["ControlToBePaged"] = value;
}
} public string SkinPath {
get {
string s = (string)ViewState["SkinPath"];
return (s == null) ? "" : s;
}
set {
ViewState["SkinPath"] = value;
}
} protected override void OnInit(EventArgs e) {
base.OnInit(e); if (SkinPath.Length > 0) {
try {
UserControl skin = LoadControl(SkinPath) as UserControl;
FormView fv = skin.FindControl("formView1") as FormView;
this.formView1.InsertItemTemplate = fv.InsertItemTemplate;
} catch { }
}
formView1.ItemCommand += new FormViewCommandEventHandler(formView1_ItemCommand);
formView1.ItemCreated += new EventHandler(formView1_ItemCreated);
} // 附加事件绑定。
void formView1_ItemCreated(object sender, EventArgs e) {
Literal litRecordCount = formView1.FindControl("litRecordCount") as Literal; if (litRecordCount != null) {
litRecordCount.Text = RecordCount.ToString();
} Literal litPageNumber = formView1.FindControl("litPageNumber") as Literal; if (litPageNumber != null) {
litPageNumber.Text = CurrentPage.ToString();
}
Literal litPageCount = formView1.FindControl("litPageCount") as Literal; if (litPageCount != null) {
litPageCount.Text = PageCount.ToString();
} Repeater rptPageNumbers = formView1.FindControl("rptPageNumbers") as Repeater; if (rptPageNumbers != null) {
rptPageNumbers.DataSource = GetPageNumbers();
rptPageNumbers.ItemCommand += new RepeaterCommandEventHandler(rptPageNumbers_ItemCommand);
rptPageNumbers.ItemDataBound += new RepeaterItemEventHandler(rptPageNumbers_ItemDataBound);
}
} void rptPageNumbers_ItemDataBound(object sender, RepeaterItemEventArgs e) {
LinkButton btnPageNumber = e.Item.FindControl("btnPageNumber") as LinkButton;
if (btnPageNumber != null) {
btnPageNumber.Text = e.Item.DataItem.ToString();
btnPageNumber.CommandArgument = e.Item.DataItem.ToString();
}
}
get { return _dataSource; }
set {
_dataSource = value;
}
} protected string[] GetPageNumbers() {
int max = NumbersCount;
int start = 0;
int end = 0; if (max >= PageCount) {
start = 1;
end = PageCount;
} else {
if (PageCount - CurrentPage + 1 < max) {
start = PageCount - max + 1;
end = PageCount;
} else if (CurrentPage < max) {
start = 1;
end = max;
} else {
start = CurrentPage;
end = CurrentPage + max - 1;
}
}
List<string> numbers = new List<string>();
for (int i = start; i <= end; i++) {
numbers.Add(i.ToString());
} return numbers.ToArray();
} protected void formView1_ItemCommand(object sender, FormViewCommandEventArgs e) {
if (e.CommandName == "Page") {
switch (e.CommandArgument.ToString()) {
case "First":
CurrentPage = 1;
break; case "Prev":
int currentPage = CurrentPage - 1;
if (currentPage < 1) currentPage = 1;
CurrentPage = currentPage;
break; case "Next":
int currentPage2 = CurrentPage + 1;
if (currentPage2 > PageCount) currentPage2 = PageCount;
CurrentPage = currentPage2;
break; case "Last":
CurrentPage = PageCount;
break; default: // 直接回传数字的情况
CurrentPage = int.Parse(e.CommandArgument.ToString());
break;
}
DataBind();
}
} // event bubbling.
protected void rptPageNumbers_ItemCommand(object sender, RepeaterCommandEventArgs e) {
Repeater rpt = (Repeater)sender;
FormViewCommandEventHandler handler = formView1_ItemCommand;
handler(formView1, new FormViewCommandEventArgs(rpt, e));
}
protected override void OnDataBinding(EventArgs e) {
base.OnDataBinding(e); BindList();
} #region 分页属性 /// <summary>
/// 中间显示的页码最大数目
/// </summary>
public int NumbersCount {
get {
return (ViewState["NumbersCount"] == null) ?
10 : (int)ViewState["NumbersCount"];
}
set {
ViewState["NumbersCount"] = value;
}
} /// <summary>
/// 页大小
/// </summary>
public int PageSize {
get {
return (ViewState["PageSize"] == null) ?
10 : (int)ViewState["PageSize"];
}
set {
ViewState["PageSize"] = value;
}
} /// <summary>
/// 总页数
/// </summary>
protected int PageCount {
get {
return (ViewState["PageCount"] == null) ?
1 : (int)ViewState["PageCount"];
}
set { ViewState["PageCount"] = value; }
} /// <summary>
/// 总记录数
/// </summary>
protected int RecordCount {
get {
return (ViewState["RecordCount"] == null) ?
1 : (int)ViewState["RecordCount"];
}
set { ViewState["RecordCount"] = value; }
} /// <summary>
/// 当前页
/// </summary>
protected int CurrentPage {
get {
return (ViewState["CurrentPage"] == null) ?
1 : (int)ViewState["CurrentPage"];
}
set { ViewState["CurrentPage"] = value; }
}
#endregion private void BindList() {
PagedDataSource pds = new PagedDataSource();
pds.DataSource = DataSource.DefaultView; pds.AllowPaging = true;
pds.PageSize = PageSize; pds.CurrentPageIndex = CurrentPage - 1; PageCount = pds.PageCount;
RecordCount = DataSource.Rows.Count; // 方法1:引发分页事件
//
//PageIndexChangedEventArgs e = new PageIndexChangedEventArgs();
//e.PagedDataSource = pds;
//OnPageIndexChanged(e); // 方法2:用反射(限制了被分页的控件必须有 DataSource 属性)
//
Control c = this.NamingContainer.FindControl(ControlToBePaged);
if (c == null)
throw new Exception("没有设置要分页的控件");
PropertyInfo pi = c.GetType().GetProperty("DataSource");
if(pi == null)
throw new Exception("目标控件没有 DataSource 属性");
pi.SetValue(c, pds, null);
c.DataBind();
} // 方法1 的相关代码:
//public event EventHandler<PageIndexChangedEventArgs> PageIndexChanged
//{
// add
// {
// Events.AddHandler(PageIndexChangedEvent, value);
// }
// remove
// {
// Events.RemoveHandler(PageIndexChangedEvent, value);
// }
//} //private static object PageIndexChangedEvent = new object(); //public void OnPageIndexChanged(PageIndexChangedEventArgs e)
//{
// EventHandler<PageIndexChangedEventArgs> handler = Events[PageIndexChangedEvent]
// as EventHandler<PageIndexChangedEventArgs>; // if (handler != null)
// {
// handler(this, e);
// }
//}
} //public class PageIndexChangedEventArgs : EventArgs
//{
// private PagedDataSource _pds; // public PagedDataSource PagedDataSource
// {
// get { return _pds; }
// set { _pds = value; }
// }
//}
}