栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > .Net

数据控件系列之DataList分页显示篇

.Net 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

数据控件系列之DataList分页显示篇

一、前言

       前几个章节,就“容器与控件”、“跨页传值”等分两个系列进行了详细阐述,接下来,我们这个系列

将对数据控件DataList/Repeater、GrivewList/ListView和FormView/DetailsView进行系统阐述。

         以上三组控件,既有共同点,也有不同点,主要是:

1、使用效果不同:DataList/Repeater主要以项的形式对多个纪录进行重复显示,而FormView/DetailsView

     则是显示单个纪录,而GridView则是以表格形式显示多个纪录。

2、功能不同:DataList/Repeater功能相对简单,但使用灵活,便于根据需要布局、美化显示结果。而GridView/ListView

      功能强大,内置程序丰富。不管是布局,还是分页、排序、编辑等都有内置程序。所以GridView/ListView使用起来,

      比较容易, 不需要写大多代码,但是根据用户需要而改变的灵活性不够。

二、DataList分页功能的实现

     我们知道,GridView有自动分页功能,而DataList没有这个功能,所在,就要借助PageDataSource控件来帮助实现分页。

实现步骤:

1、定 义PageDataSource实例:  protected static PagedDataSource Page_Control=new PagedDataSource();

2、设定Page_Control实例的三个分页属性: AllowPaging、PageSize、CurrentPageIndex

       Page_Control.AllowPaging = true;      //允许分页设置为真
        Page_Control.PageSize = 6;             //每页显示项(纪录)数

        Page_Control.CurrentPageIndex = CurrentPageNum;  //当前页码

3、绑定分页实例与数据源:格式,分页实例名.DataSource=数据源名(可以是DataTable)

      如: Page_Control.DataSource = DlDataSet.Tables["DlTable"].DefaultView;   //将实例 Page_Control与名为"DlTable"的DataTable绑定

4、实现分页实例与DataList绑定:格式,DataList实例名.DataSoruce=分页实例名。如:下例,DataList实例名为: DLPage;

      分页实例名  Page_Control,具体如下:

        DLPage.DataSource = Page_Control;
        DLPage.DataBind();

5、在DataList中设分页按钮(功能)和定义分页事件:如,下例在DataList的脚注模板中设定了四个分页按FstPage( 首页)、PrePage(前一              页)、"NxtPage(下一页)   、 LasPage(最后页) 按 钮。在DataList头部定义OnItemCommand="事件程序"


   
           

                 RepeatColumns="2" OnItemCommand="DLPage_ItemCommand" OnItemDataBound="DLPage_ItemDataBound" >
               
                   


                         
                
                          
                             
                       
                       
                       
                 
姓名:<%# DataBinder.Eval(Container.DataItem,"fname") %>
工作单位:<%# DataBinder.Eval(Container.DataItem,"emp_id") %>
上岗日期: <%# DataBinder.Eval(Container.DataItem,"hire_date") %>

               
               
                    当前页:  
                   
                    总页数:
                   
                   


                    首页
                    前一页
                    下一页
                    最后页
                   

                   

                   
                   
                
               

           

6、编辑事件实现程序。如,本例事件程序名为:DLPage_ItemCommand,具体代码如下:

  protected void DLPage_ItemCommand(object source, DataListCommandEventArgs e)
  {
    switch (e.CommandName) 
    { 
        case "Fst":
            Page_Control.CurrentPageIndex=0;
            Datalist_Bind(Page_Control.CurrentPageIndex);
            break;
        case  "Pre":
            Page_Control.CurrentPageIndex=Page_Control.CurrentPageIndex-1;
            Datalist_Bind(Page_Control.CurrentPageIndex);
            break;
        case   "Nxt":
            Page_Control.CurrentPageIndex=Page_Control.CurrentPageIndex+1;
            Datalist_Bind(Page_Control.CurrentPageIndex);
            break;

        case  "Las":
            Page_Control.CurrentPageIndex = Page_Control.PageCount - 1;
            Datalist_Bind(Page_Control.CurrentPageIndex);
            break;
        case  "SchButton":
            if(e.Item.ItemType==ListItemType.Footer)
            {
            TextBox MyTextBox= (TextBox)e.Item.FindControl("SchText");
           
            int Dl_Number=0;   
             if(!MyTextBox.Equals(""))
              {
               Dl_Number=int.Parse(MyTextBox.Text.ToString());
               if(Dl_Number>0 & Dl_Number<=Page_Control.PageCount)
               {
                 Datalist_Bind(Dl_Number-1);
               }
              }
            } 
            break;
  }

工作原理:根据分页按钮的CommandName分别实现Case的相应部分。如:如果点击前一页按钮(ID="PrePage"),

因为其CommandName="Pre",则运行DLPage_ItemCommand(object source, DataListCommandEventArgs e)事件

中的Case "Pre"部分。  这样,由于   Page_Control.CurrentPageIndex在程序中减1,所以,便实现了向前翻页.

  case  "Pre":

                     Page_Control.CurrentPageIndex=Page_Control.CurrentPageIndex-1;
                     Datalist_Bind(Page_Control.CurrentPageIndex);
                      break;

7、重新绑定DataList、PageDatasource控件: 以选定后的当前"页数"为参数,运行Datalist_Bind(Page_Control.CurrentPageIndex)方法,  以实现对PageDatasource和DataList的重新绑定。具体代码如下:

public void Datalist_Bind(int CurrentPageNum)
    {
        Page_Control.AllowPaging = true;
        Page_Control.PageSize = 6;
        Page_Control.CurrentPageIndex = CurrentPageNum;
      
        string DLConString = ConfigurationManager.AppSettings["Conn"].ToString();
        SqlConnection DLCon = new SqlConnection(DLConString);
   
        string DLString = "select * from employee";
        SqlCommand DLSqlCommand = new SqlCommand(DLString, DLCon);
        SqlDataAdapter DlData = new SqlDataAdapter();
        DlData.SelectCommand = DLSqlCommand;
        DataSet DlDataSet = new DataSet();
        DLCon.Open();
        DlData.Fill(DlDataSet, "DlTable");

        Page_Control.DataSource = DlDataSet.Tables["DlTable"].DefaultView;//重新绑定PageDataSource控件Page_Control,
        DLPage.DataSource = Page_Control;             //重新绑定DataList控件 DLPage和PageDataSource控件Page_Control.
        DLPage.DataBind();
    }

三、总结提高:

 为了让大家有个整体感,将以上这些步骤整合对Web页中。

     整个程序源代码如下:

1、UI部分:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="DataListPage.aspx.cs" Debug="true" Inherits="DataListPage_DataListPage" %>




   
   


   
   
        
                             runat="server" RepeatColumns="2" OnItemCommand="DLPage_ItemCommand" OnItemDataBound="DLPage_ItemDataBound"    >
               
                   


                         
                
                          
                             
                       
                       
                       
                 
姓名:<%# DataBinder.Eval(Container.DataItem,"fname") %>
工作单位:<%# DataBinder.Eval(Container.DataItem,"emp_id") %>
上岗日期: <%# DataBinder.Eval(Container.DataItem,"hire_date") %>

               
               
                    当前页:  
                   
                    总页数:
                   
                   


                    ID="FstPage" runat="server" CommandName="Fst">首页
                    ID="PrePage" runat="server" CommandName="Pre">前一页
                    ID="NxtPage" runat="server" CommandName="Nxt">下一页
                    ID="LasPage" runat="server" CommandName="Las">最后页
                   

                   

                   
                   
                
               

           
            

   
   



2、代码部分:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
 
public partial class DataListPage_DataListPage : System.Web.UI.Page
{
    protected static PagedDataSource Page_Control=new PagedDataSource();
   
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            Datalist_Bind(0);
        }
    }
  

    public void Datalist_Bind(int CurrentPageNum)
    {
        Page_Control.AllowPaging = true;
        Page_Control.PageSize = 6;
        Page_Control.CurrentPageIndex = CurrentPageNum;
      
        string DLConString = ConfigurationManager.AppSettings["Conn"].ToString();
        SqlConnection DLCon = new SqlConnection(DLConString);
   
        string DLString = "select * from employee";
        SqlCommand DLSqlCommand = new SqlCommand(DLString, DLCon);
        SqlDataAdapter DlData = new SqlDataAdapter();
        DlData.SelectCommand = DLSqlCommand;
        DataSet DlDataSet = new DataSet();
   
        DLCon.Open();
        DlData.Fill(DlDataSet, "DlTable");

        Page_Control.DataSource = DlDataSet.Tables["DlTable"].DefaultView;
        DLPage.DataSource = Page_Control;
        DLPage.DataBind();
    }


    protected void DLPage_ItemCommand(object source, DataListCommandEventArgs e)
  {
    switch (e.CommandName) 
    { 
        case "Fst":
            Page_Control.CurrentPageIndex=0;
            Datalist_Bind(Page_Control.CurrentPageIndex);
            break;
        case  "Pre":
            Page_Control.CurrentPageIndex=Page_Control.CurrentPageIndex-1;
            Datalist_Bind(Page_Control.CurrentPageIndex);
            break;
        case   "Nxt":
            Page_Control.CurrentPageIndex=Page_Control.CurrentPageIndex+1;
            Datalist_Bind(Page_Control.CurrentPageIndex);
            break;

        case  "Las":
            Page_Control.CurrentPageIndex = Page_Control.PageCount - 1;
            Datalist_Bind(Page_Control.CurrentPageIndex);
            break;
        case  "SchButton":
            if(e.Item.ItemType==ListItemType.Footer)
            {
            TextBox MyTextBox= (TextBox)e.Item.FindControl("SchText");
           
            int Dl_Number=0;   
             if(!MyTextBox.Equals(""))
              {
               Dl_Number=int.Parse(MyTextBox.Text.ToString());
               if(Dl_Number>0 & Dl_Number<=Page_Control.PageCount)
               {
                 Datalist_Bind(Dl_Number-1);
               }
              }
            } 
            break;
  }
     
}

    protected void DLPage_ItemDataBound(object sender, DataListItemEventArgs e)
    {
     if(e.Item.ItemType==ListItemType.Footer){
        Label MyLabel = (Label)e.Item.FindControl("LblCurrentpage");
        Label MyCountLabel = (Label)e.Item.FindControl("LblCount");
        TextBox MyTextbox = (TextBox)e.Item.FindControl("SchText");
        LinkButton MyFstButton = (LinkButton)e.Item.FindControl("FstPage");
        LinkButton MyNextButton = (LinkButton)e.Item.FindControl("NxtPage");
        LinkButton MyPreButton = (LinkButton)e.Item.FindControl("PrePage");
        LinkButton LstButton = (LinkButton)e.Item.FindControl("LasPage");
        MyLabel.Text = (Page_Control.CurrentPageIndex + 1).ToString();
        MyCountLabel.Text = (Page_Control.PageCount).ToString();
        if (Page_Control.IsFirstPage) 
        {
            MyFstButton.Enabled = false;
            MyPreButton.Enabled = false;
        }
        if (Page_Control.IsLastPage) 
        {
            LstButton.Enabled = false;
            MyNextButton.Enabled = false;
        }
    
    }

  }
}
 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/954218.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号