ASP.NET技巧:做个DataList 可分页的数据源

发表于:2008-04-07来源:作者:点击数: 标签:
这个数据源,分两部分,一是从数据类中调出数据,然后在本数据源中对分页参数以及页面分页辅助控件进行操作!在前面有三个控件控制翻页,一个下拉列表,两个LinkButton! 下面 fill() 方法调用很简单,在页面中要重新绑定的地方 写上 fill() 就可以了,呵呵!
这个数据源,分两部分,一是从数据类中调出数据,然后在本数据源中对分页参数以及页面分页辅助控件进行操作!在前面有三个控件控制翻页,一个下拉列表,两个LinkButton!

  下面 fill() 方法调用很简单,在页面中要重新绑定的地方 写上 fill() 就可以了,呵呵!但是一定要写哦,例如翻页动作执行后!

  下面是db类中的ds方法

  public static DataTable ds(string que) 
  {
   //返回一个装载了SQL制定留言的数据表, 
   OleDbConnection con = odb.con();
   OleDbDataAdapter oda = new OleDbDataAdapter();
   oda.SelectCommand=new OleDbCommand(que,con);
   DataSet ds = new DataSet(); 
   oda.Fill(ds,"thc");
   return ds.Tables["thc"];
   con.Close();
  }
  
  下面方法使用的数据源就是上面的这个

  private void fill()
  {
   //做的一个方法,因为页内将有多次的绑定
   //这里设置一个隐藏的Label,用与储存当前的页索引
   int cup = Convert.ToInt32(pagelbl.Text);

   PagedDataSource ps = new PagedDataSource();//NEW一个分页数据源
   ps.DataSource = odb.ds("select * from guest order by id desc").DefaultView;//送一个SQL语句进去,确定该数据源的数据源
   ps.AllowPaging = true;//允许分页
   ps.PageSize = 2;//设置页的数量
   ps.CurrentPageIndex = cup-1;
   if (!IsPostBack)
   {
    //判断页面是否第一次载入
    for (int i = 1; i <= ps.PageCount; i++)
    {
     //循环出页码
     pageddl.Items.Add(i.ToString());
    }
   }
   //下面主要是控制上下翻页按纽是否起用
   pageup.Enabled = true;
   pagedown.Enabled = true;
   if (ps.IsFirstPage)
   {
    //如果是最前页,上页按纽不可用
    pageup.Enabled = false;
   }
   if (ps.IsLastPage)
   {
    //如果是最后页,下页按纽不可用
    pagedown.Enabled = false;
   }
   //设置页码下拉菜单当前选中的值
   pageddl.SelectedItem.Text = cup.ToString();
   //终于可以绑定给DataList了
   DataList1.DataSource = ps;
   DataList1.DataKeyField = "id";
   DataList1.DataBind();
  }

  再下面是翻页事件的处理

  protected void pageddl_SelectedIndexChanged(object sender, EventArgs e)
  {
   //页码下拉菜单事件
   pagelbl.Text = pageddl.SelectedItem.Text.ToString(); 
    fill();
  }
  protected void pagedown_Click(object sender, EventArgs e)
  {
   //下页事件
   pagelbl.Text = Convert.ToString(Convert.ToInt32(pagelbl.Text)+1);
   fill();
  }
  protected void pageup_Click(object sender, EventArgs e)
  {
   //上页事件
   pagelbl.Text = Convert.ToString(Convert.ToInt32(pagelbl.Text)-1);
   fill();
  }

原文转自:http://www.ltesting.net