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(); } } }