asp.net中datagridview的分页功能用存储过程做,怎么做,最好能贴出代码,或给连接,给例子也可以,我要完整的而且是可以用的没有错误的,急用!!!!!!!!
c#+vs2005+sql2005
c#+vs2005+sql2005
解决方案 »
- 如何用上下键在gridview中切换行
- My97DatePicker怎样设置,让其只显示年份
- Request在类文件中怎么用
- detailsview在insert模式下,添加新纪录时,怎么使某个列有初始的值
- panel的显示和隐藏
- 如何得到转义后的TextBox.text
- 执行两个select语句时候返回的的数据只显示一条语句的。。。
- 在数据表中如何使用ItemDataBound事件给表中的记录增加一个编号列?
- 今天刚刚接触ASP.NET碰到一个小问题~~`请帮忙!!
- 出了什么问题?
- 循环判断一组数据 不符条件就弹出对话框修改内容 关闭之后继续循环
- 求助.....web窗体设计器中未能加载该文件.......
直接靠别人给"最好能贴出代码,或给连接,给例子也可以,我要完整的而且是可以用的没有错误的"
这种是工作的态度?是学习的态度?大学4年什么都没学会问题不大,至少要学会一件事情,知道如何去学习.如果连如何学习都丢掉,做什么事情想都不想,就要别人来帮忙,还直接给完全能用的源代码.那一辈子都是代码搬运工.见过太多这样的人了,刚毕业-->CTRL + V , CTRL + C 一年 --> 一年之后依旧是徘徊在原地,仅知道拖控件 ,CTRL + V , CTRL + C当然,也不是说CTRL + V , CTRL + C有错,谁都是从这个动作开始,但是在做这个动作的时候,至少要想下为什么,下次如何做更好."只是在网上搜索的那些,有些不完整,有些又是错误不会调试,学会调试,多试几次过不去了再上来问.是不是我一楼的那句"急用个P"刺痛了你的神经,让你张口就是"尼玛","250"?
存储过程:---亲测275万数据,分页速度N快create PROCEDURE PageList
@tablename nvarchar(50),
@fieldname nvarchar(50)='*',
@pagesize int,--每页显示记录条数
@currentpage int,--第几页
@orderid nvarchar(50),--主键排序
@sort int,--排序方式,1表示升序,0表示降序排列
@rowcount int output,--总记录数,共有几条信息
@pagecount int output--总页数,共有多少页
AS
declare @countsql nvarchar(50)
declare @sql nvarchar(200)
declare @subsql nvarchar(100)--not in子sql语句
declare @tmpOrderid nvarchar(50)
--返回总记录数,并赋值给输出参数@rowcount
set @countsql='select @totalcount=count(*) from '+@tablename
exec sp_executesql @countsql,N'@totalcount int out',@rowcount output--判断字段名是否为空
if @fieldname is null or @fieldname=''
set @fieldname=' * '--判断是否排序及排序方式
if @orderid is null or @orderid=''
set @tmpOrderid=' '
else
begin
if @sort=0
set @tmpOrderid='order by '+@orderid+' desc'
else
set @tmpOrderid='order by '+@orderid+' asc'
end--计算页数
if @rowcount%@pagesize>0
set @pagecount =(@rowcount/@pagesize)+1;
else
set @pagecount=@rowcount/@pagesize;--分页算法实现
set @subsql='select top'+str(@pagesize*(@currentpage-1))+' '+@orderid+' from '+@tablename+' '+@tmpOrderid
set @sql='select top'+str(@pagesize)+' '+@fieldname+' from '+@tablename+' where '+@orderid+' not in ('+@subsql+')'+@tmpOrderid
exec(@sql)
aspx文件: <asp:GridView ID="GridView1" runat="server">
</asp:GridView>
</div>
第<asp:Label ID="lblCurrent" runat="server"></asp:Label>页 | 每页<asp:Label ID="lblPageSize"
runat="server"></asp:Label>条 | 共有<asp:Label ID="lblPageTotal" runat="server"></asp:Label>页 | 共有<asp:Label ID="lblRowsTotal"
runat="server"></asp:Label>条信息 |
<asp:HyperLink ID="hlFirst" runat="server">首页</asp:HyperLink>
|
<asp:HyperLink ID="hlPrev" runat="server">上一页</asp:HyperLink>
|
<asp:HyperLink ID="hlNext" runat="server">下一页</asp:HyperLink>
|
<asp:HyperLink ID="hlLast" runat="server">尾页</asp:HyperLink><br /> .cs文件: protected void Page_Load(object sender, EventArgs e)
{
int CurrentPage,RowCount,PageCount;
int PageSize = 2;
if (Request["CurrentPage"] == null||Convert.ToInt32(Request["CurrentPage"])< 1)
{
CurrentPage=1;
}
else
{
CurrentPage=Convert.ToInt32(Request["CurrentPage"]);
} //数据库操作
SqlConnection sqlconn = new SqlConnection(ConfigurationManager.AppSettings["ConnStr"].ToString());
SqlCommand cmd = new SqlCommand("pagelist", sqlconn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Connection = sqlconn;
SqlParameter[] prams ={
new SqlParameter("@tablename",SqlDbType.NVarChar,50),
new SqlParameter("@fieldname",SqlDbType.NVarChar,50),
new SqlParameter("@pagesize",SqlDbType.Int),
new SqlParameter("@currentpage",SqlDbType.Int),
new SqlParameter("@orderid",SqlDbType.NVarChar,50),
new SqlParameter("@sort",SqlDbType.Int),
new SqlParameter("@rowcount",SqlDbType.Int),
new SqlParameter("@pagecount",SqlDbType.Int)};
prams[0].Value = "news";//表名
prams[1].Value ="*";//字段名
prams[2].Value =PageSize;//每页显示条数
prams[3].Value =CurrentPage;//当前页数
prams[4].Value ="id";//主键
prams[5].Value =1;//排序方式,0表示降序,1表示升序
prams[6].Direction = ParameterDirection.Output;//总记录数
prams[7].Direction = ParameterDirection.Output;//总页数
foreach(SqlParameter pram in prams)
{
cmd.Parameters.Add(pram);
}
sqlconn.Open();
SqlDataAdapter sda = new SqlDataAdapter();
DataSet ds = new DataSet();
sda.SelectCommand = cmd;
sqlconn.Close();
sda.Fill(ds);
//数据库操作结束 RowCount = (int)cmd.Parameters["@rowcount"].Value;
PageCount =(int)cmd.Parameters["@pagecount"].Value;
if (CurrentPage>PageCount)
{
Response.Redirect("CutPage.aspx?CurrentPage="+Convert.ToString(PageCount));
Response.End();
}
this.lblCurrent.Text = Convert.ToString(CurrentPage);
this.lblPageTotal.Text = Convert.ToString(PageCount);
this.lblRowsTotal.Text = Convert.ToString(RowCount);
this.lblPageSize.Text = Convert.ToString(PageSize); this.hlFirst.NavigateUrl = "CutPage.aspx?CurrentPage=1";
this.hlPrev.NavigateUrl = "CutPage.aspx?CurrentPage=" + Convert.ToString(CurrentPage-1);
this.hlNext.NavigateUrl = "CutPage.aspx?CurrentPage=" + Convert.ToString(CurrentPage+1);
this.hlLast.NavigateUrl = "CutPage.aspx?CurrentPage=" + Convert.ToString(PageCount);
if (Convert.ToInt32(CurrentPage) == 1)
{
this.hlPrev.Enabled = false;
this.hlFirst.Enabled = false;
}
if (Convert.ToInt32(CurrentPage) == PageCount)
{
this.hlNext.Enabled = false;
this.hlLast.Enabled = false;
} GridView1.DataSource = ds.Tables[0];
GridView1.DataBind();
}
this.hlNext.NavigateUrl = "CutPage.aspx?CurrentPage=" + Convert.ToString(CurrentPage+1);需要增加一个 textbox + input
在textbox设置需要跳转的页数
然后在input click事件中指向 :
CutPage.aspx?CurrentPage=" + textbox.text;
当然还有些细节要完善,例如防止index out of range另外还可以预先绑定多个 HyperLink 来达到 page <<|<1|2|3|4|5|>|>> 这种效果
就如CSDN的分页一样.
</asp:GridView>
<webdiyer:AspNetPager ID="AspNetPager1" runat="server" PageSize="10" OnPageChanging="AspNetPager1_PageChanging">
</webdiyer:AspNetPager>using System;
using System.Data;
using Wuqi.Webdiyer;
using ZhongCong.WebForm;public partial class MySql : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
DisplayData(AspNetPager1.PageSize, 1);
}
} private void DisplayData(int pageSize, int pageIndex)
{
string sqlStr = "select count(*) from 测试";
MySqlData md = new MySqlData();
AspNetPager1.RecordCount = Convert.ToInt32(md.ExecuteScalar(sqlStr));
sqlStr = String.Format("select * from 测试 limit {0},{1}", ((pageIndex - 1) * pageSize).ToString(), pageSize.ToString());
md.SetCommandText(sqlStr);
DataTable dt = md.FillDataTable();
md.Close();
GridView1.DataSource = dt;
GridView1.DataBind();
} protected void AspNetPager1_PageChanging(object src, PageChangingEventArgs e)
{
AspNetPager1.CurrentPageIndex = e.NewPageIndex;
DisplayData(AspNetPager1.PageSize, AspNetPager1.CurrentPageIndex);
}}