对GridView实现分页
前台代码:
<table> <tr> <td> <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"> <Columns> <asp:BoundField DataField="Id" HeaderText="编号" /> <asp:BoundField DataField="NewsTitle" HeaderText="标题" /> <asp:BoundField DataField="NewsContent" HeaderText="内容" /> <asp:BoundField DataField="RealName" HeaderText="创建者" /> <asp:BoundField DataField="CreateTime" DataFormatString="{0:yyyy-mm-dd hh:mm:ss}" HeaderText="创建时间" /> <asp:BoundField DataField="ClassName" HeaderText="类型" /> </Columns> </asp:GridView> </td> </tr> <tr> <td> <asp:LinkButton ID="lbtnFirst" runat="server" OnClick="lbtnFirst_Click">第一页</asp:LinkButton> <asp:LinkButton ID="lbtnProc" runat="server" OnClick="lbtnProc_Click">上一页</asp:LinkButton> <asp:LinkButton ID="lbtnNext" runat="server" OnClick="lbtnNext_Click">下一页</asp:LinkButton> <asp:LinkButton ID="lbtnLast" runat="server" OnClick="lbtnLast_Click">最后一页</asp:LinkButton> </td> </tr> </table>
后台代码:
string constr = "data source=.;initial catalog=News;user id=sa;password=111111;"; protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { ViewState["pageIndex"] = 1; DataPage();
} }
private void DataPage() { SqlConnection conn = new SqlConnection(constr); conn.Open(); SqlCommand cmd = conn.CreateCommand(); // string sql = "select T1.Id,T1.NewsTitle,SUBSTRING(T1.NewsContent,0,20) as NewsContent,T2.RealName ,T1.CreateTime,T3.ClassName from T_News1 T1 join T_User T2 on T1.NewsCreator=T2.UserId join T_NewsClass T3 on T1.ClassId=T3.ClassId"; string sql = " select T1.Id,T1.NewsTitle,SUBSTRING(T1.NewsContent,0,20) as NewsContent,T2.RealName,T1.CreateTime,T3.ClassName from (select ROW_NUMBER() over (order by Id) as rownumber,* from T_News) T1 join T_User T2 on T1.NewsCreator=T2.UserId join T_NewsClass T3 on T1.ClassId=T3.ClassId where rownumber>(@pageIndex-1)*@pageSize and rownumber<=@pageIndex*@pageSize"; cmd.Parameters.AddWithValue("@pageSize", 3); cmd.Parameters.AddWithValue("@pageIndex", Convert.ToInt32(ViewState["pageIndex"])); cmd.CommandText = sql; SqlDataAdapter adapter = new SqlDataAdapter(cmd); DataTable dt = new DataTable(); adapter.Fill(dt);
string sql1 = "select count(*) from T_News"; cmd.CommandText = sql1; int i =Convert.ToInt32(cmd.ExecuteScalar()); if (i % 3 == 0) { ViewState["pageCount"] = i / 3; } else { ViewState["pageCount"] = i / 3+1; } conn.Close(); conn.Dispose();
GridView1.DataSource = dt; GridView1.DataBind(); }
protected void lbtnFirst_Click(object sender, EventArgs e) { ViewState["pageIndex"] = 1; DataPage(); }
protected void lbtnProc_Click(object sender, EventArgs e) { int i=Convert.ToInt32(ViewState["pageIndex"]) ; if (i>1) { i--; ViewState["pageIndex"] = i; DataPage(); } }
protected void lbtnNext_Click(object sender, EventArgs e) { int i = Convert.ToInt32(ViewState["pageIndex"]); if (i <Convert.ToInt32(ViewState["pageCount"])) { i++; ViewState["pageIndex"] = i; DataPage(); } }
protected void lbtnLast_Click(object sender, EventArgs e) { ViewState["pageIndex"] = ViewState["pageCount"]; DataPage(); }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构