And*_*ech 25 c# asp.net listview datapager
采用以下示例...一个带有a ListView和a 的页面,DataPager用于分页ListView:
代码背后:
protected void Page_Load(object sender, EventArgs e)
{
MyList.DataSource = GetSomeList();
MyList.DataBind();
}
Run Code Online (Sandbox Code Playgroud)
资源:
<asp:ListView ID="MyList" runat="server">
<% //LayoutTemplate and ItemTemplate removed for the example %>
</asp:ListView>
<asp:DataPager ID="ListPager" PagedControlID="MyList" runat="server" PageSize="10">
<Fields>
<asp:NumericPagerField />
</Fields>
</asp:DataPager>
Run Code Online (Sandbox Code Playgroud)
问题DataPager在于它始终是绑定的后盾.
例如,当页面加载它在页码1时.然后当您单击第3页时,它在回发后保留在第1页.然后你点击第5页,在回发后它在第3页找到自己...然后你点击第6页,它在第5页找到自己......依此类推.
为什么分页不按预期工作?
And*_*ech 33
问题是由于Page_Load事件发生了绑定.
对于这项工作如预期,结合需求在发生DataPager的OnPreRender事件,而不是在Page_Load.
资源:
<asp:DataPager ID="ListPager" PagedControlID="MyList" runat="server" PageSize="10"
OnPreRender="ListPager_PreRender">
<Fields>
<asp:NumericPagerField />
</Fields>
</asp:DataPager>
Run Code Online (Sandbox Code Playgroud)
代码背后:
protected void Page_Load(object sender, EventArgs e)
{
//Binding code moved from Page_Load
//to the ListView's PreRender event
}
protected void ListPager_PreRender(object sender, EventArgs e)
{
MyList.DataSource = GetSomeList();
MyList.DataBind();
}
Run Code Online (Sandbox Code Playgroud)
我遇到了同样的问题,但每次在datapager prerender上绑定对我来说都不是一个选择.相反,我只能在发生分页时通过绑定完成同样的事情.该解决方案可用作Andreas的预渲染解决方案的替代方案.以下对我有用:
通过附加到ListView的PagePropertiesChanged事件,我能够纠正分页问题,而无需绑定数据寻呼机的每个预渲染器.
注意:大多数数据分页器属性都是在外观文件中设置的,这就是它们不在标记中的原因.
标记:
<asp:DataPager ID="ListPager" runat="server" PagedControlID="MyList" />
<asp:ListView ID="MyList" runat="server">
<% //LayoutTemplate and ItemTemplate removed for the example %>
</asp:ListView>
Run Code Online (Sandbox Code Playgroud)
代码背后:
protected void Page_Load(object sender, EventArgs e) {
MyList.PagePropertiesChanged += new EventHandler(MyList_PagePropertiesChanged);
}
/// <summary>
/// Handles the situation where the page properties have changed. Rebind the data
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void MyList_PagePropertiesChanged(object sender, EventArgs e) {
MyList.DataSource = GetSomeList();
MyList.DataBind();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
27217 次 |
| 最近记录: |