使用存储过程在ASP Gridview中自定义分页

时间:2012-10-22 07:16:48

标签: c# asp.net gridview custompaging

我正在尝试使用自定义分页创建GridView。我有非常大的数据,所以为了提高十速,我正在尝试自定义分页。

我编写了一个SQL Server存储过程,它接受输入参数SelectedPageNumberSelectedPageSize,并为DataTable填充属于特定页面的结果行。存储过程还有MaxPageNumber作为输出参数。

我能够将页面数据绑定到GridView,但我无法弄清楚如何显示最多为MaxPageNumber值的页码作为存储过程。

我正在使用.Net Framework 4.0

可能是重复但我找不到解决方案。

你能救我吗?

3 个答案:

答案 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事件中重新绑定网格。