最新文章
·不用组件实现上载功能...
·用ASP生成Chart
·ASP Image 使用范例
·ADO中sqlserver存储过...
·ADO.NET2.0的十大新特...
·域名专题 - 域名解析...
·我自己编的,可能大家...
·DropDownList 控件 Da...
·在ASP文件中调用DLL
·SQL SERVER的数据类型...
·在VB组件内调用Excel2...
·ASP判断E-Mail的合法...
相关文章
·Asp的安全管理(6)
·动态添加form项
·访问数据库(1)
·ASP3.0给我们带来的新...
·基于WEB的数据库查询
·javascript控制页面控...
·下拉连动的例子,自己...
·remote script文档(转...
·ASPmail组件使用帮助
·ASP技术在论坛中的运...
·全面了解 Cookie的传...
·把asp程序封装成可执...
推荐文章
·下拉连动的例子,自己...
·如何更好更快的debug
·排序方式解决“上下主...
·asp+初体验---用c#写...
·用 WSH 想ASP 一样 查...
·关于内部服务器500错...
·将模式对话框的返回值...
·分页函数
·用SQL备份和恢复SQL S...
·李由的奉献(三)----Ws...
·IMail基础教程(三) 建...
·有关ASP的一些常见问...
  您现在的位置: 休闲居 >> 网络学院 >> 网络编程 >> ASP >> 

DataGrid分页使用小结
  人气: 【字体:大 中 小】
  发布时间:2007-02-10 10:30:01

默认分页模式:
选中“允许分页”;页大小;页导航设置,可以是上下方式,也可以用页码方式
格式里可以设置“页导航”按钮的对起方式;
休 闲 居 编 辑
private void datashow()//绑定数据
{
string sql="server=127.0.0.1;database=ltp;user id=sa;password=";
SqlConnection mycon=new SqlConnection(sql);

string selsql="select * from data";
SqlDataAdapter da=new SqlDataAdapter(selsql,mycon);

DataSet ds=new DataSet();
da.Fill(ds,"data");

this.DataGrid1.DataSource=ds.Tables["data"];
this.DataGrid1.DataBind();

}

响应事件 PageIndexChanged()

this.DataGrid1.CurrentPageIndex=e.NewPageIndex;
datashow();





自定义导航控件的默认分页模式
当前页:this.Label1.Text=(this.DataGrid1.CurrentPageIndex+1).ToString();
因为CurrentPageIndex从0开始的,所以要+1

总页数:this.Label2.Text=this.DataGrid1.PageCount.ToString();

//第一页
this.DataGrid1.CurrentPageIndex=0;
//上一页
if(this.DataGrid1.CurrentPageIndex>0)
{
this.DataGrid1.CurrentPageIndex-=1;
this.datashow();
}
//下一页
if(this.DataGrid1.CurrentPageIndex<(this.DataGrid1.PageCount-1))
{
this.DataGrid1.CurrentPageIndex+=1;
this.datashow();
}
//最后一页
this.DataGrid1.CurrentPageIndex=this.DataGrid1.PageCount-1


最后再 datashow();



自定义数据分页--非常重要!(提高性能效率)
每次this.datashow();是提取全部数据,反而降低了效率。

正确的方法:
1,选中“允许分页”;“允许自定义分页”;页大小。
2,添加导航按钮,设置CommandName属性,previous,next
3,代码:

//记录每一页的开始索引
int startindex;

private void Page_Load(object sender, System.EventArgs e)
{
//自定义按钮事件
this.btnprevious.Click+=new System.EventHandler(this.NavigateToPage);
this.btnnext.Click+=new System.EventHandler(this.NavigateToPage);

//or OnCommand="NavigateToPage"

if(!IsPostBack)
{
startindex=0;

//得到数据源的记录数,并指派给DataGrid1

string constr="server=127.0.0.1;database=ltp;user id=sa;password=";
SqlConnection mycon=new SqlConnection(constr);
mycon.Open();

string sql="select 总数=count(*) from data";
SqlCommand com=new SqlCommand(sql,mycon);

SqlDataReader dr=com.ExecuteReader(CommandBehavior.SingleRow);
if(dr.Read())
this.DataGrid1.VirtualItemCount=(int)dr["总数"];
dr.Close();
mycon.Close();

//
this.bindGrid(startindex,"previous");



}
}


//自定义按钮事件
private void NavigateToPage(object sender,System.EventArgs e)
{
string pageinfo=((Button)sender).CommandName;
switch(pageinfo)
{
case "previous":
if(this.DataGrid1.CurrentPageIndex>0)
{
this.DataGrid1.CurrentPageIndex-=1;

}
break;

case "next":
if(this.DataGrid1.CurrentPageIndex<(this.DataGrid1.PageCount-1))
{
this.DataGrid1.CurrentPageIndex+=1;

}
break;

}

//得到开始的索引
startindex=this.DataGrid1.CurrentPageIndex*this.DataGrid1.PageSize;
//重新绑定
this.bindGrid(startindex,pageinfo);


}

//从数据源提取所需的数据记录--方法2(有int序号的表)
private void bindGrid2(int startindex,string pageinfo)
{
string constr="server=127.0.0.1;database=ltp;user id=sa;password=";
SqlConnection mycon=new SqlConnection(constr);
mycon.Open();

string sql="select top 5 * from data where 序号>="+startindex+" order by 序号";
SqlDataAdapter da=new SqlDataAdapter(sql,mycon);

DataSet ds=new DataSet();
da.Fill(ds,"data");
this.DataGrid1.DataSource=ds.Tables["data"];
this.DataGrid1.DataBind();

mycon.Close();


}


//从数据源提取所需的数据记录--方法1(按某字符串列排序的)
private void bindGrid(int startindex,string pageinfo)
{
string constr="server=127.0.0.1;database=ltp;user id=sa;password=";
SqlConnection mycon=new SqlConnection(constr);
mycon.Open();

SqlCommand com=new SqlCommand();

switch(pageinfo)
{
case "previous":
string sql="select top 5 * from data where 持股名称>=@id order by 持股名称";
com=new SqlCommand(sql,mycon);

// com=new SqlCommand("select top 5 * from data where 持股名称>=@id order by 持股名称",mycon);

if(startindex==0)
{
com.Parameters.Add("@id",SqlDbType.NVarChar,10).Value="";
}
else
{
//把开始
com.Parameters.Add("@id",SqlDbType.NVarChar,10).Value=ViewState[(this.DataGrid1.CurrentPageIndex+1).ToString()];
// com.Parameters.Add("@id",SqlDbType.NVarChar,10).Value=this.DataGrid1.Items[0].Cells[1].Text;
}
break;

case "next":
string sql2="select top 5 * from data where 持股名称>@id order by 持股名称";
com=new SqlCommand(sql2,mycon);

//把最后一行的列值赋给下一页开始
com.Parameters.Add("@id",SqlDbType.NVarChar,10).Value=this.DataGrid1.Items[4].Cells[1].Text;
break;
}

SqlDataReader dr=com.ExecuteReader();
this.DataGrid1.DataSource=dr;
this.DataGrid1.DataBind();
dr.Close();
mycon.Close();

//重新得到当前开始第一行的列值
ViewState[(this.DataGrid1.CurrentPageIndex+1).ToString()]=this.DataGrid1.Items[0].Cells[1].Text;


}

≡ 查看、发表评论 ≡