欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C# Winform 分頁(yè)功能的實(shí)現(xiàn)

 更新時(shí)間:2022年06月23日 11:04:20   作者:正人君子!  
本文主要介紹了C# Winform 分頁(yè)功能的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

首先創(chuàng)建一個(gè)用戶控件 如下圖 用到的控件 label、button、TextBox

 內(nèi)部代碼如下

 #region 分頁(yè)字段和屬性
 
        private int pageIndex = 1;
        /// <summary>
        /// 當(dāng)前頁(yè)數(shù)
        /// </summary>
        public virtual int PageIndex
        {
            get { return pageIndex; }
            set { pageIndex = value; }
        }
 
        private int pageSize = 100;
        /// <summary>
        /// 每頁(yè)記錄數(shù)
        /// </summary>
        public virtual int PageSize
        {
            get { return pageSize; }
            set { pageSize = value; }
        }
 
        private int recordCount = 0;
        /// <summary>
        /// 總記錄數(shù)
        /// </summary>
        public virtual int RecordCount
        {
            get { return recordCount; }
            set { recordCount = value; }
        }
 
        private int pageCount = 0;
        /// <summary>
        /// 總頁(yè)數(shù)
        /// </summary>
        public int PageCount
        {
            get
            {
                if (pageSize != 0)
                {
                    pageCount = GetPageCount();
                }
                return pageCount;
            }
        }
 
        #endregion
 
        #region 頁(yè)碼變化時(shí)觸發(fā)事件
 
        public event EventHandler OnPageChanged;
 
        #endregion
   #region 分頁(yè)及相關(guān)事件功能實(shí)現(xiàn)
 
        /// <summary>
        /// 設(shè)窗體控件全部可用
        /// </summary>
        private void SetFormCtrEnabled()
        {
            linkFirst.Enabled = true;
            linkPrevious.Enabled = true;
            linkNext.Enabled = true;
            linkLast.Enabled = true;
            btnGo.Enabled = true;
        }
 
        /// <summary>
        /// 計(jì)算總頁(yè)數(shù)
        /// </summary>
        /// <returns></returns>
        private int GetPageCount()
        {
            if (PageSize == 0)
            {
                return 0;
            }
            int pageCount = RecordCount / PageSize;
            if (RecordCount % PageSize == 0)
            {
                pageCount = RecordCount / PageSize;
            }
            else
            {
                pageCount = RecordCount / PageSize + 1;
            }
            return pageCount;
        }
        /// <summary>
        /// 用于客戶端調(diào)用
        /// </summary>
        public void DrawControl(int count)
        {
            recordCount = count;
            DrawControl(false);
        }
        /// <summary>
        /// 根據(jù)不同的條件,改變頁(yè)面控件的呈現(xiàn)狀態(tài)
        /// </summary>
        private void DrawControl(bool callEvent)
        {
 
            lblCurrentPage.Text = PageIndex.ToString();
            lblPageCount.Text = PageCount.ToString();
            lblTotalCount.Text = RecordCount.ToString();
            txtPageSize.Text = PageSize.ToString();
 
            if (callEvent && OnPageChanged != null)
            {
                OnPageChanged(this, null);//當(dāng)前分頁(yè)數(shù)字改變時(shí),觸發(fā)委托事件
            }
            SetFormCtrEnabled();
            if (PageCount == 1)//有且僅有一頁(yè)時(shí)
            {
                linkFirst.Enabled = false;
                linkPrevious.Enabled = false;
                linkNext.Enabled = false;
                linkLast.Enabled = false;
                btnGo.Enabled = false;
            }
            else if (PageIndex == 1)//當(dāng)前頁(yè)為第一頁(yè)時(shí)
            {
                linkFirst.Enabled = false;
                linkPrevious.Enabled = false;
            }
            else if (PageIndex == PageCount)//當(dāng)前頁(yè)為最后一頁(yè)時(shí)
            {
                linkNext.Enabled = false;
                linkLast.Enabled = false;
            }
        }
 
        #endregion
 
 
        #region 相關(guān)控件事件
 
        //首頁(yè)按鈕
        private void linkFirst_Click(object sender, EventArgs e)
        {
            PageIndex = 1;
            DrawControl(true);
        }
 
        //上一頁(yè)按鈕
        private void linkPrevious_Click(object sender, EventArgs e)
        {
            PageIndex = Math.Max(1, PageIndex - 1);
            DrawControl(true);
        }
 
        //下一頁(yè)按鈕
        private void linkNext_Click(object sender, EventArgs e)
        {
            PageIndex = Math.Min(PageCount, PageIndex + 1);
            DrawControl(true);
        }
 
        //尾頁(yè)按鈕
        private void linkLast_Click(object sender, EventArgs e)
        {
            PageIndex = PageCount;
            DrawControl(true);
        }
 
        /// <summary>
        /// 按下enter鍵,執(zhí)行跳轉(zhuǎn)頁(yè)面功能
        /// </summary>
        private void txtPageNum_KeyPress(object sender, KeyPressEventArgs e)
        {
            btnGo_Click(null, null);
        }
 
        /// <summary>
        /// 跳轉(zhuǎn)頁(yè)數(shù)限制
        /// </summary>
        private void txtPageNum_TextChanged(object sender, EventArgs e)
        {
            int num = 0;
            if (int.TryParse(txtPageNum.Text.Trim(), out num) && num > 0)
            {   //TryParse 函數(shù),將字符串轉(zhuǎn)換成等效的整數(shù),返回bool型,判斷是否轉(zhuǎn)換成功。
                //輸入除數(shù)字以外的字符是轉(zhuǎn)換不成功的
 
                if (num > PageCount)   //輸入數(shù)量大于最大頁(yè)數(shù)時(shí),文本框自動(dòng)顯示最大頁(yè)數(shù)
                {
                    txtPageNum.Text = PageCount.ToString();
                }
            }
        }
 
        /// <summary>
        /// 跳轉(zhuǎn)按鈕
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnGo_Click(object sender, EventArgs e)
        {
            int num = 0;
            if (int.TryParse(txtPageNum.Text.Trim(), out num) && num > 0)
            {
                PageIndex = num;
                DrawControl(true);
            }
        }
 
        #endregion
        bool isTextChanged = false;
        /// <summary>
        /// 每頁(yè)顯示的記錄數(shù)改變時(shí)
        /// </summary>
        private void txtPageSize_TextChanged(object sender, EventArgs e)
        {
            int num = 0;
            //輸入不符合規(guī)范時(shí),默認(rèn)設(shè)置為100
            if (!int.TryParse(txtPageSize.Text.Trim(), out num) || num <= 0)
            {
                num = 100;
                txtPageSize.Text = "100";
            }
            else
            {
                isTextChanged = true;
 
            }
            pageSize = num;
        }
        /// <summary>
        /// 光標(biāo)離開(kāi) 每頁(yè)設(shè)置文本框時(shí),顯示到首頁(yè)
        private void txtPageSize_Leave(object sender, EventArgs e)
        {
            if (isTextChanged)
            {
                isTextChanged = false;
                linkFirst_Click(null, null);
            }
        }

 符合我的分頁(yè)查詢方法

 /// <summary>
        /// 通用分頁(yè)查詢方法
        /// </summary>
        /// <param name="tableName">表名</param>
        /// <param name="strColumns">查詢字段名</param>
        /// <param name="strWhere">where條件</param>
        /// <param name="strOrder">排序條件</param>
        /// <param name="pageSize">每頁(yè)數(shù)據(jù)數(shù)量</param>
        /// <param name="currentIndex">當(dāng)前頁(yè)數(shù)</param>
        /// <param name="recordOut">數(shù)據(jù)總量</param>
        /// <returns>DataTable數(shù)據(jù)表</returns>
        public static List<String[]> SelectPaging(string tableName, string strColumns, string strWhere, string strOrder, int pageSize, int currentIndex, out int recordOut)
        {
            List<String[]> res;
            recordOut = Convert.ToInt32(search(string.Format("select count(*) from {0} where{1}" ,tableName, strWhere))[0][0]);
            string pagingTemplate = "select {0} from {1} where {2} order by {3} limit {4} offset {5} ";
            int offsetCount = (currentIndex - 1) * pageSize;
            string commandText = String.Format(pagingTemplate, strColumns, tableName, strWhere, strOrder, pageSize.ToString(), offsetCount.ToString());
            res = search(commandText);
            return res;
        }

附上我修改前的分頁(yè)查詢方法

/// <summary>
        /// 通用分頁(yè)查詢方法
        /// </summary>
        /// <param name="connString">連接字符串</param>
        /// <param name="tableName">表名</param>
        /// <param name="strColumns">查詢字段名</param>
        /// <param name="strWhere">where條件</param>
        /// <param name="strOrder">排序條件</param>
        /// <param name="pageSize">每頁(yè)數(shù)據(jù)數(shù)量</param>
        /// <param name="currentIndex">當(dāng)前頁(yè)數(shù)</param>
        /// <param name="recordOut">數(shù)據(jù)總量</param>
        /// <returns>DataTable數(shù)據(jù)表</returns>
public static DataTable SelectPaging(string tableName, string strColumns, string strWhere, string strOrder, int pageSize, int currentIndex, out int recordOut)
        {
            DataTable dt = new DataTable();
            recordOut = Convert.ToInt32(ExecuteScalar( "select count(*) from " + tableName));
            string pagingTemplate = "select {0} from {1} where {2} order by {3} limit {4} offset {5} ";
            int offsetCount = (currentIndex - 1) * pageSize;
            string commandText = String.Format(pagingTemplate, strColumns, tableName, strWhere, strOrder, pageSize.ToString(), offsetCount.ToString());
            DataSet ds= ExecuteDataSet(commandText);
            dt = ds.Tables[0];
            return dt;
        }

 兩種使用方式

 1、數(shù)據(jù)庫(kù)查詢

    private void pagerControl1_OnPageChanged(object sender, EventArgs e)
        {
            initData();
        }
 
   public CompanyData()
        {
            InitializeComponent();
            initData();
            //激活OnPageChanged事件
            pagerControl1.OnPageChanged += new EventHandler(pagerControl1_OnPageChanged);
        }
 
  private void initData()
        {
            
            StringBuilder stringBuilder = new StringBuilder();
            stringBuilder.Append(" 1=1 ");
            if (this.TbComName.Text != "")
            {
                stringBuilder.Append("and comName like '%" + this.TbComName.Text + "%'");
            }
            int RecordCount;
            List<String[]> res = DBHelper.SelectPaging("T_DM_COMPANY", " comId,comCode,comName,configureCode", stringBuilder.ToString(), " configureCode DESC ,comCode", pagerControl1.PageSize, pagerControl1.PageIndex, out RecordCount);
 
            List<Company> list = new List<Company>();
            for (int i = 0; i < res.Count; i++)
            {
                list.Add(new Company(res[i]));
            }
            pagerControl1.DrawControl(RecordCount);
 
            BindingSource bs = new BindingSource();
            bs.DataSource = list;
            this.CompanyDataDGW.DataSource = bs;
        }

 2、文件讀取數(shù)據(jù) 分頁(yè)

  private void pagerControl1_OnPageChanged(object sender, EventArgs e)
        {
            Init();
        }
 public ProductionConfig()
        {
            InitializeComponent();
            Init();
 
            //激活OnPageChanged事件
            pagerControl1.OnPageChanged += new EventHandler(pagerControl1_OnPageChanged);
        }
  private void Init()
        {
            //獲取template 中ip配置文件信息
            //String[] temIp = PropertiesGenerateUtil.getTemplate("template/ip.properties");
            int RecordCount;
            String[] temIp = PropertiesGenerateUtil.getTemplatePaging("template/ip.properties",pagerControl1.PageSize,pagerControl1.PageIndex,out RecordCount);
            List<entity.templateIp> templateIps = new List<entity.templateIp>();
            foreach (var item in temIp)
            {
                templateIps.Add(new entity.templateIp(item.Substring(0, item.IndexOf("="))));
            }
 
            pagerControl1.DrawControl(RecordCount);
 
            BindingSource bs = new BindingSource();
            bs.DataSource = templateIps;
            this.DGVTemplateIp.DataSource = bs;
           
        }
     /// <summary>
        /// 分頁(yè)查詢文件數(shù)據(jù)
        /// </summary>
        /// <param name="path">文件路徑</param>
        /// <param name="pageSize">每頁(yè)數(shù)量</param>
        /// <param name="currentIndex">當(dāng)前頁(yè)數(shù)</param>
        /// <param name="recordOut">數(shù)據(jù)總量</param>
        /// <returns></returns>
        public static string[] getTemplatePaging(string path, int pageSize, int currentIndex, out int recordOut)
        {
            string[] str;
            recordOut = getTemplate(path).Count();
            using (StreamReader sr = new StreamReader(path))
            {
                string line;
                List<string> list = new List<string> { };
                // 1 0 1*100
                // 2 100 2*100
                int startingValue = (currentIndex - 1) * pageSize;//起始值
                int terminationValue = currentIndex * pageSize;//終止值
                int tempValue = 0;//計(jì)數(shù)器
                while ((line = sr.ReadLine()) != null)
                {
                    if (line.Contains("#"))//判斷是注釋跳出
                        continue;
                    if(tempValue>=startingValue&&tempValue< terminationValue)//判斷是起始值添加
                        list.Add(line);
                    if (tempValue == terminationValue)//判斷是終止值跳出
                        break;
                    tempValue++;
                }
                str = list.ToArray<String>();
            }
            return str;
        }

附上運(yùn)行結(jié)果

到此這篇關(guān)于C# Winform 分頁(yè)功能的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)C# Winform 分頁(yè)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • c# 區(qū)分幾種定時(shí)器(timer)

    c# 區(qū)分幾種定時(shí)器(timer)

    這篇文章主要介紹了c# 幾種定時(shí)器(timer)的區(qū)別,文中講解非常細(xì)致,幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • C#?try?catch?使用實(shí)例詳解

    C#?try?catch?使用實(shí)例詳解

    在編程中,?try-catch-throw?是一種常見(jiàn)的錯(cuò)誤處理模式,這三個(gè)關(guān)鍵字通常一起使用,以捕獲異常、處理異常和重新拋出異常,這篇文章主要介紹了C#?try?catch?使用,需要的朋友可以參考下
    2023-09-09
  • C#日期格式強(qiáng)制轉(zhuǎn)換方法(推薦)

    C#日期格式強(qiáng)制轉(zhuǎn)換方法(推薦)

    下面小編就為大家分享一C#日期格式強(qiáng)制轉(zhuǎn)換的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2017-11-11
  • 如何使用C#操作幻燈片

    如何使用C#操作幻燈片

    一般大家經(jīng)常會(huì)用PPT遙控翻頁(yè)筆來(lái)遙控幻燈片,本文確為大家介紹了使用C#制作一個(gè)遙控幻燈片,感興趣的朋友可以參考下
    2015-07-07
  • C#使用二維數(shù)組模擬斗地主

    C#使用二維數(shù)組模擬斗地主

    這篇文章主要介紹了C#使用二維數(shù)組模擬斗地主的方法,通過(guò)C#的二維數(shù)組簡(jiǎn)單實(shí)現(xiàn)撲克隨機(jī)發(fā)牌的功能,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-04-04
  • DirectoryInfo引用一個(gè)相對(duì)目錄的實(shí)例

    DirectoryInfo引用一個(gè)相對(duì)目錄的實(shí)例

    這種特殊參數(shù)在Windows的命令提示符或者“運(yùn)行”對(duì)話框中都可以使用,等價(jià)于DOS中的cd命令參數(shù)。直接上代碼,一看你就懂了:
    2013-04-04
  • DirectInfo.GetFiles返回?cái)?shù)組的默認(rèn)排序示例

    DirectInfo.GetFiles返回?cái)?shù)組的默認(rèn)排序示例

    這篇文章主要介紹了,DirectInfo.GetFiles返回?cái)?shù)組的默認(rèn)排序示例NTFS和CDFS下,是按照字母順序,而FAT下,按照文件創(chuàng)建時(shí)間順序
    2014-01-01
  • Unity實(shí)現(xiàn)瞄準(zhǔn)鏡效果

    Unity實(shí)現(xiàn)瞄準(zhǔn)鏡效果

    這篇文章主要為大家詳細(xì)介紹了Unity實(shí)現(xiàn)瞄準(zhǔn)鏡效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-04-04
  • C#中的yield關(guān)鍵字詳解

    C#中的yield關(guān)鍵字詳解

    本文詳細(xì)講解了C#中的yield關(guān)鍵字,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-08-08
  • C#遍歷文件夾獲取指定后綴名文件

    C#遍歷文件夾獲取指定后綴名文件

    這篇文章主要為大家詳細(xì)介紹了C#遍歷文件夾獲取指定后綴名文件,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-03-03

最新評(píng)論