gridview分页
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了gridview分页相关的知识,希望对你有一定的参考价值。
我想实现这样一个效果
是自定义控件
prv12345next
点next时显示prv678910next,
谁能帮下忙,给一个范例程式啊
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="GvPageSet.ascx.cs" Inherits="Control_GvPageSet" %>
<div style="text-align:right; width:100%;background-color:#c6d7ef">
<table cellpadding="0" cellspacing="0">
<tr>
<td style="width: 200px; text-align: right">
<asp:Label ID="Label1" runat="server" Text="当前页:"></asp:Label><asp:Label ID="lblCurrentInfo"
runat="server">1</asp:Label> <asp:Label ID="Label2" runat="server" Text="共"></asp:Label><asp:Label ID="lblCount"
runat="server">1</asp:Label><asp:Label ID="Label3" runat="server" Text="页"></asp:Label><asp:Label
ID="lblTotalNum" runat="server">5</asp:Label><asp:Label ID="Label5" runat="server" Text="条"></asp:Label>
</td>
<td style="width: 33px">
<asp:LinkButton ID="lbtnFirst" runat="server" OnClick="PageIndex_Changed">首页</asp:LinkButton></td>
<td style="width: 50px">
<asp:LinkButton ID="lbtnPrev" runat="server" OnClick="PageIndex_Changed">上一页</asp:LinkButton></td>
<td style="width: 50px">
<asp:LinkButton ID="lbtnNext" runat="server" OnClick="PageIndex_Changed">下一页</asp:LinkButton></td>
<td style="width: 33px">
<asp:LinkButton ID="lbtnLast" runat="server" OnClick="PageIndex_Changed">末页</asp:LinkButton></td>
</tr>
</table></div>
------------------
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.htmlControls;
using System.ComponentModel;
using System.Data.OleDb;
public partial class Control_GvPageSet : System.Web.UI.UserControl
#region Properties
[BrowsableAttribute(true)]
[DescriptionAttribute("要绑定数据的GridView.ID")]
[DefaultValueAttribute("")]
[CategoryAttribute("Appearance")]
public string gvID
get
return (ViewState["gvID"] == null) ? "" : ViewState["gvID"].ToString();
set
ViewState["gvID"] = value;
[BrowsableAttribute(true)]
[DescriptionAttribute("每一页显示的行数,默认每页10条")]
[DefaultValueAttribute("")]
[CategoryAttribute("Appearance")]
public int PageSize
get
return (ViewState["PageSize"] == null) ? 10 : Convert.ToInt32(ViewState["PageSize"]);
set
ViewState["PageSize"] = value;
[BrowsableAttribute(true)]
[DescriptionAttribute("要从中读取数据的DataTable.Name")]
[DefaultValueAttribute("")]
[CategoryAttribute("Data")]
public string TableName
get
return (ViewState["TableName"] == null) ? "" : ViewState["TableName"].ToString();
set
ViewState["TableName"] = value;
[BrowsableAttribute(true)]
[DescriptionAttribute("要从中读取数据的DataTable.Name")]
[DefaultValueAttribute("")]
[CategoryAttribute("Data")]
public string OrderBy
get
return (ViewState["OrderBy"] == null) ? "" : ViewState["OrderBy"].ToString();
set
ViewState["OrderBy"] = value;
[BrowsableAttribute(true)]
[DescriptionAttribute("读取数据的Sql语句,多表 联合查询")]
[DefaultValueAttribute("")]
[CategoryAttribute("Data")]
public string Sql
get
return (ViewState["Sql"] == null) ? "" : ViewState["Sql"].ToString();
set
ViewState["Sql"] = value;
[BrowsableAttribute(true)]
[DescriptionAttribute("过滤条件,可以为空")]
[DefaultValueAttribute("")]
[CategoryAttribute("Data")]
public string FilterString
get
return (ViewState["FilterString"] == null) ? "" : ViewState["FilterString"].ToString();
set
ViewState["FilterString"] = value;
[BrowsableAttribute(false)]
[DescriptionAttribute("当前页数")]
[DefaultValueAttribute("")]
public int CurrentInfo
get
return Convert.ToInt32(lblCurrentInfo.Text.Trim());
#endregion
OleDbConnection conn = new OleDbConnection(System.Configuration.ConfigurationManager.ConnectionStrings["Access"].ConnectionString);
OleDbCommand comm = new OleDbCommand();
string sql = "";
protected override void OnInit(EventArgs e)
this.Visible = false;
protected void Page_Load(object sender, EventArgs e)
if (!Page.IsPostBack)
//this.lbtnPrev.Enabled = false;
//this.lblCurrentInfo.Text = "1";
/// <summary>
/// 绑定GridView控件,供页面调用
/// </summary>
public void BindGridView()
GetPageNum();
//this.Visible = false;
this.lbtnPrev.Enabled = false;
this.lblCurrentInfo.Text = "1";
BindGV();
/// <summary>
/// 绑定GridView控件,供页面调用
/// </summary>
/// <param name="currentInfo">要显示的当前页</param>
public void BindGridView(int currentInfo)
GetPageNum();
//this.Visible = false;
this.lbtnPrev.Enabled = false;
this.lblCurrentInfo.Text = currentInfo.ToString();
BindGV();
/// <summary>
/// 获取结果总数目和总页数
/// </summary>
/// <returns>总页数</returns>
public int GetPageNum()
sql = "";
sql += "select count(*) from ( ";
sql += Sql;
sql += FilterString + ") as a " ;
comm.CommandText = sql;
comm.Connection = conn;
conn.Open();
int TotalNum = Convert.ToInt32(comm.ExecuteScalar());
conn.Close();
lblTotalNum.Text = TotalNum.ToString();
int pageNum = Convert.ToInt32(Math.Ceiling(Convert.ToDouble((double)TotalNum / PageSize)));
lblCount.Text = pageNum.ToString();
return TotalNum;
#region 按钮处理事件
/**/
/// <summary>
/// 按钮处理事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
public void PageIndex_Changed(object sender, EventArgs e)
LinkButton linkbtn = (LinkButton)sender;
switch (linkbtn.ID.Trim())
case "lbtnFirst":
this.lblCurrentInfo.Text = "1";
BindGV();
break;
case "lbtnPrev":
this.lblCurrentInfo.Text = (Convert.ToInt32(this.lblCurrentInfo.Text) - 1).ToString();
BindGV();
break;
case "lbtnNext":
this.lblCurrentInfo.Text = (Convert.ToInt32(this.lblCurrentInfo.Text) + 1).ToString();
BindGV();
break;
case "lbtnLast":
this.lblCurrentInfo.Text = this.lblCount.Text;
BindGV();
break;
SetBtnState();
private void SetBtnState()
if (Convert.ToInt32(this.lblCurrentInfo.Text) >= Convert.ToInt32(this.lblCount.Text) && Convert.ToInt32(this.lblCurrentInfo.Text) <= 1)
this.lbtnPrev.Enabled = false;
this.lbtnNext.Enabled = false;
this.lbtnFirst.Enabled = false;
this.lbtnLast.Enabled = false;
else if (Convert.ToInt32(this.lblCurrentInfo.Text) >= Convert.ToInt32(this.lblCount.Text))
this.lbtnPrev.Enabled = true;
this.lbtnNext.Enabled = false;
this.lbtnFirst.Enabled = true;
this.lbtnLast.Enabled = false;
else if (Convert.ToInt32(this.lblCurrentInfo.Text) <= 1)
this.lbtnPrev.Enabled = false;
this.lbtnNext.Enabled = true;
this.lbtnFirst.Enabled = false;
this.lbtnLast.Enabled = true;
else
this.lbtnPrev.Enabled = true;
this.lbtnNext.Enabled = true;
this.lbtnFirst.Enabled = true;
this.lbtnLast.Enabled = true;
#endregion
/// <summary>
/// 获取数据绑定GridView
/// </summary>
private void BindGV()
int lower, upper;
int currentPage = Convert.ToInt32(lblCurrentInfo.Text.Trim());
lower = (currentPage - 1) * PageSize;
upper = lower + PageSize;
DataTable dt = new DataTable();
sql = "";
sql += "select top " + PageSize.ToString() + " * from (" + Sql + FilterString + OrderBy + ") as a ";
if(lower > 0)
sql += " where ID not in (select top " + lower.ToString() + " ID from (" + Sql + FilterString + OrderBy + ") as b)";
comm.CommandText = sql;
comm.Connection = conn;
OleDbDataAdapter da = new OleDbDataAdapter(comm);
conn.Open();
da.Fill(dt);
conn.Close();
if (dt.Rows.Count == 0)
this.Visible = false;
else
this.Visible = true;
GridView gv = (GridView)Page.FindControl(gvID);
gv.DataSource = dt;
gv.DataBind();
SetBtnState();
【拿不拿分不要紧,希望某些人不要昧着良心来骗分
骗分是小,误导所有关心这问题的人是大
我不是为了分而来,但最后很多人愿意把分给我!
谢谢各位,让我成为上升最快达人!】 参考技术A <asp:datagrid PageSize="10" AllowPaging="true" PagerStyle-Mode="numericpages" ID="info" runat="server">
推荐你看看.net类库参考里的System.Web.UI.WebControls.DataGrid类的方法、属性和事件的说明
Gridview 分页 ASP.NET 与 Gridview 外部的分页器面板
【中文标题】Gridview 分页 ASP.NET 与 Gridview 外部的分页器面板【英文标题】:Gridview Paging ASP.NET with Pager Panel outside Gridview 【发布时间】:2014-09-16 20:23:14 【问题描述】:这是我第一次使用 ASP.NET 开发网站。
我想在具有分页功能的 GridView 中显示我的数据库中的数据,我可以使用 OnPageIndexChanging="GridView1_PageIndexChanging"
来实现它,但我想使用自己的寻呼机,所以问题是
“如何将我的寻呼机(图片中的右下角)链接到 gridview 而不是由 ASP.NET 生成的寻呼机”
图片:
这是我在 aspx 中的代码
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false" CssClass="table table-bordered table-condensed table-striped table-primary table-vertical-center"
PageSize="3" AllowPaging="True"
OnPageIndexChanging="GridView1_PageIndexChanging">
<Columns>
<asp:BoundField DataField="UNIT_ID" HeaderText="รหัส" SortExpression="unitid">
<HeaderStyle CssClass="center" />
<ItemStyle Width="10%" CssClass="center" />
</asp:BoundField>
</Columns>
</asp:GridView>
</ContentTemplate>
</asp:UpdatePanel>
cs 中的代码
public partial class _Default : Page
protected void Page_Load(object sender, EventArgs e)
if (!IsPostBack)
bindGridView();
protected void bindGridView()
string sqltxt = "select * from drug_units"; //where UNIT_ID =:unitid";
CommandData comm = new CommandData();
comm.SetCommandText(sqltxt);
//comm.AddInputParameter("unitid", "5");
List<DrugsUnit> dy = new List<DrugsUnit>();
comm.ExecuteNonQuery();
dy = comm.ExecuteToList<DrugsUnit>();
GridView1.DataSource = dy;
/*BoundField boundField = new BoundField();
boundField.DataField = "UNIT_ID";
boundField.HeaderText = "ID";
boundField.SortExpression = "ID";
boundField.HeaderStyle.CssClass = "center";
boundField.ItemStyle.CssClass = "center";
GridView1.Columns.Add(boundField);*/
GridView1.DataBind();
GridView1.HeaderRow.TableSection = TableRowSection.TableHeader;
protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
GridView1.PageIndex = e.NewPageIndex;
bindGridView();
【问题讨论】:
您可以通过中继器使用外部寻呼机,请参阅[这篇文章][1] [1]:***.com/questions/9534463/gridview-external-paging 【参考方案1】:protected void GridView_RowDataBound(object sender, GridViewRowEventArgs e)
if (e.Row.RowType == DataControlRowType.Pager)
upGridPager.Update();
e.Row.SetRenderMethodDelegate(new RenderMethod((w, r) =>
e.Row.SetRenderMethodDelegate(null);
using (var ms = new StringWriter())
using (var writer = new HtmlTextWriter(ms))
e.Row.RenderControl(writer);
GridPager.InnerHtml = "<table>" + ms.ToString() + "</table>";
));
aspx
可能看起来像这样(在您的网格之外)
<asp:UpdatePanel ID="upGridPager" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<div runat="server" id="GridPager" />
</ContentTemplate>
</asp:UpdatePanel>
【讨论】:
以上是关于gridview分页的主要内容,如果未能解决你的问题,请参考以下文章
Gridview 分页 ASP.NET 与 Gridview 外部的分页器面板