GRIDVIEW两种分页代码
- 格式:rtf
- 大小:46.19 KB
- 文档页数:9
GridView分页的实现以及⾃定义分页样式功能实例GridView分页的实现复制代码代码如下:要在GridView中加⼊//实现分页AllowPaging="true"//⼀页数据10⾏PageSize="10"// 分页时触发的事件OnPageIndexChanging="gvwDesignationName_PageIndexChanging"在服务器事件⾥复制代码代码如下:protectedvoid gvwDesignationName_PageIndexChanging(object sender, GridViewPageEventArgs e){gvwDesignationName.PageIndex=e.newIndex;bingDesignatioonName();}这⾥我给出⼀个通⽤显⽰分页的模板(⽹上搜的,⾃⼰给出注释)复制代码代码如下:<PagerTemplate>当前第://((GridView)Container.NamingContainer)就是为了得到当前的控件<asp:Label ID="LabelCurrentPage" runat="server" Text="<%# ((GridView)Container.NamingContainer).PageIndex + 1 %>"> </asp:Label>页/共://得到分页页⾯的总数<asp:Label ID="LabelPageCount" runat="server" Text="<%# ((GridView)Container.NamingContainer).PageCount %>"></asp:Label>页//如果该分页是⾸分页,那么该连接就不会显⽰了.同时对应了⾃带识别的命令参数CommandArgument<asp:LinkButton ID="LinkButtonFirstPage" runat="server" CommandArgument="First" CommandName="Page"Visible='<%#((GridView)Container.NamingContainer).PageIndex != 0 %>'>⾸页</asp:LinkButton><asp:LinkButton ID="LinkButtonPreviousPage" runat="server" CommandArgument="Prev"CommandName="Page" Visible='<%# ((GridView)Container.NamingContainer).PageIndex != 0 %>'>上⼀页</asp:LinkButton>//如果该分页是尾页,那么该连接就不会显⽰了<asp:LinkButton ID="LinkButtonNextPage" runat="server" CommandArgument="Next" CommandName="Page"Visible='<%# ((GridView)Container.NamingContainer).PageIndex != ((GridView)Container.NamingContainer).PageCount - 1 %>'>下⼀页</asp:LinkButton><asp:LinkButton ID="LinkButtonLastPage" runat="server" CommandArgument="Last" CommandName="Page"Visible='<%# ((GridView)Container.NamingContainer).PageIndex != ((GridView)Container.NamingContainer).PageCount - 1 %>'>尾页</asp:LinkButton>转到第<asp:TextBox ID="txtNewPageIndex" runat="server" Width="20px" Text='<%#((GridView)Container.Parent.Parent).PageIndex + 1 %>' />页//这⾥将CommandArgument即使点击该按钮e.newIndex 值为3<asp:LinkButton ID="btnGo" runat="server" CausesValidation="False" CommandArgument="-2"CommandName="Page" Text="GO" /></PagerTemplate>对应该事件中代码为复制代码代码如下:protected void gvwDesignationName_PageIndexChanging(object sender, GridViewPageEventArgs e){// 得到该控件GridView theGrid = sender as GridView;int newPageIndex = 0;if (e.NewPageIndex==-3){//点击了Go按钮TextBox txtNewPageIndex = null;//GridView较DataGrid提供了更多的API,获取分页块可以使⽤BottomPagerRow 或者TopPagerRow,当然还增加了HeaderRow和FooterRowGridViewRow pagerRow = theGrid.BottomPagerRow;if (pagerRow != null){//得到text控件txtNewPageIndex = pagerRow.FindControl("txtNewPageIndex") as TextBox;}if ( txtNewPageIndex!= null){//得到索引newPageIndex = int.Parse(txtNewPageIndex.Text) - 1;}}else{//点击了其他的按钮newPageIndex = e.NewPageIndex;}//防⽌新索引溢出newPageIndex = newPageIndex < 0 ? 0 : newPageIndex;newPageIndex = newPageIndex >= theGrid.PageCount ? theGrid.PageCount - 1 : newPageIndex;//得到新的值theGrid.PageIndex = newPageIndex;//重新绑定bingDesignatioonName();}。
GridView⾼效分页和搜索功能的实现代码前⾔:公司项⽬开发,上周的任务是做基础数据的管理。
在Sharepoint2010⾥边内嵌的aspx页,遇到了各种各样奇葩的问题,因为之前对sharepoint只是有⼀些了解,但是没有设计到具体的编程⼯作,这⼀次算是初次接触吧。
其中有⼀部分基础数据数据量很⼤,⼤致有⼗多万,因为是对基础数据的维护,所以还需要对数据进⾏列表展⽰,增删改查什么的,⼤家都知道⾥边的GridView有⾃带的分页,但是,那个分页对于少量的数据还好,对于这种数⼗万的数据量⽽⾔,这种分页⽅式简直就是灾难。
⽹上关于GridView⾼效分页的东西有很多,找了⼀个⾃⼰改了改。
⽤着效果还不错,和⼤家分享⼀下。
这是分页的效果图下边就讲⼀下具体的实现,⾸先声明,这个东西是不是我原创的,只是在此基础上进⾏了修饰和完善。
希望能给各位有所启发。
⼀、前台布局复制代码代码如下:<div><div id="main"><div id="search"><table><tr><td><asp:Label ID="lb" runat="server" Text="姓名"></asp:Label></td><td><asp:TextBox ID="SearchName" runat="server"></asp:TextBox></td><td><asp:Button ID="btnSearch" runat="server" Text="查询" onclick="PagerBtnCommand_OnClick" CommandName="search" /></td><td><asp:Button ID="btnReset" runat="server" Text="重置" onclick="btnReset_Click" /></td></tr></table></div><div id="gridView"><asp:GridView ID="UserGridView" runat="server" AutoGenerateColumns="false"><Columns><asp:TemplateField HeaderText="⽤户名"><ItemTemplate><asp:Label ID="UserName" runat="server" Text='<%#Eval("username") %>'></asp:Label></ItemTemplate></asp:TemplateField><asp:TemplateField HeaderText="单位名称"><ItemTemplate><asp:Label ID="DisplayName" runat="server" Text='<%#Eval("displayname") %>'></asp:Label></ItemTemplate></asp:TemplateField><asp:TemplateField HeaderText="组织编码"><ItemTemplate><asp:Label ID="OrgCode" runat="server" Text='<%#Eval("orgcode") %>'></asp:Label></ItemTemplate></asp:TemplateField><asp:TemplateField HeaderText="组织名称"><ItemTemplate><asp:Label ID="OrgName" runat="server" Text='<%#Eval("orgname") %>'></asp:Label></ItemTemplate></asp:TemplateField></Columns></asp:GridView></div><div id="page"><table><tr><td><asp:Label ID="lbcurrentpage1" runat="server" Text="当前页:"></asp:Label><asp:Label ID="lbCurrentPage" runat="server" Text=""></asp:Label><asp:Label ID="lbFenGe" runat="server" Text="/"></asp:Label><asp:Label ID="lbPageCount" runat="server" Text=""></asp:Label></td><td><asp:Label ID="recordscount" runat="server" Text="总条数:"></asp:Label><asp:Label ID="lbRecordCount" runat="server" Text=""></asp:Label></td><td><asp:Button ID="Fistpage" runat="server" CommandName="" Text="⾸页" OnClick="PagerBtnCommand_OnClick" /><asp:Button ID="Prevpage" runat="server" CommandName="prev" Text="上⼀页"OnClick="PagerBtnCommand_OnClick" /><asp:Button ID="Nextpage" runat="server" CommandName="next" Text="下⼀页" OnClick="PagerBtnCommand_OnClick" /><asp:Button ID="Lastpage" runat="server" CommandName="last" Text="尾页"key="last" OnClick="PagerBtnCommand_OnClick" /></td><td><asp:Label ID="lbjumppage" runat="server" Text="跳转到第"></asp:Label><asp:TextBox ID="GotoPage" runat="server" Width="25px"></asp:TextBox><asp:Label ID="lbye" runat="server" Text="页"></asp:Label><asp:Button ID="Jump" runat="server" Text="跳转" CommandName="jump" OnClick="PagerBtnCommand_OnClick" /> </td></tr></table></div></div></div>布局的效果如下:⼆、后台的代码实现我会⼀点⼀点向⼤家讲解清楚,这个分页的原理Members:这⾥主要定义⼏个全局的变量,主要⽤来记录信息的数量、页的数量和当前页复制代码代码如下:#region Membersconst int PAGESIZE = 10;//每页显⽰信息数量int PagesCount, RecordsCount;//记录总页数和信息总条数int CurrentPage, Pages, JumpPage;//当前页,信息总页数(⽤来控制按钮失效),跳转页码const string COUNT_SQL = "select count(*) from p_user";#endregionMethods: 1、GetRecordsCount:该⽅法主要⽤来获取当前信息的总数,有⼀个sqlSearch参数,默认的为default,即初始化页⾯时,查询所有信息的总条数,当⽤户输⼊要搜索的⽤户名进⾏检索时,获取符合⽤户检索条件的信息的总条数复制代码代码如下:/// <summary>/// 获取信息总数/// </summary>/// <param name="sqlSearch"></param>/// <returns></returns>public static int GetRecordsCount(string sqlRecordsCount){string sqlQuery;if (sqlRecordsCount == "default"){sqlQuery = COUNT_SQL;}else{sqlQuery = sqlRecordsCount;}int RecordCount = 0;SqlCommand cmd = new SqlCommand(sqlQuery, Conn());RecordCount = Convert.ToInt32(cmd.ExecuteScalar());cmd.Connection.Close();return RecordCount;}2、OverPage:该⽅法主要⽤来计算剩余页,当前设置的为每页显⽰10条数据,如何符合条件的数据有11条,则要显⽰2页复制代码代码如下:/// <summary>/// 计算余页/// </summary>/// <returns></returns>public int OverPage(){int pages = 0;if (RecordsCount % PAGESIZE != 0)pages = 1;elsepages = 0;return pages;}3、ModPage:该⽅法也是⽤计算余页,主要⽤来防⽌SQL执⾏溢出复制代码代码如下:/// <summary>/// 计算余页,防⽌SQL语句执⾏时溢出查询范围/// </summary>/// <returns></returns>public int ModPage(){int pages = 0;if (RecordsCount % PAGESIZE == 0 && RecordsCount != 0)pages = 1;elsepages = 0;return pages;}4、Conn:该⽅法⽤来创建数据连接对象,在使⽤的时候只需改成⾃⼰的数据库名即可 复制代码代码如下:/// <summary>/// 数据连接对象/// </summary>/// <returns></returns>public static SqlConnection Conn(){SqlConnection conn = new SqlConnection("data source=.;initial catalog=DB_GSL_ZCW;Integrated Security=true"); conn.Open();return conn;}5、GridViewDataBind:该⽅法主要⽤来数据绑定,如果传⼊的参数为default则,默认的绑定所有的数据,否则,则绑定过滤过的数据复制代码代码如下:/// <summary>/// GridView数据绑定,根据传⼊参数的不同,进⾏不同⽅式的查询,/// </summary>/// <param name="sqlSearch"></param>private void GridViewDataBind(string sqlSearch){CurrentPage = (int)ViewState["PageIndex"];//从ViewState中读取页码值保存到CurrentPage变量中进⾏按钮失效运算Pages = (int)ViewState["PagesCount"];//从ViewState中读取总页参数进⾏按钮失效运算//判断四个按钮(⾸页、上⼀页、下⼀页、尾页)状态if (CurrentPage + 1 > 1)//当前页是否为⾸页{Fistpage.Enabled = true;Prevpage.Enabled = true;}else{Fistpage.Enabled = false;Prevpage.Enabled = false;}if (CurrentPage == Pages)//当前页是否为尾页{Nextpage.Enabled = false;Lastpage.Enabled = false;}else{Nextpage.Enabled = true;Lastpage.Enabled = true;}DataSet ds = new DataSet();string sqlResult;//根据传⼊参数sqlSearch进⾏判断,如果为default则为默认的分页查询,否则为添加了过滤条件的分页查询if (sqlSearch == "default"){sqlResult = "Select Top " + PAGESIZE + "user_serialid,username,displayname,orgcode,orgname from p_user where user_serialid not in(select top " + PAGESIZE * CurrentPage + " user_serialid from p_user order by user_serialid asc) order by user_serialid asc";}else{sqlResult = sqlSearch;}SqlDataAdapter sqlAdapter = new SqlDataAdapter(sqlResult, Conn());sqlAdapter.Fill(ds, "Result");UserGridView.DataSource = ds.Tables["Result"].DefaultView;UserGridView.DataBind();//显⽰Label控件lbCurrentPaget和⽂本框控件GotoPage状态lbCurrentPage.Text = (CurrentPage + 1).ToString();GotoPage.Text = (CurrentPage + 1).ToString();sqlAdapter.Dispose();}6、Page_Load:页⾯加载函数,主要是在⾸次进⼊页⾯时,进⾏初始化,默认的获取所有的信息复制代码代码如下:protected void Page_Load(object sender, EventArgs e){if (!IsPostBack)//⾸次进⾏该页时,页⾯初始化{RecordsCount = GetRecordsCount("default");//默认信息总数PagesCount = RecordsCount / PAGESIZE + OverPage();//默认的页总数ViewState["PagesCount"] = RecordsCount / PAGESIZE - ModPage();//保存末页索引,⽐页总数⼩1ViewState["PageIndex"] = 0;//保存页⾯初始索引从0开始ViewState["JumpPages"] = PagesCount;//保存页总数,跳页时判断⽤户输⼊数是否超出页码范围//显⽰lbPageCount、lbRecordCount的状态lbPageCount.Text = PagesCount.ToString();lbRecordCount.Text = RecordsCount.ToString();//判断跳页⽂本框失效if (RecordsCount <= 10){GotoPage.Enabled = false;}GridViewDataBind("default");//调⽤数据绑定函数TDataBind()进⾏数据绑定运算}}7、PagerBtnCommand_OnClick:该⽅法主要⽤来处理设计视图页的“⾸页”、“下⼀页”,“上⼀页”,“尾页”,“查询”按钮的Click 事件,主要通过不同按钮的CommandName属性来分别处理,需要在前台为每⼀个按钮相应的CommandName属性赋值,如果⽤户点击的是“查询”按钮,这个时候需要对查询的Sql语句进⾏重写,加⼊过滤条件,即⽤户输⼊的查询的条件复制代码代码如下:/// <summary>/// 页⾯按钮Click处理/// </summary>/// <param name="sender"></param>/// <param name="e"></param>protected void PagerBtnCommand_OnClick(object sender, EventArgs e){CurrentPage = (int)ViewState["PageIndex"];//从ViewState中读取页码值保存到CurrentPage变量中进⾏参数运算Pages = (int)ViewState["PagesCount"];//从ViewState中读取总页参数运算Button btn = sender as Button;string sqlResult="default";if (btn != null){string cmd = mandName;switch (cmd)//根据不同的CommandName做出不同的处理{case "next":CurrentPage++;break;case "prev":CurrentPage--;break;case "last":CurrentPage = Pages;break;case "search":if (!string.IsNullOrEmpty(SearchName.Text)){RecordsCount = GetRecordsCount("select count(*) from p_user where username like '" + SearchName.Text + "%'");//获取过滤后的总记录数PagesCount = RecordsCount / PAGESIZE + OverPage();//该变量为页总数ViewState["PagesCount"] = RecordsCount / PAGESIZE - ModPage();//该变量为末页索引,⽐页总数⼩1ViewState["PageIndex"] = 0;//保存⼀个为0的页⾯索引值到ViewState,页⾯索引从0开始ViewState["JumpPages"] = PagesCount;//保存PageCount到ViewState,跳页时判断⽤户输⼊数是否超出页码范围//显⽰lbPageCount、lbRecordCount的状态lbPageCount.Text = PagesCount.ToString();lbRecordCount.Text = RecordsCount.ToString();//判断跳页⽂本框失效if (RecordsCount <= 10)GotoPage.Enabled = false;sqlResult = "Select Top " + PAGESIZE + "user_serialid,username,displayname,orgcode,orgname from p_user where user_serialid not in(select top " + PAGESIZE * CurrentPage + " user_serialid from p_user order by user_serialid asc) and username like '" + SearchName.Text + "%' order by user_serialid asc";}else{Response.Write("请输⼊您所要查找的⽤户姓名!");}break;case "jump":JumpPage = (int)ViewState["JumpPages"];//从ViewState中读取可⽤页数值保存到JumpPage变量中//判断⽤户输⼊值是否超过可⽤页数范围值if(Int32.Parse(GotoPage.Text) > JumpPage || Int32.Parse(GotoPage.Text) <= 0)Response.Write("<script>alert('页码范围越界!')</script>");else{int InputPage = Int32.Parse(GotoPage.Text.ToString()) - 1;//转换⽤户输⼊值保存在int型InputPage变量中ViewState["PageIndex"] = InputPage;CurrentPage = InputPage;//写⼊InputPage值到ViewState["PageIndex"]中sqlResult = "Select Top " + PAGESIZE + "user_serialid,username,displayname,orgcode,orgname fromp_user where user_serialid not in(select top " + PAGESIZE * CurrentPage + " user_serialid from p_user order byuser_serialid asc) and username like '" + SearchName.Text + "%' order by user_serialid asc";}break;default:CurrentPage = 0;break;}ViewState["PageIndex"] = CurrentPage;//将运算后的CurrentPage变量再次保存⾄ViewStateGridViewDataBind(sqlResult);//调⽤数据绑定函数TDataBind()}}8、btn_Reset_Click:该⽅法主要⽤来进⾏重置,⽤户完成⼀次查询之后,需要重置,才能进⾏下⼀次的查询操作复制代码代码如下:protected void btnReset_Click(object sender, EventArgs e)(RecordsCount = GetRecordsCount("default");//默认信息总数PagesCount = RecordsCount / PAGESIZE + OverPage();//默认的页总数ViewState["PagesCount"] = RecordsCount / PAGESIZE - ModPage();//保存末页索引,⽐页总数⼩1ViewState["PageIndex"] = 0;//保存页⾯初始索引从0开始ViewState["JumpPages"] = PagesCount;//保存页总数,跳页时判断⽤户输⼊数是否超出页码范围//显⽰lbPageCount、lbRecordCount的状态lbPageCount.Text = PagesCount.ToString();lbRecordCount.Text = RecordsCount.ToString();//判断跳页⽂本框失效if (RecordsCount <= 10){GotoPage.Enabled = false;}GridViewDataBind("default");//调⽤数据绑定函数TDataBind()进⾏数据绑定运算}这⾥的⾼效分页⽅法主要⽤的是select top 10 Id ,Name from tb where Id not in (select top 10*N from tb order by Id asc) order by Id asc⽰例中的N代表的是页数,之前原⼦⾥也有很多关于⾼效分页的讨论,这⾥就不再多说了,我个⼈觉得这个分页语句效果还不错,当然除此之外还有row_number()函数分页、select Max() 分页等等⽅法,之前也有总结过,有兴趣的朋友可以看⼀下我之前写的ListView和Repeater⾼效分页这篇⽂章,⾥边讲述的也很详细,只要你⼀步⼀步的照着去操练应该问题不⼤的。
GridView分页系列1:GridView自带分页:GridView自带的分页,是假分页,他每次从数据库把数据全部查询出之后,通过分页的算法,进行按每页数量进行分页。
分页的属性元素:分页功能的实现就是通过对这些属性元素的操作实现的。
//this.GvShow.PageIndex 当前页的索引//this.GvShow.PageCount 总共的页数//this.GvShow.Rows.Count 当前页签内的gridview的行数//this.GvShow.PageSize 每页的记录数//this.GvShow.PageIndex*this.GvShow.rows.count + 1 行索引设置普通的GridView分页:属性AllowPaging="True"、PageSize="2"设置分页事件onpageindexchanging="GvShow_PageIndexChanging"后台方法绑定:protected void GvShow_PageIndexChanging(object sender, GridViewPageEventArgs e){this.GvShow.PageIndex = e.NewPageIndex;BindView();}2:自定义样式的GridView自带分页:普通的GridView自带的分页,不带样式,只是普通的1,2,3等,如果希望获取到具有其他分页样式就应该设置<PagerSettings Position="TopAndBottom"PageButtonCount="1"/>属性<%--FirstPageText="首页" LastPageText="尾页" NextPageText="下一页" PreviousPageText="上一页"--%>后台访问此属性的实例:this.GvShow.PagerSettings.FirstPageText = "首页";stPageText = "尾页";this.GvShow.PagerSettings.NextPageText = "下一页";this.GvShow.PagerSettings.PreviousPageText = "上一页";this.GvShow.PagerSettings.Mode = PagerButtons.NextPreviousFirstLast;通过<PagerStyle HorizontalAlign="Center" VerticalAlign="Middle" />属性可以设置GRIDVIEW分页的样式3:在<PagerTemplate></PagerTemplate>分页模板中自定义分页的样式,虽然微软开辟了这个模板提供给用户类似于自定义分页的功能,但这个功能完全还是基于微软的GridView自带的分页进行的,<PagerSettings>属性的Visable的属性必须是true AllowPaging="true" 与PageSize="3"属性页都要进行相关的有效设置才可以。
GridView控件自定义分页详解在这里我们将用一个隐藏字段来保存这个PageIndex,即当前页码.当点击上一页时,将它的值减一,知道为0,要注意的一点这里的第一页页码是0而不是1.下面看看代码,然后我们再分析分析!1<asp:GridView ID="NewsGrid" runat="server" AutoGenerateColumns="False" AllowPaging="false" Width="100%">2 <Columns>3 <asp:BoundField DataField="NewsId" HeaderText="新闻ID"/>4 <asp:HyperLinkField DataNavigateUrlFields="NewsId" DataNavigateUrlFormatString="~/Details.aspx?ID={0}"5 DataTextField="Title" HeaderText="新闻标题" ItemStyle-Width="70%"/>6 <asp:BoundField DataField="PostTime" HeaderText="发布时间"/>7 <asp:CommandField HeaderText="新闻管理" ShowCancelButton="False" ShowDeleteButton="True"8 ShowEditButton="True"/>9 </Columns>10 </asp:GridView>11 <div style=" height:16px; padding-top:5px; margin-right:30px; float:right">12 <asp:HiddenField ID="CurrentPage" runat="server" Value="0"/>13 <asp:LinkButton ID="First" runat="server" CommandArgument="first" OnClick="PagerButton_Click">首页</asp:LinkButton>14 <asp:LinkButton ID="Prev" runat="server" CommandArgument="prev" OnClick="PagerButton_Click">上一页</asp:LinkButton>15 <asp:LinkButton ID="Next" runat="server" CommandArgument="next" OnClick="PagerButton_Click">下一页</asp:LinkButton>16 <asp:LinkButton ID="Last" runat="server" CommandArgument="last" OnClick="PagerButton_Click">尾页</asp:LinkButton>17 </div> CS文件中的代码:1 protected void PagerButton_Click(object sender, EventArgs e)2 {3 int pageIndx = Convert.ToInt32(CurrentPage.Value);4 int totals = NewsManager.GetNews(0, pageSize).TotalRecords;5 int pages = (totals % pageSize) == 0 ? (totals / pageSize) : (totals / pageSize + 1);6 string arg = ((LinkButton)sender).CommandArgument.ToString().ToLower();7 switch (arg)8 {9 case "prev":10 if (pageIndx > 0)11 {12 pageIndx -= 1;13 }14 break;15 case "next":16 if (pageIndx < pages - 1)17 {18 pageIndx += 1;19 }20 break;21 case "last":22 pageIndx = pages - 1;23 break;24 default:25 pageIndx = 0;26 break;27 }28 CurrentPage.Value = pageIndx.ToString();29 NewsGrid.DataSource = NewsManager.GetNews(pageIndx , pageSize).Entities;30 NewsGrid.DataBind();31 }如何在GridView中增加效果protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) {//将满足特定条件的行标为高亮if (e.Row.RowType == DataControlRowType.DataRow)//判定当前的行是否属于datarow类型的行{int money = Convert.ToInt32(DataBinder.Eval(e.Row.DataItem, "MONEY"));//取当前行的列值if (money == 77)e.Row.BackColor = Color.Red;//string customer = (string)DataBinder.Eval(e.Row.DataItem, "CUSTOMER");string customer = DataBinder.Eval(e.Row.DataItem, "CUSTOMER").ToString();if (customer == "sdf")e.Row.BackColor = Color.Red;}//加入鼠标滑过的高亮效果if (e.Row.RowType == DataControlRowType.DataRow)//判定当前的行是否属于datarow类型的行{//当鼠标放上去的时候先保存当前行的背景颜色并给附一颜色e.Row.Attributes.Add("onmouseover", "currentcolor=this.style.backgroundColor;this.style.backgroundColor='yellow',this.style.fontWeight='';");//当鼠标离开的时候将背景颜色还原的以前的颜色e.Row.Attributes.Add("onmouseout", "this.style.backgroundColor=currentcolor,this.style.fontWeight='';");}//单击行改变行背景颜色if (e.Row.RowType == DataControlRowType.DataRow){e.Row.Attributes.Add("onclick","this.style.backgroundColor='#99cc00'; this.style.color='buttontext';this.style.cursor='default';");}如何在GridView中一次性批量更新多行数据2.0下含有DropDownList的GridView编辑、删除的完整例子!<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" PageSize="10"Width="542px" AllowPaging="True" AllowSorting="True"DataKeyNames="DB31_1,DB31_2"OnRowCancelingEdit="GridView1_RowCancelingEdit" OnRowDeleting="GridView1_RowDeleting" OnRowEditing="GridView1_RowEditing" OnRowUpdating="GridView1_RowUpdating" OnPageIndexChanging="GridView1_PageIndexChanging"OnRowDataBound="GridView1_RowDataBound"OnSelectedIndexChanged="GridView1_SelectedIndexChanged" OnSorting="GridView1_Sorting" > <Columns><asp:TemplateField HeaderText="序号"><ItemTemplate><%# this.GridView1.PageIndex * this.GridView1.PageSize +this.GridView1.Rows.Count + 1%></ItemTemplate></asp:TemplateField><asp:TemplateField HeaderText="学历代码" SortExpression="DB1_1"><EditItemTemplate><%--<asp:TextBox ID="TextBox1" runat="server" Text='<%#Bind("DB1_1") %>'></asp:TextBox>--%><asp:DropDownList ID ="ddlXL" runat="server" DataValueField='<%#Bind("DB1_1") %>'></asp:DropDownList></EditItemTemplate><ItemTemplate><asp:Label ID="Label1" runat="server" Text='<%#Bind("xueliText") %>'></asp:Label></ItemTemplate></asp:TemplateField><asp:TemplateField HeaderText="学历名称" SortExpression="DB1_2"><EditItemTemplate><asp:TextBox ID="TextBox2" runat="server" Text='<%#Bind("DB1_2") %>'></asp:TextBox></EditItemTemplate><ItemTemplate><asp:Label ID="Label2" runat="server" Text='<%#Bind("DB1_2") %>'></asp:Label></ItemTemplate></asp:TemplateField><asp:TemplateField HeaderText="操作" ShowHeader="False"><EditItemTemplate><asp:LinkButton ID="LinkButton1" runat="server" CausesValidation="True" CommandName="Update"Text="更新"></asp:LinkButton><asp:LinkButton ID="LinkButton2" runat="server" CausesValidation="False" CommandName="Cancel"Text="取消"></asp:LinkButton></EditItemTemplate><ItemTemplate><asp:LinkButton ID="LinkButton1" runat="server" CausesValidation="False" CommandName="Edit"Text="编辑" OnClientClick="return confirm('确认要编辑吗?');"></asp:LinkButton><asp:LinkButton ID="LinkButton3" runat="server" CausesValidation="False" CommandName="Delete"Text="删除" OnClientClick="return confirm('确认要删除吗?');"></asp:LinkButton><asp:LinkButton ID="LinkButton2" runat="server" CausesValidation="False" CommandName="Select"Text="选择"></asp:LinkButton></ItemTemplate></asp:TemplateField></Columns><AlternatingRowStyle BackColor="Aquamarine" /></asp:GridView>/// <summary>/// 绑定数据到GridView/// </summary>private void GridViewBind(){检索数据库string strSql = "SELECT * FROM DB1";得到数据集this.GridView1.DataSource=conn.GetDs(strSql).Tables[0].DefaultView;this.GridView1.DataBind();}/// <summary>/// 编辑当前行/// </summary>/// <param name="sender"></param>/// <param name="e"></param>protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e){GridView1.EditIndex = e.NewEditIndex;//当前编辑行背景色高亮this.GridView1.EditRowStyle.BackColor = Color.FromName("#F7CE90"); GridViewBind();}/// <summary>/// 取消编辑状态/// </summary>/// <param name="sender"></param>/// <param name="e"></param>protected void GridView1_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e) {GridView1.EditIndex = -1;GridViewBind();}/// <summary>/// 删除记录过程/// </summary>/// <param name="sender"></param>/// <param name="e"></param>protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e){//得到单位编号string rowToDelete = GridView1.DataKeys[e.RowIndex].Values[0].ToString();//转换为整数//int ID=Convert.ToInt32(rowToDelete);//从数据库中删除string str = "DELETE FROM DB1 where DB1_1=" + "'" + rowToDelete + "'" + "";try{conn.RunSql(str);//重新绑定数据GridViewBind();}catch (Exception ex){Response.Write("数据库错误,错误原因:" + ex.Message);Response.End();}}/// <summary>/// 更新记录过程/// </summary>/// <param name="sender"></param>/// <param name="e"></param>protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e){string ID = GridView1.DataKeys[e.RowIndex].Values[0].ToString();string DB1_1 = ((TextBox)GridView1.Rows[e.RowIndex].FindControl("TextBox1")).Text;//string DB1_2 = ((TextBox)GridView1.Rows[e.RowIndex].FindControl("TextBox2")).Text;string DB1_2 =(((DropDownList))GridView1.Rows[e.RowIndex].FindControl("ddlXL")).SelectedItem.Text;//判断表单项是否有空并给出提示信息if (DB1_1 == "" || DB1_2 == ""){conn.Alert("请输入完整信息!", Page);return;}try{conn.BuilderEdit("select * from DB1 where DB1_1 ='" + ID + "'");conn.dr["DB1_1"] = DB1_1;conn.dr["DB1_2"] = DB1_2;conn.BuilderEditClose();}catch (OracleException err){if (err.Code.ToString() == "1")conn.Alert("错误:已存在具有相同主键的记录", Page);elseconn.Alert("错误:未能添加记录", Page);}Response.Write("<script language='javascript'>alert('数据已被保存!');</script>");//返回浏览状态GridView1.EditIndex = -1;GridViewBind();}/// <summary>/// 分页事件/// </summary>/// <param name="sender"></param>/// <param name="e"></param>protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e){GridView1.PageIndex = e.NewPageIndex;GridViewBind();}/// <summary>/// 加入鼠标效果及为DropDownList绑定值/// </summary>/// <param name="sender"></param>/// <param name="e"></param>protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e){//为DropDownList绑定值if (((DropDownList)e.Row.FindControl("ddlXL")) != null){DropDownList ddlXL = (DropDownList)e.Row.FindControl("ddlXL");ddlXL.Items.Clear();ddlXL.Items.Add(new ListItem("博士", "1"));ddlXL.Items.Add(new ListItem("硕士", "2"));ddlXL.Items.Add(new ListItem("学士", "3"));}//加入鼠标滑过的高亮效果if (e.Row.RowType == DataControlRowType.DataRow)//判定当前的行是否属于datarow类型的行{//当鼠标放上去的时候先保存当前行的背景颜色并给附一颜色e.Row.Attributes.Add("onmouseover","currentcolor=this.style.backgroundColor;this.style.backgroundColor='yellow',this.style.fontWeight='';");//当鼠标离开的时候将背景颜色还原的以前的颜色e.Row.Attributes.Add("onmouseout","this.style.backgroundColor=currentcolor,this.style.fontWeight='';");}//单击行改变行背景颜色if (e.Row.RowType == DataControlRowType.DataRow){e.Row.Attributes.Add("onclick", "this.style.backgroundColor='#99cc00';this.style.color='buttontext';this.style.cursor='default';");}}2.0下含有CheckBox的GridView删除选定记录实例<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" PageSize="5"2 Width="726px" AllowPaging="True" AllowSorting="True"3 DataKeyNames="DB1_1,DB1_2" OnRowDeleting="GridView1_RowDeleting" OnPa geIndexChanging="GridView1_PageIndexChanging" OnRowDataBound="GridView1_RowDataBound" OnSorting="GridView1_Sorting" Height="279px" >4 <Columns>5 <asp:TemplateField HeaderText="序号" >6 <ItemTemplate>7 <%# this.GridView1.PageIndex * this.GridView1.PageSize +this.GridView1.Rows.Count + 1%>8 </ItemTemplate>9 </asp:TemplateField>10 <asp:TemplateField HeaderText="选择" >11 <ItemTemplate>12 <asp:CheckBox ID="chkSelect" runat="server" ></asp:CheckBox>13 </ItemTemplate>14 </asp:TemplateField>15 <asp:TemplateField HeaderText="操作" ShowHeader="False">16 <ItemTemplate>17 <asp:LinkButton ID="lbtnDelete" runat="server" CausesValidation="False" CommandName="Delete"18 Text="删除" OnClientClick="return confirm('确认要删除吗?');"></asp:LinkButton>19 </ItemTemplate>20 </asp:TemplateField>21 </Columns>22 <AlternatingRowStyle BackColor="Aquamarine" />23 </asp:GridView>1 <asp:CheckBox ID="chkSelectAll" runat="server" Text="全部选中"OnCheckedChanged="chkSelectAll_CheckedChanged" AutoPostBack="True" ></asp:CheckBox>2 <asp:Button ID="btnDelete" runat="server" Text="删除" OnClick="btnDelete_Click" />1 protected void btnDelete_Click(object sender, EventArgs e)2 {3 string strDelete = "";4 for (int i = 0; i < this.GridView1.Rows.Count; i++)5 {6 string Label;7 bool isChecked = ((CheckBox)GridView1.Rows[i].FindControl("chkSelect")).Checked;8 Label = ((Label)GridView1.Rows[i].FindControl("labXH")).Text;9 if (isChecked)10 {11 strDelete = "DB1_1" + "=" + Label;12 }13 }14 conn.RunSql("Delete from DB1 where " + strDelete15 this.chkSelectAll.Checked = false;16 GridViewBind();17 }1819 protected void chkSelectAll_CheckedChanged(object sender, EventArgs e)20 {21 //遍历GridView行获取CheckBox属性22 for (int i = 0; i < this.GridView1.Rows.Count; i++)23 {24 ((CheckBox)GridView1.Rows[i].FindControl("chkSelect")).Checked =this.chkSelectAll.Checked;25 }26 }。
GridView.AllowPaging 属性注意:此属性在 .NET Framework 2.0 版中是新增的。
获取或设置一个值,该值指示是否启用分页功能。
命名空间:System.Web.UI.WebControls程序集:System.Web(在system.web.dll 中)语法C#public virtual bool AllowPaging { get; set; }属性值如果启用分页功能,则为true;否则为false。
默认为false。
备注GridView控件可自动将数据源中的所有记录分成多页,而不是同时显示这些记录。
如果数据源支持分页功能,GridView控件可利用此功能,并提供内置的分页功能。
分页功能可用于支持System.Collections.ICollection接口的任何数据源对象或支持分页功能的数据源。
若要启用分页功能,请将AllowPaging属性设置为true。
默认情况下,GridView控件在一个页面上一次显示10 条记录。
通过设置PageSize属性,可更改每页上所显示记录的数目。
若要确定显示数据源内容所需的总页数,请使用PageCount属性。
通过使用PageIndex属性,可确定当前显示的页面的索引。
启用分页时,会在GridView控件中自动显示一个称为页导航行的附加行。
页导航行包含允许用户导航至其他页面的控件。
使用PagerSettings属性可以控制页导航行的设置(如页导航显示模式、同时显示的页链接数和页导航控件的文本标签)。
通过设置Position属性,页导航行可在控件的顶部、底部或同时在顶部和底部显示。
通过设置Mode属性,您还可以从四种内置页导航显示模式中选择一种。
下表描述了内置的显示模式。
若要控制页导航行的外观(包括其背景色、字体颜色和位置),请使用PagerStyle属性。
注意使用GridView控件还可以定义页导航行的自定义模板。
有关创建自定义页导航行模板的更多信息,请参见PagerTemplate。
1.创建存储过程,数据库为Mi croso ft SQL Server 2000,use Northw indgoselect * from Ordersgoif exists(select * from sysobj ectswherenam e='proc_o rders info' and type='P')drop proced ure proc_o rders infogo--创建查询表O rders的存储过程,@PageIn dex 页面索引(页面索引=当前页数-1),@PageSi ze 每页显示数据的多少(多少行)--@PageCo unt 页面总数,@Record Count表中的记录总数create proced ure proc_o rders info@PageIn dex int,@PageSi ze int,@PageCo unt int outasdeclar e @Record Count int,@strsql nvarch ar(1000)select @Record Count=count(*) from ordersset @PageCo unt=ceilin g(@Record Count*1.0/@PageSi ze)--第1种情况,表只够分成一页if @PageIn dex=0 or @PageCo unt<=1set @strsql=N'select top'+str(@PageSi ze)+'* from Orders orderby OrderI D desc' --第2种情况,要查询表的最后一页(可看作表Or ders已被分成几个页了)else if @PageIn dex=@PageCo unt-1set @strsql=N'select * from(selecttop'+str(@Record Count-@PageIn dex*@PageSi ze)+'* from Orders orderbyOrderI D asc) Tem pTa ble orderby OrderI D desc'--第3种情况,查询非表的最后一页elseset @strsql=N'select top'+str(@PageSi ze)+'* from(selecttop'+str(@Record Count-@PageIn dex*@PageSi ze)+'* from Orders orderbyOrderI D asc) Tem pTa ble orderby OrderI D desc'--执行SQL语句exec (@strsql)go2.创建显示数据的方法classCConnD B里的方法retur nConn()返回数据库连接usingSystem;usingSystem.Data;usingSystem.Config urati on;usingSystem.Web;usingSystem.Web.Securi ty;usingSystem.Web.UI;usingSystem.Web.UI.WebCon trols;usingSystem.Web.UI.WebCon trols.WebPar ts;usingSystem.Web.UI.Htm lCo ntrol s;//导入需要使用的命名空间usingSystem.Data.SqlCli ent;/// <sum m ar y>/// CConnD B 的摘要说明/// </sum m ar y>public classCConnD B{public CConnD B(){//// TODO: 在此处添加构造函数逻辑//}public SqlCon necti on return Conn() {SqlCon necti on sconn= newSqlCon necti on("server=.;databa se=Northw ind;uid=sa;pwd=sa");return sconn;}}classCDispl ayOde rsInf o里的方法Displ ayOrd ersIn fo()返回一个Da taSetusingSystem;usingSystem.Data;usingSystem.Config urati on;usingSystem.Web;usingSystem.Web.Securi ty;usingSystem.Web.UI;usingSystem.Web.UI.WebCon trols;usingSystem.Web.UI.WebCon trols.WebPar ts;usingSystem.Web.UI.Htm lCo ntrol s;//导入需要使用的命名空间usingSystem.Data.SqlCli ent;/// <sum m ar y>/// CDispl ayOde rsInf o 的摘要说明/// </sum m ar y>public classCDispl ayOde rsInf o{CConnD B ccdb = new CConnD B();//pageCo unt为页面总数privat e int pageCo unt;public CDispl ayOde rsInf o(){//// TODO: 在此处添加构造函数逻辑//}public DataSe t Displa yOrde rsInf o(int pageIn dex,int pageSi ze) {SqlCon necti on sconn= ccdb.return Conn();SqlCom m andscm d = new SqlCom m and("proc_o rders info",sconn);scm d.Parame ters.Add(new SqlPar am ete r("@PageIn dex",SqlDbT ype.Int)); scm d.Parame ters[0].Value= pageIn dex;scm d.Parame ters.Add(new SqlPar am ete r("@PageSi ze",SqlDbT ype.Int));scm d.Parame ters[1].Value= pageSi ze;scm d.Parame ters.Add(new SqlPar am ete r("@PageCo unt",SqlDbT ype.Int)); scm d.Parame ters[2].Direct ion = Parame terDi recti on.Output;scm m an dType = Com m an dType.Stored Proce dure;SqlDat aAdap ter sda = new SqlDat aAdap ter(scmd);DataSe t ds = new DataSe t();sda.Fill(ds);pageCo unt = (int)scm d.Parame ters[2].Value;return ds;}public int return PageC ount() {return pageCo unt;}}3.页面设计和页面代码页面设计<%@ Page Langua ge="C#" AutoEv entWi reup="true" CodeFi le="Defaul t.aspx.cs" Inheri ts="_Defau lt" %><!DOCTYP E htm l PUBLIC "-//W3C//DTD XHTML1.0 Transi tiona l//EN""/TR/xhtm l1/DTD/xhtm l1-transi tiona l.dtd"><htm l xm lns="/1999/xhtm l" ><head runat="server"><title>无标题页</title></head><body><form id="form1" runat="server"><div> <asp:LinkBu ttonID="lbPrev" runat="server"OnClic k="lbPrev_Clic k">上一页</asp:LinkBu tton><asp:LabelID="lblPag eNum" runat="server"></asp:Label><asp:LinkBu ttonID="lbNext" runat="server" OnClic k="lbNext_Clic k">下一页</asp:LinkBu tton><asp:GridVi ew ID="gvMain" runat="server"></asp:GridVi ew></div></form></body></ht ml>页面代码usingSystem;usingSystem.Data;usingSystem.Config urati on;usingSystem.Web;usingSystem.Web.Securi ty;usingSystem.Web.UI;usingSystem.Web.UI.WebCon trols;usingSystem.Web.UI.WebCon trols.WebPar ts;usingSystem.Web.UI.Htm lCo ntrol s;public partia l class_Defau lt : System.Web.UI.Page{CDispl ayOde rsInf o cdoi = new CDispl ayOde rsInf o();//pageIn dex 页面索引(页面索引=当前页数-1),pageSi ze 每页显示多少数据(多少行)//pageCo unt 页面的总页数privat e static int pageIn dex = 0;privat e static int pageSi ze = 50;privat e static int pageCo unt = 0;protec ted void Page_L oad(object sender, EventA rgs e){if (!IsPost Back) {GridVi ewDat aBind();}}privat e void GridVi ewDat aBind() {DataSe t ds= cdoi.Displa yOrde rsInf o(pageIn dex,pageSi ze);gvMain.DataSo urce= ds;gvMain.DataBi nd();pageCo unt = cdoi.return PageC ount();lblPag eNum.Text ="当前页数:"+Conver t.ToStri ng(pageIn dex+1);}protec ted void lbPrev_Clic k(object sender, EventA rgs e) {pageIn dex--;if (pageIn dex < 0) {Respon se.Write("<script langua ge=javasc ript>alert('已到首页!')</script>");pageIn dex++;return;}GridVi ewDat aBind();}protec ted void lbNext_Clic k(object sender, EventA rgs e) {pageIn dex++;if (pageIn dex >=pageCo unt){Respon se.Write("<script langua ge=javasc ript>alert('已到尾页!')</script>");pageIn dex--;return;}GridVi ewDat aBind();}}。
1.GridView代码分页排序:效果图:1.AllowSorting设为True,aspx代码中是AllowSorting="True";2.默认1页10条,如果要修改每页条数,修改PageSize即可,在aspx代码中是PageSize="12"。
3.默认的是单向排序的,右击GridView弹出“属性”,选择AllowSorting为True即可。
1:分页保存选中状态保存CheckBox的值GridView在分页过程中并不维护CheckBox的选择状态,幸运的是,我们可以使用Session来维护CheckBox的状态,这个功能使用RememberOldValues完成private void RememberOldValues(){ArrayList categoryIDList = new ArrayList();int index = -1;foreach (GridViewRow row in okZMGV.Rows){index =Convert .ToInt32( okZMGV.DataKeys[row.RowIndex].Value);bool result = ((CheckBox)row.FindControl("IsCheckBox")).Checked;// Check in the Sessionif (Session["state"] != null)categoryIDList = (ArrayList)Session["state"];if (result){if (!categoryIDList.Contains(index))categoryIDList.Add(index);}elsecategoryIDList.Remove(index);}if (categoryIDList != null && categoryIDList.Count > 0)Session["state"] = categoryIDList;}还原CheckBox的状态下一步,需要定义一个方法来还原Checkbox的状态值private void RePopulateValues(){ArrayList categoryIDList = (ArrayList)Session["state"];if (categoryIDList != null && categoryIDList.Count > 0){foreach (GridViewRow row in okZMGV .Rows){int index = (int)okZMGV.DataKeys[row.RowIndex].Value;if (categoryIDList.Contains(index)){CheckBox myCheckBox = (CheckBox)row.FindControl("IsCheckBox"); myCheckBox.Checked = true;}}}}最后,在分页事件里调用上面两个方法protected void page_Click(object sender, ImageClickEventArgs e){RememberOldValues();string count = ((ImageButton)sender).CommandArgument.ToString().ToLower ();switch(count){case"prev":if (okZMGV.PageIndex > 0){okZMGV.PageIndex -= 1;}break;case"next":if (okZMGV.PageIndex < okZMGV.PageCount - 1){okZMGV.PageIndex += 1;}break;case "0":okZMGV.PageIndex=0;break;case "last":okZMGV.PageIndex= okZMGV.pagecount-1;break;}BrndOKBind();RePopulateValues();}2.GridView选中,编辑,取消,删除:效果图:后台代码:你可以使用sqlhelper,本文没用。
至顶网()-中国最大的企业级IT资源门户-技术成就商务首页网络安全存储服务器软件桌面产品库开发 CIO 白皮书管理软件新闻下载社区专家博客视频CNETNews 中小企业网站联盟开发者在线 /开发者社区首页C/S开发数据库中间件Web嵌入式项目管理网页设计社区搜索《博客三人行》《软话连篇》《边看边读》《至顶大课堂》站点导航:开发者在线 编程[冷枫]关于VS2005中GridView的自定义分页,单选、多选、排序、自增列的简单应用[冷枫]关于VS2005中GridView的自定义分页,单选、多选、排序、自增列的简单应用开发者在线 更新时间:2007-09-23作者:冷枫来源:CSDN本文关键词:冷枫分页单选排序自增列关于VS2005中GridView的自定义分页,单选、多选、排序、自增列的简单应用。
多选时,只有全部选中时“多选”才选中。
图片效果:简单示例,代码如下,fenpage.aspx的代码:<%@ Page Language="C#" AutoEventWireup="true" CodeFile="fenpage.aspx.cs" Inherits="gridview_fenpage" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="/1999/xhtml"><head runat="server"><title></title><script language="javascript" type="text/javascript">// 判断多选是否与选中项(没有选中的返回false)function slcNo_click(){if (document.form1.checkboxname.length){for (var i=0;i<document.form1.checkboxname.length;i++){if(document.form1.checkboxname[i].checked){return true;}}}else{if(document.form1.checkboxname.checked){return true;}}alert("请选择后再操作!");return false;}// 鼠标经过改变行的颜色if (!objbeforeItem){var objbeforeItem=null;var objbeforeItembackgroundColor=null;}function ItemOver(obj){if(objbeforeItem){objbeforeItem.style.backgroundColor = objbeforeItembackgroundColor; }objbeforeItembackgroundColor = obj.style.backgroundColor;objbeforeItem = obj;obj.style.backgroundColor = "#B9D1F3";}//// 多选的全选与取消function checkJs(boolvalue){if(document.all.checkboxname.length>1){for(var i=0;i<document.all.checkboxname.length;i++){document.all.checkboxname[i].checked = boolvalue; }}elsedocument.all.checkboxname.checked = boolvalue;}//// 只有全部选中时“全选”选中function SingleCheckJs(){var flag1=false;var flag2=false;if (document.form1.checkboxname.length){for (var i=0;i<document.form1.checkboxname.length;i++){if(document.form1.checkboxname[i].checked)flag1 = true;elseflag2 = true;}}else{if(document.form1.checkboxname.checked)flag1 = true;elseflag2 = true;}if(flag1==true&&flag2==false)document.getElementById("chk").checked = true;elsedocument.getElementById("chk").checked = false;}//</script></head><body><form id="form1" runat="server"><div><table cellpadding="0" cellspacing="0" border="0" width="80%" style="font-size: 11px"><tr><td align="center"><asp:GridView ID="GridView1" runat="server" Width="100%" CellPadding="4" ForeColor="#333333"AutoGenerateColumns="False" AllowPaging="True" PageSize="12" BorderColor="Silver"BorderStyle="Solid" BorderWidth="1px" OnRowDataBound="GridView1_RowDataBound"ShowFooter="True" EmptyDataText="没有数据记录!!"AllowSorting="True" OnSorting="GridView1_Sorting"><Columns><asp:BoundField HeaderText="编号" DataField="id" Visible="False" /><asp:TemplateField HeaderText="<input type='checkbox' id='chk' name='chk' onclick='checkJs(this.checked);' />全选" FooterText="全选"><ItemTemplate><input type="checkbox" id="checkboxname" name="checkboxname" value='<%# DataBinder.Eval(Container.DataItem, "id")%>' onclick='SingleCheckJs();' /></ItemTemplate></asp:TemplateField><asp:TemplateField HeaderText="单选" FooterText="单选"><ItemTemplate><input type="radio" id="RadioName" name="RadioName" value='<%# Eval("id")%>' /></ItemTemplate></asp:TemplateField><asp:TemplateField HeaderText="自增列" FooterText="自增列"><ItemTemplate><%#(Container.DataItemIndex+1).ToString()%></ItemTemplate></asp:TemplateField><asp:BoundField HeaderText="姓名" FooterText="姓名" DataField="name" SortExpression="name" /><asp:BoundField HeaderText="身份证号" FooterText="身份证号" DataField="card" SortExpression="card" /><asp:BoundField HeaderText="价格" FooterText="价格" DataField="price" DataFormatString=""HtmlEncode="False" SortExpression="price" /> <asp:BoundField HeaderText="数字" FooterText="数字" DataField="price" DataFormatString=""HtmlEncode="False" SortExpression="price" /> <asp:BoundField HeaderText="建立时间" FooterText="建立时间" DataField="createdate" DataFormatString=""HtmlEncode="False"SortExpression="createdate" /></Columns><RowStyle BackColor="#F7F6F3" ForeColor="#333333" /> <EditRowStyle BackColor="#999999" /><SelectedRowStyle BackColor="#E2DED6" Font-Bold="True" ForeColor="#333333" /><PagerStyle BackColor="#284775" ForeColor="White" HorizontalAlign="Center" /><AlternatingRowStyle BackColor="White" ForeColor="#284775" /><PagerSettings Visible="False" /><FooterStyle Font-Bold="True" /><HeaderStyle Font-Bold="False" Font-Italic="False" /> </asp:GridView></td></tr><tr><td align="center" style="height: 25px"><asp:LinkButton ID="btnFirst" CommandArgument="first" OnClick="PagerButtonClick"runat="server">首页</asp:LinkButton><asp:LinkButton ID="btnPrev" CommandArgument="prev" OnClick="PagerButtonClick" runat="server">上一页</asp:LinkButton><asp:LinkButton ID="btnNext" CommandArgument="next" OnClick="PagerButtonClick" runat="server">下一页</asp:LinkButton><asp:LinkButton ID="btnLast" CommandArgument="last" OnClick="PagerButtonClick" runat="server">尾页</asp:LinkButton><asp:Label ID="LblCurrentIndex" runat="server"></asp:Label><asp:Label ID="LblPageCount" runat="server"></asp:Label> <asp:Label ID="LblRecordCount" runat="server"></asp:Label></td></tr><tr><td><asp:Button ID="Button2" runat="server" Text="checkbox得到选择的行" OnClick="Button2_Click"></asp:Button><asp:Button ID="Button1" runat="server" Text="radio得到选择的行" OnClick="Button1_Click"></asp:Button></td></tr></table></div></form></body></html>fenpage.aspx.cs的代码: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.Data.SqlClient;public partial class gridview_fenpage : System.Web.UI.Page{protected void Page_Load(object sender, EventArgs e){Button2.Attributes["onclick"] = "return slcNo_click();";GridViewBind("");}private void GridViewBind(string Sqlsort){string connStr = ConfigurationManager.ConnectionStrings["ConnString1"].ConnectionString;string SqlStr = "SELECT * FROM test01 where id<1000" + Sqlsort;DataSet ds = new DataSet();try{SqlConnection conn = new SqlConnection(connStr);if (conn.State.ToString() == "Closed") conn.Open();SqlDataAdapter da = new SqlDataAdapter(SqlStr, conn);da.Fill(ds, "test01");if (conn.State.ToString() == "Open") conn.Close();GridView1.DataSource = ds.Tables[0].DefaultView;GridView1.DataBind();LblCurrentIndex.Text = "第 " + (GridView1.PageIndex + 1).ToString() + " 页";LblPageCount.Text = "共 " + GridView1 .PageCount.ToString()+ " 页"; LblRecordCount.Text = "总共 "+ds.Tables[0].Rows.Count.ToString()+" 条";if (ds.Tables[0].Rows.Count == 0){btnFirst.Visible = false;btnPrev.Visible = false;btnNext.Visible = false;btnLast.Visible = false;LblCurrentIndex.Visible = false;LblPageCount.Visible = false;LblRecordCount.Visible = false;}else if (GridView1.PageCount == 1){btnFirst.Visible = false;btnPrev.Visible = false;btnNext.Visible = false;btnLast.Visible = false;}// 计算生成分页页码,分别为:"首页" "上一页" "下一页" "尾页"mandName = "1";mandName = (GridView1.PageIndex == 0 ? "1" : GridView1.PageIndex.ToString());mandName = (GridView1.PageCount == 1 ? GridView1.PageCount.ToString() : (GridView1.PageIndex + 2).ToString());mandName = GridView1.PageCount.ToString();//}catch(Exception ex){Response.Write("数据库错误,错误原因:"+ex.Message);Response.End();}}protected void PagerButtonClick(object sender, EventArgs e){GridView1.PageIndex = Convert.ToInt32(((LinkButton)sender).CommandName)-1;GridViewBind("");}protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) {e.Row.Attributes["onmouseover"] = "ItemOver(this)";}protected void Button2_Click(object sender, EventArgs e){string str="";string []ckb=null;str=Request.Form.Get("checkboxname");ckb=str.Split(new char[]{','});Response.Write("直接在页面中得到的值为:"+str+"<br>");Response.Write("处理后存放在数组中,如下:<br>");for(int i=0;i<ckb.Length;i++){Response.Write("ckb["+i+"]的值为:"+ckb[i]+"<br>");}}protected void Button1_Click(object sender, EventArgs e){Response.Write(Request.Form.Get("RadioName"));}protected void GridView1_Sorting(object sender, GridViewSortEventArgs e){string sql = "";if (ViewState["SortDirection"] == null || ViewState["SortDirection"].ToString().CompareTo("") == 0){ViewState["SortDirection"] = " desc";}elseViewState["SortDirection"] = "";sql = " order by " + e.SortExpression + ViewState["SortDirection"];GridViewBind(sql);}}数据库中表的生成代码:CREATE TABLE [dbo].[test01] ([id] [decimal](18, 0) IDENTITY (1, 1) NOT NULL ,[name] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,[card] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,[createdate] [datetime] NULL) ON [PRIMARY]GOALTER TABLE [dbo].[test01] ADDCONSTRAINT [DF_test01_createdate] DEFAULT (getdate()) FOR [createdate], CONSTRAINT [PK_test01] PRIMARY KEY CLUSTERED([id]) ON [PRIMARY]GOTrackback: /TrackBack.aspx?PostId=1312814推荐阅读与冷枫分页单选排序自增列相关开发者在线内容冷枫分页单选排序自增列相关技术文章几条常见的数据库分页 SQL 语句调用Oracle存储过程实现快速分达梦数据库查询结果集分页实现使用VS2005打造简单分页浏览器基于的自定义分页显示程序中用Repeater实现分页 翻页后继续维持排序利用实现分页管理器中实现大结果集分页研讨用户评论评论列表发表评论用户名评论内容用户名:邮件地址:BBS讨论ASP怎样显示记录集中的某一记录出现这种错误提示是为什么???就这段代码明明是对的啊,怎么说有错数据透视表相加如何操作问两道 sql题新建的SQL数据库怎么设置登陆名和密phpcms discuz这个连接查询怎么做?什么叫做唯一约束?我理解的对吗?SET sql_mode='' 什么意思更多最新文章?热门栏目推荐C/S开发数据库开发 WEB开发移动嵌入式项目管理网页设计新品快看技术英雄技术看板图片故事热门软件技术推荐XML C/C++ C# Java Oracle Mysql .Net CSS SQL database UNIX Linux Jsp PHP Perl JavaScript ColdFusion ASP/ Apache AJAX开发者在线冷枫最新报道怎样用VS2005进行三层结构应用程序的开发[冷枫]用OTA下载本机J2me程序至手机[冷枫]J2ME中两种Http连接方式Post&Get的比较[冷枫]J2ME开发中的按键事件[冷枫]MIDP2.0声音用法[冷枫]在无线J2ME设备上实现超文本传输协议[冷枫]自己收藏的HelloWorld[冷枫]J2me多线程[冷枫]ASP数据库简单操作教程[冷枫]J2EE架构的6个最佳实践开发者在线分页最新报道几条常见的数据库分页 SQL 语句调用Oracle存储过程实现快速分页达梦数据库查询结果集分页实现使用VS2005打造简单分页浏览器基于的自定义分页显示程序中用Repeater实现分页利用实现分页管理器中实现大结果集分页研讨 2.0数据处理之高级分页/排序一个用JSP实现的分页的类及调用方法开发者在线单选最新报道Delphi中为TreeView添加单选和复选框开发者在线排序最新报道 翻页后继续维持排序 2.0数据处理之高级分页/排序V$TEMPSEG_USAGE与Oracle排序v$tempfile与v$sort_usage之关系解析PB中实现数据窗口动态排序的三种方法 翻页后继续维持排序(2) 翻页后继续维持排序(1)DataGrid同时具有分页和排序功能及注意点 翻页后继续维持排序-爱卡汽车网 | 网上车市 | CNET科技资讯网 | CWEEK | 蜂鸟网 | GameSpot China| 个人电脑 | 开发者在线 | PChome | Solidot | SPN |投影顾问网 | 万维家电网 | 网友世界 | 西域IT | ZDNet China | 中关村在线 | 中小企业成长网 | onlylady女人志联系我们 | 网站导航 | 网站简介 | 友情链接 | 申请自助链接 CNET Networks旗下网站: 选择网站CNET CNET CNET ReviewsCNET mySimonReleaseWebshotsZDNet Copyright ? 1997-2008 CNET Networks 版权所有。
GridView⾃定义分页实例详解(附demo源码下载)本⽂实例讲述了GridView⾃定义分页实现⽅法。
分享给⼤家供⼤家参考,具体如下:CSS样式⾸先把CSS样式代码粘贴过来:.gv{border: 1px solid #D7D7D7;font-size:12px;text-align:center;}.gvHeader{color: #3F6293;background-color: #F7F7F7;height: 24px;line-height: 24px;text-align: center;font-weight: normal;font-variant: normal;}.gvHeader th{font-weight: normal;font-variant: normal;}.gvRow, .gvAlternatingRow, .gvEditRow{line-height: 20px;text-align: center;padding: 2px;height: 20px;}.gvAlternatingRow{background-color: #F5FBFF;}.gvEditRow{background-color: #FAF9DD;}.gvEditRow input{background-color: #FFFFFF;width: 80px;}.gvEditRow .gvOrderId input, .gvEditRow .gvOrderId{width: 30px;}.gvEditRow .checkBox input, .gvEditRow .checkBox{width: auto;}.gvCommandField{text-align: center;width: 130px;}.gvLeftField{text-align: left;padding-left: 10px;}.gvBtAField{text-align: center;width: 130px;}.gvCommandField input{background-image: url(../Images/gvCommandFieldABg.jpg);background-repeat: no-repeat;line-height: 23px;border-top-style: none;border-right-style: none;border-bottom-style: none;border-left-style: none;width: 50px;height: 23px;margin-right: 3px;margin-left: 3px;text-indent: 10px;}.gvPage{padding-left: 15px;font-size: 18px;color: #333333;font-family: Arial, Helvetica, sans-serif;}.gvPage a{display: block;text-decoration: none;padding-top: 2px;padding-right: 5px;padding-bottom: 2px;padding-left: 5px;border: 1px solid #FFFFFF;float: left;font-size: 12px;font-weight: normal;}.gvPage a:hover{display: block;text-decoration: none;border: 1px solid #CCCCCC;}GridView样式根据上⾯列出的CSS样式样式名称,将他们分别加⼊⽹页GridView的不同标记中,举例如下:<RowStyle BackColor="#E7E7FF" ForeColor="#4A3C8C" CssClass="gvRow" /><HeaderStyle BackColor="#4A3C8C" Font-Bold="True" ForeColor="#F7F7F7" CssClass="gvHeader" /><AlternatingRowStyle BackColor="#F7F7F7" CssClass="gvAlternatingRow" />Pager分页模板其中gridview下⽅的换页代码为:<PagerTemplate><table width="100%" style="font-size:12px;"><tr><td style="text-align: right">第<asp:Label ID="lblPageIndex" runat="server" Text='<%# ((GridView)Container.Parent.Parent).PageIndex + 1 %>'></asp:Label>页/共<asp:Label ID="lblPageCount" runat="server" Text='<%# ((GridView)Container.Parent.Parent).PageCount %>'></asp:Label>页 <asp:LinkButton ID="LinkButtonFirstPage" runat="server" CommandArgument="First" CommandName="Page" Visible="<%# ((GridView)Container.NamingContainer).PageIndex != 0 %>">⾸页</asp:LinkButton><asp:LinkButton ID="LinkButtonPreviousPage" runat="server" CommandArgument="Prev" CommandName="Page" Visible="<%# ((GridView)Container.NamingContainer).PageIndex != 0 %>">上⼀页</asp:LinkButton><asp:LinkButton ID="LinkButtonNextPage" runat="server" CommandArgument="Next" CommandName="Page" Visible="<%# ((GridView)Container.NamingContainer).PageIndex != ((GridView)Container.NamingContainer).PageCount - 1 %>">下⼀页</asp:Lin <asp:LinkButton ID="LinkButtonLastPage" runat="server" CommandArgument="Last" CommandName="Page" Visible="<%# ((GridView)Container.NamingContainer).PageIndex != ((GridView)Container.NamingContainer).PageCount - 1 %>">尾页</asp:LinkB <asp:TextBox ID="txtNewPageIndex" runat="server" Text='<%# ((GridView)Container.Parent.Parent).PageIndex + 1 %>' Width="20px" AutoPostBack="true" ></asp:TextBox><asp:LinkButton ID="btnGo" runat="server" CommandArgument="GO" CommandName="Page" Text="GO" OnClick="btnGo_Click"></asp:LinkButton></td></tr></table></PagerTemplate>触发事件⽅法btnGo_Click的定义如下所⽰:protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e){GridView1.PageIndex = e.NewPageIndex;BindData();}protected void btnGo_Click(object sender, EventArgs e){if (((LinkButton)sender).CommandArgument.ToString().ToLower().Equals("go")){GridViewRow gridViewRow = GridView1.BottomPagerRow;TextBox numBox = (TextBox)GridView1.BottomPagerRow.FindControl("txtNewPageIndex");int inputNum = Convert.ToInt32(numBox.Text);GridView1.PageIndex = inputNum - 1;BindData();}}效果图展⽰及源码下载完整实例代码点击此处。
关于GridView的分页-万能分页代码大家往往在分页时感觉不好控制,在这里只需要在GridView里面的PagerTemplate模板里进行设置就可以了。
具体就是在GridView里面添加如下:C# code<PagerTemplate><div style="text-align:center; color:Blue"><asp:LinkButton ID="cmdFirstPage" runat="server" CommandName="Page" CommandArgument="First"Enabled="<%# ((GridView)Container.Parent.Parent).PageIndex!=0 %>">首页</asp:LinkButton><asp:LinkButton ID="cmdPreview" runat="server" CommandArgument="Prev" CommandName="Page"Enabled="<%# ((GridView)Container.Parent.Parent).PageIndex!=0 %>">前页</asp:LinkButton>第<asp:Label ID="lblcurPage" ForeColor="Blue" runat="server" Text='<%# ((GridView)Container.Parent.Parent).PageIndex+1 %>'></asp:Label>页/共<asp:Label ID="lblPageCount" ForeColor="blue" runat="server" Text='<%#((GridView)Container.Parent.Parent).PageCount %>'></asp:Label>页<asp:LinkButton ID="cmdNext" runat="server" CommandName="Page" CommandArgument="Next"Enabled="<%#((GridView)Container.Parent.Parent).PageIndex!=((GridView)Container.Parent.Par ent).P ageCount-1 %>">后页</asp:LinkButton><asp:LinkButton ID="cmdLastPage" runat="server" CommandArgument="Last" CommandName="Page"Enabled="<%#((GridView)Container.Parent.Parent).PageIndex!=((GridView)Container.Parent.Parent).P ageCount-1 %>">尾页</asp:LinkButton> <asp:TextBox ID="txtGoPage" OnTextChanged="txtGoPage_TextChanged" runat="server" Text='<%# ((GridView)Container.Parent.Parent).PageIndex+1 %>' Width="32px" CssClass="inputmini"></asp:TextBox>页<asp:Button ID="Button3" runat="server"OnClick="Turn_Click" Text="转到" /></div></PagerTemplate>这样只需在后台填写两个事件:GridView1_PageIndexChanging和Turn_ClickC# codeprotected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e) {GridView1.PageIndex = e.NewPageIndex;bind();//对GridView进行再次绑定,该函数由自己编写}protected void Turn_Click(object sender, EventArgs e){GridView1.PageIndex =int.Parse(((TextBox)GridView1.BottomPagerRow.FindControl("txtGoPage")).Text)-1;bind();//对GridView进行再次绑定,该函数由自己编写}。
GridView控件自定义分页详解在这里我们将用一个隐藏字段来保存这个PageIndex,即当前页码.当点击上一页时,将它的值减一,知道为0,要注意的一点这里的第一页页码是0而不是1.下面看看代码,然后我们再分析分析!1<asp:GridView ID="NewsGrid" runat="server" AutoGenerateColumns="False" AllowPaging="false" Width="100%">2 <Columns>3 <asp:BoundField DataField="NewsId" HeaderText="新闻ID"/>4 <asp:HyperLinkField DataNavigateUrlFields="NewsId" DataNavigateUrlFormatString="~/Details.aspx?ID={0}"5 DataTextField="Title" HeaderText="新闻标题" ItemStyle-Width="70%"/>6 <asp:BoundField DataField="PostTime" HeaderText="发布时间"/>7 <asp:CommandField HeaderText="新闻管理" ShowCancelButton="False" ShowDeleteButton="True"8 ShowEditButton="True"/>9 </Columns>10 </asp:GridView>实用文档11 <div style=" height:16px; padding-top:5px; margin-right:30px; float:right">12 <asp:HiddenField ID="CurrentPage" runat="server" Value="0"/>13 <asp:LinkButton ID="First" runat="server" CommandArgument="first" OnClick="PagerButton_Click">首页</asp:LinkButton>14 <asp:LinkButton ID="Prev" runat="server" CommandArgument="prev" OnClick="PagerButton_Click">上一页</asp:LinkButton>15 <asp:LinkButton ID="Next" runat="server" CommandArgument="next" OnClick="PagerButton_Click">下一页</asp:LinkButton>16 <asp:LinkButton ID="Last" runat="server" CommandArgument="last" OnClick="PagerButton_Click">尾页</asp:LinkButton>17 </div> CS文件中的代码:1 protected void PagerButton_Click(object sender, EventArgs e)2 {3 int pageIndx = Convert.ToInt32(CurrentPage.Value);4 int totals = NewsManager.GetNews(0, pageSize).TotalRecords;5 int pages = (totals % pageSize) == 0 ? (totals / pageSize) : (totals / 实用文档pageSize + 1);6 string arg = ((LinkButton)sender).CommandArgument.ToString().ToLower();7 switch (arg)8 {9 case "prev":10 if (pageIndx > 0)11 {12 pageIndx -= 1;13 }14 break;15 case "next":16 if (pageIndx < pages - 1)17 {18 pageIndx += 1;19 }20 break;21 case "last":实用文档22 pageIndx = pages - 1;23 break;24 default:25 pageIndx = 0;26 break;27 }28 CurrentPage.Value = pageIndx.ToString();29 NewsGrid.DataSource = NewsManager.GetNews(pageIndx , pageSize).Entities;30 NewsGrid.DataBind();31 }如何在GridView中增加效果protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e){//将满足特定条件的行标为高亮if (e.Row.RowType == DataControlRowType.DataRow)//判定当前的行是否属于datarow类型的行实用文档{int money = Convert.ToInt32(DataBinder.Eval(e.Row.DataItem, "MONEY"));//取当前行的列值if (money == 77)e.Row.BackColor = Color.Red;//string customer = (string)DataBinder.Eval(e.Row.DataItem, "CUSTOMER");string customer = DataBinder.Eval(e.Row.DataItem, "CUSTOMER").ToString();if (customer == "sdf")e.Row.BackColor = Color.Red;}//加入鼠标滑过的高亮效果if (e.Row.RowType == DataControlRowType.DataRow)//判定当前的行是否属于datarow类型的行{//当鼠标放上去的时候先保存当前行的背景颜色并给附一颜色e.Row.Attributes.Add("onmouseover", 实用文档"currentcolor=this.style.backgroundColor;this.style.backgroundColor='yellow',t his.style.fontWeight='';");//当鼠标离开的时候将背景颜色还原的以前的颜色e.Row.Attributes.Add("onmouseout", "this.style.backgroundColor=currentcolor,this.style.fontWeight='';");}//单击行改变行背景颜色if (e.Row.RowType == DataControlRowType.DataRow){e.Row.Attributes.Add("onclick","this.style.backgroundColor='#99cc00'; this.style.color='buttontext';this.style.cursor='default';");}如何在GridView中一次性批量更新多行数据2.0下含有DropDownList的GridView编辑、删除的完整例子!<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" PageSize="10"实用文档Width="542px" AllowPaging="True" AllowSorting="True"DataKeyNames="DB31_1,DB31_2" OnRowCancelingEdit="GridView1_RowCancelingEdit"OnRowDeleting="GridView1_RowDeleting"OnRowEditing="GridView1_RowEditing"OnRowUpdating="GridView1_RowUpdating"OnPageIndexChanging="GridView1_PageIndexChanging" OnRowDataBound="GridView1_RowDataBound" OnSelectedIndexChanged="GridView1_SelectedIndexChanged"OnSorting="GridView1_Sorting" ><Columns><asp:TemplateField HeaderText="序号"><ItemTemplate><%# this.GridView1.PageIndex * this.GridView1.PageSize + this.GridView1.Rows.Count + 1%></ItemTemplate></asp:TemplateField>实用文档<asp:TemplateField HeaderText="学历代码" SortExpression="DB1_1"><EditItemTemplate><%--<asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("DB1_1") %>'></asp:TextBox>--%><asp:DropDownList ID ="ddlXL"runat="server" DataValueField='<%#Bind("DB1_1") %>'></asp:DropDownList></EditItemTemplate><ItemTemplate><asp:Label ID="Label1" runat="server" Text='<%# Bind("xueliText") %>'></asp:Label></ItemTemplate></asp:TemplateField><asp:TemplateField HeaderText="学历名称" SortExpression="DB1_2"><EditItemTemplate>实用文档<asp:TextBox ID="TextBox2" runat="server" Text='<%# Bind("DB1_2") %>'></asp:TextBox></EditItemTemplate><ItemTemplate><asp:Label ID="Label2" runat="server" Text='<%# Bind("DB1_2") %>'></asp:Label></ItemTemplate></asp:TemplateField><asp:TemplateField HeaderText="操作" ShowHeader="False"><EditItemTemplate><asp:LinkButton ID="LinkButton1" runat="server" CausesValidation="True" CommandName="Update"Text="更新"></asp:LinkButton><asp:LinkButton ID="LinkButton2" runat="server" CausesValidation="False" CommandName="Cancel"实用文档Text="取消"></asp:LinkButton></EditItemTemplate><ItemTemplate><asp:LinkButton ID="LinkButton1" runat="server" CausesValidation="False" CommandName="Edit"Text="编辑" OnClientClick="return confirm('确认要编辑吗?');"></asp:LinkButton><asp:LinkButton ID="LinkButton3" runat="server" CausesValidation="False" CommandName="Delete"Text="删除" OnClientClick="return confirm('确认要删除吗?');"></asp:LinkButton><asp:LinkButton ID="LinkButton2" runat="server" CausesValidation="False" CommandName="Select"Text="选择"></asp:LinkButton></ItemTemplate>实用文档</asp:TemplateField></Columns><AlternatingRowStyle BackColor="Aquamarine" /></asp:GridView>/// <summary>/// 绑定数据到GridView/// </summary>private void GridViewBind(){检索数据库string strSql = "SELECT * FROM DB1";得到数据集this.GridView1.DataSource=conn.GetDs(strSql).Tables[0].DefaultView;this.GridView1.DataBind();实用文档}/// <summary>/// 编辑当前行/// </summary>/// <param name="sender"></param>/// <param name="e"></param>protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e){GridView1.EditIndex = e.NewEditIndex;//当前编辑行背景色高亮this.GridView1.EditRowStyle.BackColor = Color.FromName("#F7CE90");GridViewBind();}/// <summary>实用文档/// 取消编辑状态/// </summary>/// <param name="sender"></param>/// <param name="e"></param>protected void GridView1_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e){GridView1.EditIndex = -1;GridViewBind();}/// <summary>/// 删除记录过程/// </summary>/// <param name="sender"></param>/// <param name="e"></param>实用文档protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e){//得到单位编号string rowToDelete =GridView1.DataKeys[e.RowIndex].Values[0].ToString();//转换为整数//int ID=Convert.ToInt32(rowToDelete);//从数据库中删除string str = "DELETE FROM DB1 where DB1_1=" + "'" + rowToDelete + "'" + "";try{conn.RunSql(str);//重新绑定数据实用文档GridViewBind();}catch (Exception ex){Response.Write("数据库错误,错误原因:" + ex.Message);Response.End();}}/// <summary>/// 更新记录过程/// </summary>/// <param name="sender"></param>/// <param name="e"></param>protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)实用文档{string ID = GridView1.DataKeys[e.RowIndex].Values[0].ToString();string DB1_1 =((TextBox)GridView1.Rows[e.RowIndex].FindControl("TextBox1")).Text;//string DB1_2 =((TextBox)GridView1.Rows[e.RowIndex].FindControl("TextBox2")).Text;string DB1_2 =(((DropDownList))GridView1.Rows[e.RowIndex].FindControl("ddlXL")).SelectedI tem.Text;//判断表单项是否有空并给出提示信息if (DB1_1 == "" || DB1_2 == ""){conn.Alert("请输入完整信息!", Page);return;}实用文档try{conn.BuilderEdit("select * from DB1 where DB1_1 ='" + ID + "'");conn.dr["DB1_1"] = DB1_1;conn.dr["DB1_2"] = DB1_2;conn.BuilderEditClose();}catch (OracleException err){if (err.Code.ToString() == "1")conn.Alert("错误:已存在具有相同主键的记录", Page);elseconn.Alert("错误:未能添加记录", Page);}实用文档Response.Write("<script language='javascript'>alert('数据已被保存!');</script>");//返回浏览状态GridView1.EditIndex = -1;GridViewBind();}/// <summary>/// 分页事件/// </summary>/// <param name="sender"></param>/// <param name="e"></param>protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e){GridView1.PageIndex = e.NewPageIndex;GridViewBind();实用文档}/// <summary>/// 加入鼠标效果及为DropDownList绑定值/// </summary>/// <param name="sender"></param>/// <param name="e"></param>protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e){//为DropDownList绑定值if (((DropDownList)e.Row.FindControl("ddlXL")) != null){DropDownList ddlXL = (DropDownList)e.Row.FindControl("ddlXL");ddlXL.Items.Clear();ddlXL.Items.Add(new ListItem("博士", "1"));实用文档ddlXL.Items.Add(new ListItem("硕士", "2"));ddlXL.Items.Add(new ListItem("学士", "3"));}//加入鼠标滑过的高亮效果if (e.Row.RowType == DataControlRowType.DataRow)//判定当前的行是否属于datarow类型的行{//当鼠标放上去的时候先保存当前行的背景颜色并给附一颜色e.Row.Attributes.Add("onmouseover","currentcolor=this.style.backgroundColor;this.style.backgroundColor='yellow',t his.style.fontWeight='';");//当鼠标离开的时候将背景颜色还原的以前的颜色e.Row.Attributes.Add("onmouseout","this.style.backgroundColor=currentcolor,this.style.fontWeight='';");}//单击行改变行背景颜色实用文档if (e.Row.RowType == DataControlRowType.DataRow){e.Row.Attributes.Add("onclick", "this.style.backgroundColor='#99cc00'; this.style.color='buttontext';this.style.cursor='default';");}}2.0下含有CheckBox的GridView删除选定记录实例<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" PageSize="5"2 Width="726px" AllowPaging="True" AllowSorting="True"3 DataKeyNames="DB1_1,DB1_2" OnRowDeleting="GridVie w1_RowDeleting" OnPageIndexChanging="GridView1_PageIndexChanging" OnRowDataBound="GridView1_RowDataBound"OnSorting="GridView1_Sorting" Height="279px" >4 <Columns>实用文档5 <asp:TemplateField HeaderText="序号" >6 <ItemTemplate>7 <%# this.GridView1.PageIndex *this.GridView1.PageSize + this.GridView1.Rows.Count + 1%>8 </ItemTemplate>9 </asp:TemplateField>10 <asp:TemplateField HeaderText="选择" >11 <ItemTemplate>12 <asp:CheckBox ID="chkSelect" runat="server" ></asp:CheckBox>13 </ItemTemplate>14 </asp:TemplateField>15 <asp:TemplateField HeaderText="操作" ShowHeader="False">16 <ItemTemplate>实用文档17 <asp:LinkButton ID="lbtnDelete" runat="server" CausesValidation="False" CommandName="Delete"18 Text="删除" OnClientClick="return confirm('确认要删除吗?');"></asp:LinkButton>19 </ItemTemplate>20 </asp:TemplateField>21 </Columns>22 <AlternatingRowStyle BackColor="Aquamarine" />23 </asp:GridView>1 <asp:CheckBox ID="chkSelectAll" runat="server" Text="全部选中" OnCheckedChanged="chkSelectAll_CheckedChanged"AutoPostBack="True" ></asp:CheckBox>2 <asp:Button ID="btnDelete" runat="server" Text="删除" OnClick="btnDelete_Click" />1 protected void btnDelete_Click(object sender, EventArgs e)2 {实用文档3 string strDelete = "";4 for (int i = 0; i < this.GridView1.Rows.Count; i++)5 {6 string Label;7 bool isChecked =((CheckBox)GridView1.Rows[i].FindControl("chkSelect")).Checked;8 Label = ((Label)GridView1.Rows[i].FindControl("labXH")).Text;9 if (isChecked)10 {11 strDelete = "DB1_1" + "=" + Label;12 }13 }14 conn.RunSql("Delete from DB1 where " + strDelete15 this.chkSelectAll.Checked = false;16 GridViewBind();实用文档17 }1819 protected void chkSelectAll_CheckedChanged(object sender, EventArgs e)20 {21 //遍历GridView行获取CheckBox属性22 for (int i = 0; i < this.GridView1.Rows.Count; i++)23 {24 ((CheckBox)GridView1.Rows[i].FindControl("chkSelect")).Checked = this.chkSelectAll.Checked;25 }26 }实用文档。
中的三种分页⽅式总结通常分页有3种⽅法,分别是⾃带的数据显⽰空间如GridView等⾃带的分页,第三⽅分页控件如aspnetpager,存储过程分页等。
这⾥分别做总结。
第⼀种:使⽤GridView⾃带分页,这种是最简单的分页⽅法。
前台的⽅法:复制代码代码如下:<asp:GridView ID="GridView1" AllowPaging="true" runat="server"onpageindexchanging="GridView1_PageIndexChanging" PageSize="3"></asp:GridView>后台⽅法:代码复制代码代码如下:using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.UI;using System.Web.UI.WebControls;using JXSoft.TicketManage.Model;using JXSoft.TicketManage.BLL;using System.Text.RegularExpressions;using System.Data;namespace JXSoft.TicketManage.Web{public partial class Test : System.Web.UI.Page{protected void Page_Load(object sender, EventArgs e){if(!IsPostBack){BindData();}}protected void BindData(){DataTable dt=new DataTable();dt.Columns.Add("ID");dt.Columns.Add("Name");for (int i = 0; i < 10;i++ ){dt.Rows.Add(i.ToString(), i.ToString());}this.GridView1.DataSource = dt;this.GridView1.DataBind();}protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e){this.GridView1.PageIndex = e.NewPageIndex;BindData();}}}第⼆种:使⽤个性化显⽰的AspNetPager.dll进⾏分页此处需要添加aspnetpager.dll的引⽤前台:复制代码代码如下:<form id="form1" runat="server"><div><asp:GridView ID="GridView1" runat="server" ></asp:GridView><webdiyer:AspNetPager ID="AspNetPager1" runat="server"CustomInfoHTML="第%CurrentPageIndex%页,共%PageCount%页,每页%PageSize%条"FirstPageText="⾸页" LastPageText="尾页" LayoutType="Table" NextPageText="下⼀页"onpagechanging="AspNetPager1_PageChanging" PageIndexBoxType="DropDownList"PagingButtonLayoutType="Span" PrevPageText="上⼀页" ShowCustomInfoSection="Left"ShowPageIndexBox="Always" SubmitButtonText="Go" PageSize="4" TextAfterPageIndexBox="页"TextBeforePageIndexBox="转到"></webdiyer:AspNetPager></div></form>后台:复制代码代码如下:using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.UI;using System.Web.UI.WebControls;using JXSoft.TicketManage.Model;using JXSoft.TicketManage.BLL;using System.Text.RegularExpressions;using System.Data;namespace JXSoft.TicketManage.Web{public partial class Test : System.Web.UI.Page{protected void Page_Load(object sender, EventArgs e){if(!IsPostBack){BindData();}}protected void BindData(){DataTable dt=new DataTable();dt.Columns.Add("ID");dt.Columns.Add("Name");for (int i = 0; i < 10;i++ ){dt.Rows.Add(i.ToString(), i.ToString());}DataSet ds = new DataSet();ds.Tables.Add(dt);Pager(this.GridView1, this.AspNetPager1, ds);}protected void Pager(GridView dl, Wuqi.Webdiyer.AspNetPager anp, System.Data.DataSet dst){PagedDataSource pds = new PagedDataSource();pds.DataSource = dst.Tables[0].DefaultView;pds.AllowPaging = true;anp.RecordCount = dst.Tables[0].DefaultView.Count;pds.CurrentPageIndex = anp.CurrentPageIndex - 1;pds.PageSize = anp.PageSize;dl.DataSource = pds;dl.DataBind();}protected void AspNetPager1_PageChanging(object src, Wuqi.Webdiyer.PageChangingEventArgs e){AspNetPager1.CurrentPageIndex = e.NewPageIndex;BindData();}}}第三种:使⽤AspNetPager结合存储过程进⾏分页这种⽅法分页稍微复杂⼀些,但是可以应付⽐较⼤的数据量。
winform中DataGridView实现分页功能在winform的设计中,要实现对DataGridView控件的分页功能,需要两个控件:BindingSource、BindingNavigator,根据需求可对BindingNavigator进行自由的扩展,下图的示例则是根据一般需求对分页功能的实现。
红色区域是对BindingNavigator控件扩展后的效果。
具体实现过程://窗体构造方法中定义分页所需变量:intpageSize = 0; //每页显示行数intnMax = 0; //总记录数intpageCount = 0; //页数=总记录数/每页显示行数intpageCurrent = 0; //当前页号intnCurrent = 0; //当前记录行DataTabledtInfo = new DataTable(); //存取查询数据结果//分页功能实现public void InitDataSet(){//判断每页显示记录数是否为空,在初始话窗体时为真if (txtRecordNumOfPage.Text.Trim() == ""){try{//pageSize = Convert.ToInt16(ConfigurationManager.AppSettings["PageSize"]); //设置页面行数//读取配置文件中设置的每页显示条数stringszConfigFileName = Application.ExecutablePath + ".config";XmlDocument doc = new XmlDocument();doc.Load(szConfigFileName);XmlNode root = doc.SelectSingleNode("configuration");XmlNode node = root.SelectSingleNode("appSettings/add[@key='PageSize']");XmlElement el = node as XmlElement;pageSize = Convert.ToUInt16(el.GetAttribute("value"));}catch{}if (pageSize == 0){pageSize = 20; //如果读取配置文件失败,则默认将每页显示条数设置为20}txtRecordNumOfPage.Text = pageSize.ToString(); //界面显示的“每页记录数”赋值}else{//读取界面设置的每页显示条数pageSize = Convert.ToUInt16(txtRecordNumOfPage.Text.Trim());}//总记录数赋值nMax = dtInfo.Rows.Count;pageCount = (nMax / pageSize); //采用整除计算页数//判断整除后是否有余数,有则对页数进行+1if ((nMax % pageSize) > 0) pageCount++;pageCurrent = 1; //当前页数从1开始nCurrent = 0; //当前记录数从0开始//调用显示数据方法LoadData();}//显示数据方法private void LoadData(){intnStartPos = 0; //当前页面开始记录行intnEndPos = 0; //当前页面结束记录行//判断查询结果是否为空if (dtInfo.Rows.Count == 0){dgvExperInfo.DataSource = null;return;}else{DataTabledtTemp = dtInfo.Clone(); //克隆DataTable结构,即将字段名称进行复制if (pageCurrent == 1){bindingNavigatorMoveFirstPage.Enabled = false;bindingNavigatorMovePreviousPage.Enabled = false;}else{bindingNavigatorMoveFirstPage.Enabled = true;bindingNavigatorMovePreviousPage.Enabled = true;}if (pageCurrent == pageCount){nEndPos = nMax;bindingNavigatorMoveLastPage.Enabled = false;bindingNavigatorMoveNextPage.Enabled = false;}else{bindingNavigatorMoveLastPage.Enabled = true;bindingNavigatorMoveNextPage.Enabled = true;nEndPos = pageSize * pageCurrent;}nStartPos = nCurrent;lblPageCount.Text = pageCount.ToString(); //界面显示总页数lblCurrentPage.Text = Convert.ToString(pageCurrent);//当前页数txtCurrentPage.Text = Convert.ToString(pageCurrent);//跳转到页数的显示//从元数据源复制记录行for (inti = nStartPos; i<nEndPos; i++){dtTemp.ImportRow(dtInfo.Rows[i]);nCurrent++;}bdsInfo.DataSource = dtTemp;bdnInfo.BindingSource = bdsInfo;dgvExperInfo.DataSource = bdsInfo;dgvExperInfo.ClearSelection();}}//BindingNavigator控件上的项目点击事件,通过配置各个Item的Text值进行判断执行private void bdnInfo_ItemClicked(object sender, ToolStripItemClickedEventArgs e) {if (e.ClickedItem.Text == "上一页"){pageCurrent--;if (pageCurrent<= 0){MessageBox.Show("已经是第一页,请点击“下一页”查看!");pageCurrent++;return;}else{nCurrent = pageSize * (pageCurrent - 1);}LoadData();}if (e.ClickedItem.Text == "下一页"){pageCurrent++;if (pageCurrent>pageCount){MessageBox.Show("已经是最后一页,请点击“上一页”查看!"); pageCurrent--;return;}else{nCurrent=pageSize*(pageCurrent-1);}LoadData();}if (e.ClickedItem.Text == "首页"){pageCurrent = 1;nCurrent = 0;LoadData();}if (e.ClickedItem.Text == "尾页"){pageCurrent = pageCount;nCurrent = pageSize * (pageCurrent - 1);LoadData();}}//跳转页实现private void btnPage_Click(object sender, EventArgs e){if (txtCurrentPage.Text.Trim() != ""){pageCurrent = Convert.ToInt16(txtCurrentPage.Text.Trim()); //若输入页号大于最大显示页号,则跳转至最大页if (pageCurrent>pageCount){pageCurrent = pageCount;nCurrent = pageSize * (pageCurrent - 1);}//若输入页号小于1,则跳转至第一页else if (pageCurrent< 1){pageCurrent = 1;nCurrent = 0;LoadData();}//跳转至输入页号else{nCurrent = pageSize * (pageCurrent - 1); //当前行数定位 }//调用加载数据方法LoadData();}}//当前页输入字符限制private void txtCurrentPage_TextChanged(object sender, EventArgs e){boolIsNum = true;foreach (char c in txtCurrentPage.Text.Trim()){if (!char.IsNumber(c)) { IsNum = false; break; }}if (IsNum == false){txtCurrentPage.Text = pageCurrent.ToString();}}//当前页回车事件调用跳转页的操作private void txtCurrentPage_KeyPress(object sender, KeyPressEventArgs e){if (e.KeyChar == 13){btnPage_Click(sender,e);}}//每页显示记录数变更事件private void txtRecordNumOfPage_TextChanged(object sender, EventArgs e){boolIsNum = true;//输入字符限制foreach (char c in txtRecordNumOfPage.Text.Trim()){if (!char.IsNumber(c)) { IsNum = false; break; }}if (IsNum == false){txtRecordNumOfPage.Text = pageSize.ToString();}//判断输入的每页显示条数是否为空或是否为0,输入长度是否大于4位等情况if (txtRecordNumOfPage.Text.Trim() == "" || Convert.ToUInt32(txtRecordNumOfPage.Text.Trim()) == 0 || txtRecordNumOfPage.Text.Trim().Length > 4){txtRecordNumOfPage.Text = pageSize.ToString();}//规避了特殊情况后直接调用显示数据方法LoadDocInfoToDGV();}至此,winform中对DataGridView控件的分页功能已经实现,该方法是在网上查了相关资料后参照一些常用的分页效果进行了一些扩展,也在组长的要求下,完善了一些细节上的工作:由于屏幕分辨率的不同,用户可自行对每页显示条数进行设置,设置结果可以在关闭窗体的事件中保存至配置文件,下次进行默认读取;对分页控件中按钮操作的优化,判断是否能够使用的功能,代码中已经进行了体现;另外由于显示器分辨率不尽相同,需要在窗体加载时,设置控件显示的位置,也同样需要代码进行控制。
1.创建存储过程,数据库为Microsoft SQL Server 2000,use Northw ind go select * from Orders go if exists(select * from sysobjects where n ame='pro c_orders info' and type='P') drop p rocedure pro c_orders info go--创建查询表Orders的存储过程,@P age In dex 页面索引(页面索引=当前页数―1),@ PageSize 每页显示数据的多少(多少行)--@ PageCou nt 页面总数,@RecordCou nt 表中的记录总数create p rocedure p roc_orders info@P age In dex int,@P ageSize int,@P ageCou nt int out as declare @RecordCou nt in t,@strsql nvarchar(IOOO)select @RecordCou nt=cou nt(*) from ordersset @P ageCou nt=ceili ng(@RecordCou nt*1.O/@P ageSize) --第1种情况,表只够分成一页if @P age In dex=0 or @P ageCou nt<=1set @strsql=N'select top '+str( @P ageSize)+'* from Orders order by OrderID desc'--第2种情况,要查询表的最后一页(可看作表Orders已被分成几个页了) else if @P ageI ndex=@P ageCou nt-1set @strsql=N'select * from(selecttop '+str(@RecordCou nt- @P ageI ndex* @P ageSize)+'* from Orders order byOrderID asc) Temp Table order by OrderID desc'--第3种情况,查询非表的最后一页else set @strsql=N'select top '+str( @P ageSize)+'* from(selecttop '+str(@RecordCou nt- @P age In dex* @P ageSize)+'* from Orders order byOrderID asc) Temp Table order by OrderID desc'--执行SQL语句exec (@strsql) go2.创建显示数据的方法class CConnDB 里的方法returnConn() 返回数据库连接using System;using System.Data;using System.C on figurati on;using System.Web;using System.Web.Security;using System.Web.UI;using System.Web.UI.WebCo ntrols;using System.Web.UI.WebCo ntrols.Web Parts;usi ng System.Web.UI.HtmlCo ntrols;//导入需要使用的命名空间 using System.Data.SqlClie nt;/// <summary>/// CConnDB 的摘要说明/// </summary>p ublic class CConnDB{public CConn DB(){//using System;using System.Data;using System.C on figurati on;using System.Web;using System.Web.Security;using System.Web.UI;using System.Web.UI.WebCo ntrols;using System.Web.UI.WebCo ntrols.Web Parts;using System.Web.Ul.HtmlCo ntrols;//导入需要使用的命名空间using System.Data.SqlClie nt;/// <summary>/// CDis playOdersI nfo /// </summary>p ublic class CDis playOders Info{ // TODO: 在此处添加构造函数逻辑//p ublic SqlC onn ecti on retur nConn() {SqlC onn ecti on sconn = newSqlC onn ectio n( "server=.;database=Northwi nd;uid=sa; pwd=sa"); retur nsconn;}}class CDis pl ayOders Info 里的方法 DisplayOrdersInfo()返回一个 DataSet 的摘要说明CConnDB ccdb = new CCo nn DB(); // pageCou nt 为页面总数p rivate int p ageCou nt;public CDis pl ayOdersI nfoO{//// p ublic DataSet Disp layOrders In fo(i nt p age In dex,i nt p ageSize) {SqlC onn ecti on sconn = ccdb.retur nConnO;SqlComma nd scmd = new SqlComma nd(" proc_ordersi nfo",sc onn);scmd. Parameters.Add( new Sql Parameter^ @P age In dex",SqlDbTy pe.l nt));scmd. Parameters[O].Value = p age In dex;scmd .P arameters.Add( new Sql Parameter("@ PageSize",SqlDbTy pe.l nt));scmd .P arameters[1].Value = p ageSize;scmd. Parameters.Add( new Sql Parameter^ @P ageCou nt",SqlDbTy pe.l nt));scmd. Parameters[2].Directio n = P arameterDirectio n.Out put;ma ndType = Comma ndTyp e.Stored Pr ocedure; SqlDataAda pter sda = new SqlDataAda pter(scmd); DataSet ds = new DataSet();sda.Fill(ds);P ageCou nt = (in t)scmd. Parameters[2].Value;retur n ds;p ublic in t retur nP ageCou ntO { return p ageCou nt;}}3.页面设计和页面代码页面设计<%@ P age Lan guage="C#" AutoEve ntWireu p="true" Inherits=" Default" %> <!DOCT YPE html P UBLIC "-//W3C//DTD XHTML 1.0 Tra nsitio nal//EN" "htt p:///TR/xhtml1/DTD/xhtml1-tra nsitio nal.dtd"> <html xml ns="htt p:///1999/xhtml" ><head run at="server">// TODO:在此处添加构造函数逻辑CodeFile="Default.as px.cs"vtitle> 无标题页</title> </head> <body><form id="form1" run at="server"><div> <as p:Lin kButt on ID="lb Pr ev" run at="server"OnClick="lbPrev_Click"> 上一页</asp:LinkButton><as p:Label ID="lb lP ageNum" run at="server"></as p:Label><as p:Li nkButt on ID="lbNext" run at="server" On Click="lbNext_Click"> </as p:Lin kButt on>下一页<as p:GridView ID="gvMai n" run at="server"></as pGridView〉</div></form> </body></html>页面代码using System;using System.Data;using System.C on figurati on;using System.Web;using System.Web.Security;using System.Web.UI;usi ng System.Web.UI.WebC on trols;using System.Web.UI.WebCo ntrols.Web Parts;usi ng System.Web.Ul.HtmlCo ntrols;p ublic p artial class —Default : System.Web.UI. Page {CDis playOders Info cdoi = new CDis playOders Info。
DataGridView使⽤⾃定义控件实现简单分页功能(推荐)本例⼦使⽤⾃定义控件⽅法实现,数据库使⽤的是SQL Server,实现过程如下:1、新建⼀个⾃定义控件,命名为:PageControl。
2、PageControl代码如下:public partial class PageControl : UserControl{//委托及事件public delegate void BindPage(int pageSize, int pageIndex, out int totalCount);public event BindPage BindPageEvent;//属性public int PageSize { get; set; } = 1; //每页显⽰记录数public int PageIndex { get; set; } //页序号public int TotalCount { get; set; } //总记录数public int PageCount { get; set; } //总页数public PageControl(){InitializeComponent();//取消下划线linkFirst.LinkBehavior = LinkBehavior.NeverUnderline;linkPrev.LinkBehavior = LinkBehavior.NeverUnderline;linkNext.LinkBehavior = LinkBehavior.NeverUnderline;linkLast.LinkBehavior = LinkBehavior.NeverUnderline;linkGo.LinkBehavior = LinkBehavior.NeverUnderline;}/// <summary>/// 设置页/// </summary>public void SetPage(){//总记录数int totalCount = 0;BindPageEvent(PageSize, PageIndex + 1, out totalCount);TotalCount = totalCount;//总页数if (TotalCount % PageSize == 0)PageCount = TotalCount / PageSize;elsePageCount = TotalCount / PageSize + 1;//当前页及总页数txtCurrentPage.Text = (PageIndex + 1).ToString();lblTotalPage.Text = "共 " + PageCount.ToString() + " 页";}/// <summary>/// ⾸页/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void linkFirst_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e){if (e.Button == MouseButtons.Left){PageIndex = 0;SetPage();}}/// <summary>/// 上⼀页/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void linkPrve_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e){if (e.Button == MouseButtons.Left){PageIndex--;if (PageIndex < 0){PageIndex = 0;}SetPage();}}/// <summary>/// 下⼀页/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void linkNext_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e){if (e.Button == MouseButtons.Left){PageIndex++;if (PageIndex > PageCount - 1){PageIndex = PageCount - 1;}SetPage();}}/// <summary>/// 末页/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void linkLast_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e){if (e.Button == MouseButtons.Left){PageIndex = PageCount - 1;SetPage();}}/// <summary>/// 只能按0-9、Delete、Enter、Backspace键/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void txtSetPage_KeyPress(object sender, KeyPressEventArgs e){if ((e.KeyChar >= 48 && e.KeyChar <= 57) || e.KeyChar == 8 || e.KeyChar == 13 || e.KeyChar == 127){e.Handled = false;if (e.KeyChar == 13){Go();}}else{e.Handled = true;}}/// <summary>/// 指定页/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void linkGo_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e){if (e.Button == MouseButtons.Left){Go();}}private void Go(){if (string.IsNullOrEmpty(txtCurrentPage.Text)){MessageBox.Show("指定页不能为空。
第一种分页A.aspx文件<%@ Page Language="C#" CodeFile="真分页.aspx.cs" Inherits="_Default" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="/1999/xhtml" ><head runat="server"><title>自定义代码实现真分页</title></head><body><form id="form1" runat="server"><div><asp:GridView ID="GridView1" runat="server"></asp:GridView><br />共有记录<asp:Label ID="lblrecordamount" runat="server" BackColor="White" ForeColor="Red"></asp:Label>条 每页显示<asp:LabelID="lblpagesize" runat="server" BackColor="White" ForeColor="Red"></asp:Label>条<br />共有<asp:Label ID="lblpagecount" runat="server" BackColor="White"ForeColor="Red"></asp:Label>页 当前是第<asp:LabelID="lblcurpageindex" runat="server" BackColor="White" ForeColor="Red"></asp:Label>页<br /><br /><asp:LinkButton ID="lbFirst" runat="server" CommandName="first" OnCommand="lbLast_Command">首页</asp:LinkButton> <asp:LinkButton ID="lbPrev" runat="server" CommandName="prev" OnCommand="lbLast_Command">上一页</asp:LinkButton> <asp:LinkButton ID="lbNext" runat="server" CommandName="next" OnCommand="lbLast_Command">下一页</asp:LinkButton> <asp:LinkButton ID="lbLast" runat="server" CommandName="last" OnCommand="lbLast_Command">尾页</asp:LinkButton> 直接跳转到<asp:DropDownListID="ddl" runat="server" OnSelectedIndexChanged="ddl_SelectedIndexChanged"></asp:DropDownList>页</div></form></body></html>A.aspx.cs文件using System;using System.Data;using System.Configuration;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;public partial class _Default : System.Web.UI.Page{private int recordamount = 0; //表中的记录总数private int pagesieze = 5; //每页显示多少条记录private int pagecount = 0; //共需要分多少页private int curpageindex = 0; //当前是第几页protected void Page_Load(object sender, EventArgs e){//第一次请求该页时初始化recordamount、pagesieze、pagecount这3个值,这3个值在以后的显示中都不会改变if (!this.IsPostBack){SqlDataSource ds = new SqlDataSource();ds.ConnectionString= ConfigurationManager.ConnectionStrings["gvdb"].ConnectionString;ds.SelectCommand = "select count(*) from stuinfo";DataView dv = (DataView)ds.Select(DataSourceSelectArguments.Empty);int count = int.Parse(dv[0][0].ToString());//初始化表中的记录总数recordamount = count;//初始化总页数if (recordamount % pagesieze == 0){pagecount = recordamount / pagesieze;}else{pagecount = recordamount / pagesieze + 1;}//第一次浏览该页面时显示第一页,所以当前页就是第一页curpageindex = 1;//用Label记下这4个变量的值,这样这4个变量的值就可以在服务器和浏览器端来回传递而不需要每次显示时都计算一遍this.lblrecordamount.Text = recordamount.ToString();this.lblpagesize.Text = pagesieze.ToString();this.lblpagecount.Text = pagecount.ToString();this.lblcurpageindex.Text = curpageindex.ToString();//初始化DropDownList1for (int i = 1; i <= pagecount; i++){this.ddl.Items.Add(i.ToString());}//由于4个参数的值已经确定,那么要显示的记录是从几到几就都确定了,这时候直接显示就可以了ShowInfo();}//与应用程序不同的地方是此处一定要把当前页面的索引值和分页总数的值存储起来,因为//网页跳转过程中跳转入口的不确定性,后面随时要用到,所以必须单独存储。
//curpageindex、pagecount这2个值在“首页、上一页、下一页、尾页”这4个按钮的事件中需要使用,所以应该在每次加载时都为这2个参数赋值curpageindex = int.Parse(this.lblcurpageindex.Text);pagecount = int.Parse(this.lblpagecount.Text);}//根据4个变量来显示数据的方法public void ShowInfo(){SqlDataSource ds = new SqlDataSource();ds.ConnectionString = ConfigurationManager.ConnectionStrings["gvdb"].ConnectionString;ds.SelectCommand = "proc_stuinfopage";ds.SelectCommandType = SqlDataSourceCommandType.StoredProcedure;//为存储过程的2个参数赋值int start = pagesieze * (curpageindex - 1) + 1;int end = pagesieze * curpageindex;ds.SelectParameters.Add("startindex", start.ToString());ds.SelectParameters.Add("endindex", end.ToString());DataView dv = (DataView)ds.Select(DataSourceSelectArguments.Empty);this.GridView1.DataSource = dv;this.GridView1.AutoGenerateColumns = true;this.GridView1.DataBind();//改变当前是第几页这个Label的标签this.lblcurpageindex.Text = curpageindex.ToString();//实现ddl同步this.ddl.SelectedValue = curpageindex.ToString();//设置按钮的可用性if (curpageindex == 1){this.lbFirst.Enabled = false;this.lbPrev.Enabled = false;}else{this.lbPrev.Enabled = true;this.lbFirst.Enabled = true;}if (curpageindex == pagecount){this.lbLast.Enabled = false;this.lbNext.Enabled = false;}else{this.lbNext.Enabled = true;this.lbLast.Enabled = true;}}//“首页、上一页、下一页、尾页”这4个按钮的事件处理程序,共用一个事件处理程序protected void lbLast_Command(object sender, CommandEventArgs e){if (mandName == "first") //首页就是将当前页设为1{curpageindex = 1;}else if (mandName == "next") //下一页就是当前页+1{curpageindex++;}else if (mandName == "prev") //上一页就是当前页-1{curpageindex--;}else if (mandName == "last") //尾页就是当前页=总页数,也就是最后一页{curpageindex = pagecount;}//显示数据ShowInfo();}protected void ddl_SelectedIndexChanged(object sender, EventArgs e){string a = this.ddl.SelectedValue;curpageindex = int.Parse(a);ShowInfo();}}代码简析:看效果图就可以看出这种分页是在GridView外部分页,且其绑定对象是SqlDataSource因此它的分页代码是在GridView外写代码,相对叫简单,但确定是效果图看上去不是那么美观。