从我读过的一切中,似乎添加到ListView控件的分页应该是简单的,但它不适用于我。将ListView和DataPager控件添加到表单并将其连接在一起后,我变得非常奇怪的行为。 DataPager正确地限制了ListView的页面大小,但是单击分页按钮根本不会影响ListView。寻呼按钮似乎认为他们正在做他们的工作,因为最后一个按钮被禁用,当你去最后一页等,但是ListView从不改变。此外,DataPager需要两次点击即可使其执行任何操作,即单击“上一次”不执行任何操作,但再次单击将导致DataPager反应,就像最后一页现在被选中一样。
我唯一可以想到的是,我在运行时绑定DataSource(到一个LINQ对象),不使用LinqDataSource控件或任何东西。有没有人看到这个行为?我做错了吗?这是我使用的代码:
<asp:DataPager ID="HistoryDataPager" runat="server" PagedControlID="HistoryListView" PageSize="10"> <Fields> <asp:NextPrevIoUsPagerField ButtonType="Button" ShowFirstPageButton="true" ShowLastPageButton="true" /> </Fields> </asp:DataPager> <asp:ListView ID="HistoryListView" runat="server"> ... </asp:ListView>
在代码隐藏中:
Protected Sub Page_Load(ByVal sender As Object,ByVal e As System.EventArgs) Handles Me.Load If Not IsPostBack Then HistoryListView.DataSource = From x in myContext.myTables ... DataBind() End If End Sub
解决方法
看看ListViewPagedDataSource。
private ListViewPagedDataSource GetProductsAsPagedDataSource(DataView dv) { // Limit the results through a PagedDataSource ListViewPagedDataSource pagedData = new ListViewPagedDataSource(); pagedData.DataSource = dv; pagedData.MaximumRows = dv.Table.Rows.Count; pagedData.TotalRowCount = dpTop.PageSize; if (Request.QueryString[dpTop.QueryStringField] != null) pagedData.StartRowIndex = (Convert.ToInt32(Request.QueryString[dpTop.QueryStringField]) - 1) * dpTop.PageSize; else pagedData.StartRowIndex = 0; return pagedData; }