我正在尝试使用自定义分页创建GridView。我有非常大的数据,所以为了提高十速,我正在尝试自定义分页。
我编写了一个SQL Server存储过程,它接受输入参数SelectedPageNumber
,SelectedPageSize
,并为DataTable
填充属于特定页面的结果行。存储过程还有MaxPageNumber
作为输出参数。
我能够将页面数据绑定到GridView,但我无法弄清楚如何显示最多为MaxPageNumber
值的页码作为存储过程。
我正在使用.Net Framework 4.0
可能是重复但我找不到解决方案。
你能救我吗?
答案 0 :(得分:4)
你可以使用Repeater
控件创建一个寻呼机,像这样的东西
// These are your outputs from that SP
int MaxPageNumber = 10,
CurrentPageNumber = 4;
void BindPager()
{
DataTable PagerData = new DataTable();
PagerData.Columns.Add("pageNo");
for (int i = 1; i < MaxPageNumber; i++)
PagerData.Rows.Add(i);
pager.DataSource = PagerData;
pager.DataBind();
}
<asp:Repeater runat="server" ID="pager" onitemcommand="pager_ItemCommand"
onitemdatabound="pager_ItemDataBound">
<ItemTemplate>
<asp:Button runat="server" ID="pageNo"
Text='<%# Eval("pageNo") %>'
CommandArgument='<%# Eval("pageNo") %>'
CommandName="DoPaging" />
</ItemTemplate>
</asp:Repeater>
protected void pager_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
// Code to highlight current page
if (e.Item.ItemType == ListItemType.Item ||
e.Item.ItemType == ListItemType.AlternatingItem)
{
Button pageNo = e.Item.FindControl("pageNo") as Button;
if (pageNo == null) return;
if (pageNo.Text == CurrentPageNumber.ToString())
pageNo.BackColor = Color.Blue;
else
pageNo.BackColor = Color.Gray;
}
}
protected void pager_ItemCommand(object source, RepeaterCommandEventArgs e)
{
// perform your paging here according to page number
}
答案 1 :(得分:0)
要显示页码,您可以创建从MinPageNumber到MaxPageNumber的整数列表,将列表绑定到Repeater-Control作为DataSource,并让Repeater显示每个页码。您可能需要重新创建该列表,具体取决于当前页码。
答案 2 :(得分:0)
如果您使用自定义分页,则必须创建自定义页面控件以显示页码。您可以将自定义寻呼机放在gridview下面,并在页面上的click事件中重新绑定网格。