WPF 分页控件

来源:互联网 发布:国网广电网络整合2017 编辑:程序博客网 时间:2024/05/21 21:35

控件 页面

<StackPanel Orientation="Horizontal" VerticalAlignment="Center" Style="{StaticResource stcPager}">        <Button Name="FirstButton" Content="首页" Click="Button_Click" Style="{StaticResource btnPager}"/>        <Button Name="PreButton" Content="上一页" Click="Button_Click" Style="{StaticResource btnPager}"/>        <ItemsControl Name="icPage">            <ItemsControl.ItemTemplate>                <DataTemplate>                    <Button Content="{Binding text}" Click="Button_Click" Style="{Binding style}"/>                </DataTemplate>            </ItemsControl.ItemTemplate>            <ItemsControl.ItemsPanel>                <ItemsPanelTemplate>                    <WrapPanel/>                </ItemsPanelTemplate>            </ItemsControl.ItemsPanel>        </ItemsControl>        <Button Name="NextButton" Content="下一页" Click="Button_Click" Style="{StaticResource btnPager}"/>        <Button Name="LastButton" Content="尾页" Click="Button_Click" Style="{StaticResource btnPager}"/>        <TextBlock Text="转到 " Style="{StaticResource txtPager}"/>        <ComboBox Name="cbGoto" IsEditable="True"/>        <TextBlock Text="  共" Style="{StaticResource txtPager}"/>        <TextBlock Name="tbPageCount" Style="{StaticResource txtPager}"/>        <TextBlock Text="页" Style="{StaticResource txtPager}"/>        <TextBlock Text=" / " Style="{StaticResource txtPager}"/>        <TextBlock Text="共" Style="{StaticResource txtPager}"/>        <TextBlock Name="tbRecordCount" Style="{StaticResource txtPager}"/>        <TextBlock Text="条 " Style="{StaticResource txtPager}"/>        <DockPanel Visibility="Collapsed">            <TextBlock Text="当前第" Style="{StaticResource txtPager}"/>            <TextBlock Name="tbPageIndex" Style="{StaticResource txtPager}"/>            <TextBlock Text="页" Style="{StaticResource txtPager}"/>        </DockPanel>    </StackPanel>

控件页 后台

 public delegate void PageIndexChangingEventHandler(int pageIndex, EventArgs e);    /// <summary>    /// Interaction logic for BtnPager.xaml    /// </summary>    public partial class BtnPage: UserControl    {        public BtnPage()        {            InitializeComponent();        }        private int pageIndex = 1;        public int PageIndex        {            get { return pageIndex; }            set { pageIndex = value; }        }        private int pageSize = 10;        /// <summary>        /// 页面记录数 应与DataGrid的PageSize保持一致        /// </summary>        public int PageSize        {            get { return pageSize; }            set            {                //if (value > 0)                //{                    pageSize = value;                    Load();                //}            }        }        private int recordcount = 0;        /// <summary>        /// 记录总数        /// </summary>        public int RecordCount        {            get { return recordcount; }            set            {                //if (value > 0)                //{                    recordcount = value;                    Load();                //}            }        }        private int pageCount;        private int maxPageBtnNum = 8;        /// <summary>        /// 要显示的页数        /// </summary>        public int MaxPageBtnNum        {            get { return maxPageBtnNum; }            set { if (value != 0) maxPageBtnNum = value; }        }        /// <summary>        ///         /// </summary>        public event PageIndexChangingEventHandler PageIndexChangingEvent;        ///// <summary>        ///// button Content对应的值        ///// </summary>        private void Button_Click(object sender, RoutedEventArgs e)        {            Button bt = sender as Button;            switch (bt.Name)            {                case "FirstButton":                    pageIndex = 1;                    break;                case "LastButton":                    pageIndex = pageCount;                    break;                case "PreButton":                    if (pageIndex > 1) pageIndex--;                    break;                case "NextButton":                    if (pageIndex < pageCount) pageIndex++;                    break;                default:                    pageIndex = int.Parse(bt.Content.ToString());                    break;            }            PageChangeSet(e);        }        /// <summary>        /// 设置button的Content        /// </summary>        private void BindList()        {            if (pageIndex > 1)            {                FirstButton.IsEnabled = true;                PreButton.IsEnabled = true;            }            else            {                FirstButton.IsEnabled = false;                PreButton.IsEnabled = false;            }            if (pageIndex < pageCount)            {                LastButton.IsEnabled = true;                NextButton.IsEnabled = true;            }            else            {                LastButton.IsEnabled = false;                NextButton.IsEnabled = false;            }            int halfNum = maxPageBtnNum % 2 == 0 ? maxPageBtnNum / 2 : (maxPageBtnNum / 2 + 1);            int fromIndex, toIndex;            if (pageIndex <= halfNum)                fromIndex = 1;            else                fromIndex = pageIndex - halfNum;            if (pageCount - pageIndex <= halfNum)                toIndex = pageCount;            else                toIndex = pageIndex + halfNum;            ArrayList btnIndexList = new ArrayList();            for (int i = fromIndex; i <= toIndex; i++)            {                if (i == pageIndex)                    btnIndexList.Add(new { text = i, style = this.FindResource("btnPager_Act") as Style });                else                    btnIndexList.Add(new { text = i, style = this.FindResource("btnPager") as Style });            }            icPage.ItemsSource = btnIndexList;            icPage.Items.Refresh();            List<int> cbbIndexList = new List<int>();            for (int i = 1; i <= pageCount; i++)            {                cbbIndexList.Add(i);            }            cbGoto.SelectionChanged -= new SelectionChangedEventHandler(cbGoto_SelectionChanged);            cbGoto.ItemsSource = cbbIndexList;            cbGoto.Items.Refresh();            cbGoto.Text = pageIndex.ToString();            cbGoto.SelectionChanged += new SelectionChangedEventHandler(cbGoto_SelectionChanged);            tbPageCount.Text = pageCount.ToString();            tbRecordCount.Text = RecordCount.ToString();            tbPageIndex.Text = pageIndex.ToString();        }        /// <summary>        /// 翻页前的设置        /// </summary>        /// <param name="e"></param>        private void PageChangeSet(EventArgs e)        {            BindList();            PageIndexChangingEvent(PageIndex, e);        }        /// <summary>        /// 加载,当数据条数变化时,重新加载        /// </summary>        private void Load()        {            pageCount = (recordcount % pageSize == 0) ? recordcount / pageSize : (recordcount / pageSize + 1);            BindList();        }        /// <summary>        /// 页面下拉框        /// </summary>        /// <param name="sender"></param>        /// <param name="e"></param>        private void cbGoto_SelectionChanged(object sender, SelectionChangedEventArgs e)        {            try            {                pageIndex = int.Parse(cbGoto.SelectedValue.ToString());                PageChangeSet(e);            }            catch (Exception) { }        }    }
使用页 后台

service.GetPageList(PageIndex, PageSize, OrderBy, strsql, ref count);
dgplist.PageIndex = pageIndex;dgplist.PageSize = pageSize;dgplist.RecordCount = count;


分页方法

/// <summary>        /// 分页        /// </summary>        /// <param name="PageIndex">页索引</param>        /// <param name="PageSize">页大小</param>        /// <param name="Table">表名</param>        /// <param name="Field">返回的字段为*表示所有的字段</param>        /// <param name="OrderBy">排序规则</param>        /// <param name="PK">主键列,如果表没有主键,随便写一个列即可</param>        /// <param name="Filter">过滤条件</param>        /// <param name="MaxPage"> 执行结果 -1 error, 0 false, 大于1表示一共有几页</param>        /// <param name="TotalRow">记录总数</param>        /// <param name="Descript">对分页的描述</param>        /// <returns></returns>        public static DataSet GetPageList(int PageIndex, int PageSize, string Table, string Field, string OrderBy, string PK, string Filter, ref int MaxPage, ref int TotalRow, ref string Descript)//out是在外面不能赋值的        {            if (Filter == null)            {                Filter = "";            }            SqlParameter[] pars = new SqlParameter[] {                new SqlParameter("@PageIndex", PageIndex),                new SqlParameter("@PageSize", PageSize),                new SqlParameter("@Table", Table),                new SqlParameter("@Field", Field),                new SqlParameter("@OrderBy", OrderBy),                new SqlParameter("@PK", PK),                new SqlParameter("@Filter", Filter),                new SqlParameter("@MaxPage", MaxPage),                 new SqlParameter("@TotalRow", TotalRow),                  new SqlParameter("@Descript", Descript)            };            pars[7].Direction = ParameterDirection.Output;            pars[8].Direction = ParameterDirection.Output;            pars[9].Direction = ParameterDirection.Output;            DataSet ds = RunProcedure("RowNumberPagination", pars, "ds");            MaxPage = (int)pars[7].Value;            TotalRow = (int)pars[8].Value;            Descript = pars[9].Value.ToString();            return ds;        }






原创粉丝点击