CS窗体程序数据列表分页

        以前,觉得winform程序分页很无趣,也没实际意义,直到近期的项目实践中让我认识到原来winform数据列表分页也是非常有必要的,因为由于数据量过大的情况,当窗体在初始加载数据的时候如果不做条件的限制就会是程序假死状态,甚至直接崩溃,那么问题来了,究竟如何做才能达到性能上的优化呢,下面具体讲解实现思路,当然做法不一,如果有大佬有更好的实现方法,还望不吝赐教。

           就以Orcle数据库为例,近期的项目数据库运用Oracle数据库,数据量达到百万级别的,也查找了一些数据性能优化的方法,可是还是不能根本解决问题,最后认真思索一番,认为如果数据批量请求不就可以达到目的了吗,后来查询了一系列关于Oralce数据库的分页方法,最终整合了一下达到分页的效果,具体见如下代码:

  public DataTable InstockInfo(int pagesize, int pagenum)
        {
            int startnum = pagesize * pagenum - (pagesize - 1);
            int endnum = pagesize * pagenum;
            string sql = @" SELECT * FROM (SELECT tab.*,ROWNUM AS CON FROM ( SELECT INSTOCK_ORDER_NO AS ORDER_NO,(SELECT NAME FROM t_auth_organization WHERE ID=DEPT_ID) AS WH_NAME,INVOICE_NO,PACKAGE_NO AS TRANS_ORDER_NO,(SELECT SUM(BUY_NUM) FROM T_BUSIS_INSTOCK_DETAIL WHERE INSTOCK_ORDER_NO=INS.INSTOCK_ORDER_NO) AS BUY_NUM,SUP_ACCT_CODE,(CASE INSTOCK_STATUS  WHEN '0' THEN '未验货' WHEN'1' THEN '已验货' WHEN '2' THEN '已入库' ELSE NULL END)AS STATUS,CREATEBY_NAME AS CREATE_NAME,  CREATE_TIME ,(CASE CHECK_STATUS WHEN '0' THEN '否' WHEN '1' THEN '是' ELSE NULL END )AS CHECK_STATUS,DEPT_ID, ZN_CODE,(CASE BILL_SOURCE  WHEN '1' THEN '同步' WHEN'2' THEN 'PC自建' WHEN '3' THEN 'PDA自建'WHEN '4' THEN '扣现货' ELSE NULL END) AS BILL_SOURCE,SUP_ACCT_ID  FROM T_BUSIS_INSTOCK INS WHERE INSTOCK_TYPE='2' AND INSTOCK_STATUS!='2'   ORDER BY CREATE_TIME DESC ) tab WHERE ROWNUM <=" + endnum + ")  WHERE CON >="+ startnum + "";
            return OracleHelper.ExecuteDataTable(sql);
        }

  

  可以看到,当初始加载数据的时候,需要传入页码,每页显示数据量两个参数即可,这样就达到了我们在初次加载数据的时候快速的处理数据。同理,SqlServer数据库的处理方式应该也大致类似,这里就不做多的解释了,就留给机智的你去实现了,哈哈O(∩_∩)O哈哈~

原文地址:https://www.cnblogs.com/BraveBoy/p/7485619.html