Newer
Older
EMS_REFACTOR / PaginationFeaturesUtil.cs
nn-203 on 26 Jul 2017 5 KB first commit
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using GeoScene.Data;

namespace Cyberpipe
{
    class PaginationFeaturesUtil
    {
        private static int _total = 0;
        private static int _beginIndex = 1;
        private static int _pagesize = 10;
        private static MainFrm.PageControlStuct _pageControl;
        private static MainFrm.DataGridViewDelegate _mInitDataGridViewX1;
        private static PaginationFeaturesUtil _singlePagination = null;
        private static string _queryInfo = "";
        private static string _layerName = "";
        private static GSOFeatures _features;
        private static string[] _fields;
        public static PaginationFeaturesUtil InitPagination(int total, MainFrm.PageControlStuct pageControl, MainFrm.DataGridViewDelegate mInitDataGridViewX1, string queryInfo, string layerName, GSOFeatures features,string [] fields)
        {
            if (_singlePagination == null)
            {
                _singlePagination = new PaginationFeaturesUtil( total, pageControl, mInitDataGridViewX1, queryInfo, layerName, features, fields);
               _pageControl.firstpage.Click += _singlePagination.FirstPageButtonClick;
               _pageControl.nextpage.Click += _singlePagination.NextPageButtonClick;
               _pageControl.prepage.Click += _singlePagination.PrePageButtonClick;
               _pageControl.lastpage.Click += _singlePagination.LastPageButtonClick;
               return _singlePagination;
            }
            _queryInfo = queryInfo;
            _layerName = layerName;
            _features = features;
            _fields = fields;
            _total = total;
            return _singlePagination;
        }

        private PaginationFeaturesUtil(int total, MainFrm.PageControlStuct pageControl, MainFrm.DataGridViewDelegate mInitDataGridViewX1, string queryInfo, string layerName, GSOFeatures features, string[] fields)
        {
            _pageControl = pageControl;
            _mInitDataGridViewX1 = mInitDataGridViewX1;
            _queryInfo = queryInfo;
            _layerName = layerName;
            _total = total;
            _features = features;
            _fields = fields;
        }

        /// <summary>
        /// 执行sql语句,将执行的分页结果加载到指定datatable上
        /// </summary>
        public void FillDataGridView()
        {
            DataTable table = ConvertGsoFeatures2DataTable(_features, _fields, _beginIndex, _pagesize);
            ComputePageInfo(_beginIndex, _pagesize, _total);
            _mInitDataGridViewX1(table, _queryInfo, _layerName, true);
            //控制首页、上一页、下一页、末页按钮的显示
            _pageControl.nextpage.Visible = _beginIndex + _pagesize - 1 < _total;
            _pageControl.lastpage.Visible = _beginIndex + _pagesize - 1 < _total;
            _pageControl.firstpage.Visible = _beginIndex > 1;
            _pageControl.prepage.Visible = _beginIndex > 1;
        }
        private void ComputePageInfo(int begin, int pagesize, int total)
        {
            int pageCount = (total - 1) / pagesize + 1;
            int curPage = begin / pagesize + 1;
            _pageControl.pageinfo.Text = "每页" + pagesize + "条," + curPage + "/" + pageCount + "页";
        }
        /// <summary>
        /// 分页查询
        /// </summary>
        /// <param name="features"></param>
        /// <param name="field"></param>
        /// <param name="begin"></param>
        /// <param name="pagesize"></param>
        /// <returns></returns>
        public static DataTable ConvertGsoFeatures2DataTable(GSOFeatures features, string[] field, int begin, int pagesize)
        {
            if (features == null || features.Length == 0 || field.Length == 0) return null;
            DataTable result = new DataTable();
            foreach (string t in field)
            {
                result.Columns.Add(t, typeof(String));
            }
            int i = 0;
            //while (i < begin) i++;
            for (; i < features.Length && i < begin + pagesize; i++)
            {
                GSOFeature feature = features[i];
                string[] values = new string[field.Length];
                for (int j = 0; j < field.Length; j++)
                {
                    string value = feature.GetFieldAsString(field[j]);
                    values[j] = value;
                }
                result.Rows.Add(values);
            }
            return result;
        }

        /// <summary>
        /// 重置查询条件
        /// </summary>
        public static void ResetPagination()
        {
            _total = 0;
            _beginIndex = 1;

        }

        private void FirstPageButtonClick(object sender, EventArgs e)
        {
            _beginIndex = 1;
            FillDataGridView();
        }
        private void NextPageButtonClick(object sender, EventArgs e)
        {

            _beginIndex = _beginIndex + _pagesize;
            FillDataGridView();
        }
        private void PrePageButtonClick(object sender, EventArgs e)
        {

            _beginIndex = _beginIndex - _pagesize;
            FillDataGridView();
        }
        private void LastPageButtonClick(object sender, EventArgs e)
        {
            while (_beginIndex < _total - _pagesize + 1) _beginIndex += _pagesize;
            FillDataGridView();
        }

    }
}