C# 具有所需寻呼机样式的Gridview分页的自定义页码
我正在实现一项功能,即在gridview中显示记录,不是根据默认页码,而是根据部门编号。例如 我有20个系,其中有学生,所以我想显示系标识符,即D1、D2、D3。。。作为一个页码,点击该系的学生将被加载到网格中 我想像所附的图片一样分页,点击页码中的“…”应该可以转到下一组页码。C# 具有所需寻呼机样式的Gridview分页的自定义页码,c#,asp.net,gridview,C#,Asp.net,Gridview,我正在实现一项功能,即在gridview中显示记录,不是根据默认页码,而是根据部门编号。例如 我有20个系,其中有学生,所以我想显示系标识符,即D1、D2、D3。。。作为一个页码,点击该系的学生将被加载到网格中 我想像所附的图片一样分页,点击页码中的“…”应该可以转到下一组页码。 如何为asp.net gridview实现这种分页?它将使用“下一步”和“上一步”按钮对记录进行分页。Label控件将在分页的GridView中显示我们的当前位置。让我们首先设置一些变量 protected int
如何为asp.net gridview实现这种分页?它将使用“下一步”和“上一步”按钮对记录进行分页。Label控件将在分页的GridView中显示我们的当前位置。让我们首先设置一些变量
protected int currentPageNumber = 1;
private const int PAGE_SIZE = 10;
currentPageNumber表示GridView的当前页面,page_SIZE表示每页上显示的记录总数。您还可以允许用户使用DropDownList调整页面大小,但这在本文中没有介绍
接下来,我们需要将数据源绑定到GridView。让我们整体检查BindData方法,稍后我将对其进行剖析,以便您有更好的想法
private void BindData()
{
string connectionString = "Server=localhost;" +
"Database=Northwind;Trusted_Connection=true";
SqlConnection myConnection = new SqlConnection(connectionString);
SqlCommand myCommand = new SqlCommand("usp_GetProducts",
myConnection);
myCommand.CommandType = CommandType.StoredProcedure;
myCommand.Parameters.AddWithValue("@startRowIndex",
currentPageNumber);
myCommand.Parameters.AddWithValue("@maximumRows", PAGE_SIZE);
myCommand.Parameters.Add("@totalRows", SqlDbType.Int, 4);
myCommand.Parameters["@totalRows"].Direction =
ParameterDirection.Output;
SqlDataAdapter ad = new SqlDataAdapter(myCommand);
DataSet ds = new DataSet();
ad.Fill(ds);
gvProducts.DataSource = ds;
gvProducts.DataBind();
// get the total rows
double totalRows = (int)myCommand.Parameters["@totalRows"].Value;
lblTotalPages.Text = CalculateTotalPages(totalRows).ToString();
lblCurrentPage.Text = currentPageNumber.ToString();
if (currentPageNumber == 1)
{
Btn_Previous.Enabled = false;
if (Int32.Parse(lblTotalPages.Text) > 0)
{
Btn_Next.Enabled = true;
}
else
Btn_Next.Enabled = false;
}
else
{
Btn_Previous.Enabled = true;
if (currentPageNumber == Int32.Parse(lblTotalPages.Text))
Btn_Next.Enabled = false;
else Btn_Next.Enabled = true;
}
}
现在,让我们更详细地看看上面的代码。我正在将currentPageNumber和PageU大小发送到数据库中,以便获取当前页面的数据。totalRows变量返回表中的行总数。一旦我有了totalRows,我就会计算这个GridView将使用的页面总数。使用小辅助函数计算总页数:
private int CalculateTotalPages(double totalRows)
{
int totalPages = (int) Math.Ceiling(totalRows / PAGE_SIZE);
return totalPages;
}
在BindData方法的末尾,有一些条件检查可以确保下一个和上一个按钮仅在适用时显示
将事件附加到按钮
剩下的最后一件事是将事件附加到按钮控件。查看以下代码,我在其中创建了两个按钮控件
<asp:Button ID="Btn_Previous" CommandName="Previous"
runat="server" OnCommand="ChangePage"
Text="Previous" />
<asp:Button ID="Btn_Next" runat="server" CommandName="Next"
OnCommand="ChangePage" Text="Next" />
ChangePage事件用于更改GridView的页码,并通过调用BindData方法更新标签文本
谢谢Vignesh,但我看不到D1、D2的处理方式。。这里处理的D12页码,可能是我遗漏了一些部分,请你解释一下如何处理,这是我面临的一个主要问题。
// This method will handle the navigation/ paging index
protected void ChangePage(object sender, CommandEventArgs e)
{
switch (e.CommandName)
{
case "Previous":
currentPageNumber = Int32.Parse(lblCurrentPage.Text) - 1;
break;
case "Next":
currentPageNumber = Int32.Parse(lblCurrentPage.Text) + 1;
break;
}
BindData();
}