RDLC報表多條件分組


一個報表如果要先按A分組,然后再按B分組,再按C分組...這種多條件分組情況下,RDLC報表處理起來並不方便。

只能另辟蹊徑,想些歪招了:

比如有一張員工表,里面有公司編碼COMPANYCODE,部門號DEPTNO,員工號EMPNO,員工姓名EMPNAME

需要在報表上,先按公司分組,相同公司的再按部門分組

看看下面的處理代碼

            DataTable dt = new DataTable();
            dt.Columns.Add("EMPNO", typeof(string));
            dt.Columns.Add("EMPNAME", typeof(string));
            dt.Columns.Add("DEPTNO", typeof(string));
            dt.Columns.Add("COMPANYCODE", typeof(string));
            dt.Columns.Add("COMPANYCODE_TITLE", typeof(string));
            dt.Columns.Add("DEPTNO_TITLE", typeof(string));

            dt.Rows.Add("001", "霍青桐", "A", "INFOSKY", "", "");
            dt.Rows.Add("002", "鳳九", "B", "INFOSKY", "", "");
            dt.Rows.Add("003", "程英", "C", "GSATEST", "", "");
            dt.Rows.Add("000", "李沅芷", "A", "INFOSKY", "", "");

            dt.DefaultView.Sort = "COMPANYCODE desc,DEPTNO asc,EMPNO";

            dt = dt.DefaultView.ToTable();

            for (int i = 0; i < dt.Rows.Count; i++)
            {
                var r = dt.Rows[i];
                if (i == 0)
                {
                    #region //第一行特殊處理
                    r["COMPANYCODE_TITLE"] = r["COMPANYCODE"];
                    r["DEPTNO_TITLE"] = r["DEPTNO"];
                    #endregion
                    continue;
                }
                var r_pre = dt.Rows[i - 1];

                #region //處理COMPANYCODE
                if (r["COMPANYCODE"].ToString() == r_pre["COMPANYCODE"].ToString())
                {
                    r["COMPANYCODE_TITLE"] = String.Empty;
                }
                else
                {
                    r["COMPANYCODE_TITLE"] = r["COMPANYCODE"];
                }
                #endregion

                #region //處理DEPTNO
                if (r["DEPTNO"].ToString() == r_pre["DEPTNO"].ToString())
                {
                    r["DEPTNO_TITLE"] = String.Empty;
                }
                else
                {
                    r["DEPTNO_TITLE"] = r["DEPTNO"];
                }
                #endregion
            }


            //打印輸出
            foreach (DataRow r in dt.Rows)
            {
                Console.Write("{0}\t{1}\t{2}\t{3}\n", r["COMPANYCODE_TITLE"],
                              r["DEPTNO_TITLE"], r["EMPNO"], r["EMPNAME"]);
            }

            Console.Read();

  這里用控制台程序模擬報表的輸出,最終打印結果:

原理就是:只用一個DataTable逐行顯示,只是在遇到分組時,把該行某些列的值給“抹掉”.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM