ListView与DataPager无法正常工作

gfr*_*zle 19 vb.net asp.net paging listview

从我读过的所有内容来看,向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>
Run Code Online (Sandbox Code Playgroud)

在代码隐藏中:

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
Run Code Online (Sandbox Code Playgroud)

Sya*_*yam 30

我们需要在OnPreRender事件中再次对数据列表视图进行数据绑定.

protected override void OnPreRender(EventArgs e)
        {
            ListView1.DataBind();
            base.OnPreRender(e);
        }
Run Code Online (Sandbox Code Playgroud)

--update

在使用asp.net ajax处理一些列表视图后,我看到了一个比上面的解决方案更有意义的解决方案.您通常会在页面加载方法或按钮单击事件处理程序上绑定Listview数据,当有回发时,数据绑定将如上所述在问题中丢失.因此,我们需要在列表视图的页面属性更改事件处理程序上再次进行数据绑定.

ListView_PagePropertiesChanged(object sender, EventArgs e)
{
ListView.DataSource=someDatasource;
ListView.DataBind()
}
Run Code Online (Sandbox Code Playgroud)


Mar*_*nHN 1

看一下 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;
}
Run Code Online (Sandbox Code Playgroud)

不过,我在查看最后一页时遇到了问题。DataPager跳回第一页,但显示的数据是最后一页。