void GetData()
    {
        List <CStatItem> lstStatItem = GetStatItemList();


        List <string> lstTable = new List <string>();
        string        sFields  = "";
        string        sGroupBy = "";
        string        sOrderBy = "";

        foreach (CStatItem StatItem in lstStatItem)
        {
            string sOrderFiled = "";
            if (StatItem.ItemType == CStatItem.enumItemType.Field)
            {
                CTable table = (CTable)Global.GetCtx(Session["TopCompany"].ToString()).TableMgr.Find(StatItem.FW_Table_id);
                if (table == null)
                {
                    continue;
                }
                CColumn column = (CColumn)table.ColumnMgr.Find(StatItem.FW_Column_id);
                if (column == null)
                {
                    continue;
                }

                if (!lstTable.Contains(table.Code))
                {
                    lstTable.Add(table.Code);
                }
                if (StatItem.StatType == CStatItem.enumStatType.Val)
                {
                    sFields    += string.Format("[{0}].[{1}],", table.Code, column.Code);
                    sGroupBy   += string.Format("[{0}].[{1}],", table.Code, column.Code);
                    sOrderFiled = string.Format("[{0}].[{1}]", table.Code, column.Code);
                }
                else
                {
                    sFields += string.Format("{0}([{1}].[{2}]) as [{3}],",
                                             StatItem.GetStatTypeFunc(), table.Code, column.Code, StatItem.Name);
                    sOrderFiled = StatItem.Name;
                }
            }
            else
            {
                sFields    += string.Format("({0}) as [{1}],", StatItem.Formula, StatItem.Name);
                sOrderFiled = StatItem.Name;
            }

            if (StatItem.Order == CStatItem.enumOrder.Asc)
            {
                sOrderBy += sOrderFiled + ",";
            }
            else if (StatItem.Order == CStatItem.enumOrder.Desc)
            {
                sOrderBy += sOrderFiled + " desc,";
            }
        }
        sFields  = sFields.TrimEnd(",".ToCharArray());
        sGroupBy = sGroupBy.TrimEnd(",".ToCharArray());
        sOrderBy = sOrderBy.TrimEnd(",".ToCharArray());

        string sTable = "";

        foreach (string sTb in lstTable)
        {
            sTable += sTb + ",";
        }
        sTable = sTable.TrimEnd(",".ToCharArray());

        string sSql = string.Format("select {0} from {1} ", sFields, sTable);

        sSql += " where IsDeleted=0 ";
        if (m_Report.Filter.Trim() != "")
        {
            sSql += " and " + m_Report.Filter;
        }
        if (sGroupBy != "")
        {
            sSql += " group by " + sGroupBy;
        }
        if (sOrderBy != "")
        {
            sSql += " order by " + sOrderBy;
        }

        //因为采用构造sql语句的方法来运行报表,所以仅考虑单数据库的情况,
        //即取主数据库。如果考虑多数据库分布存储情况,则使用对象来计算报表。
        DataTable dt = Global.GetCtx(Session["TopCompany"].ToString()).MainDB.QueryT(sSql);

        if (dt == null)
        {
            //MessageBox.Show("运行报表失败,请修改报表定义!");
            return;
        }


        string sData = "";

        foreach (DataRow r in dt.Rows)
        {
            string sRow = "";
            int    iCol = 0;
            foreach (CStatItem StatItem in lstStatItem)
            {
                string sVal = r[iCol].ToString();
                sRow += string.Format("\"{0}\":\"{1}\",", StatItem.Name, sVal);
                iCol++;
            }

            sRow   = sRow.TrimEnd(",".ToCharArray());
            sRow   = "{" + sRow + "},";
            sData += sRow;
        }
        sData = sData.TrimEnd(",".ToCharArray());
        sData = "[" + sData + "]";
        string sJson = string.Format("{{\"Rows\":{0},\"Total\":\"{1}\"}}"
                                     , sData, dt.Rows.Count);

        Response.Write(sJson);
    }
Exemple #2
0
        void Run()
        {
            if (m_Report == null)
            {
                return;
            }
            dataGridView.Columns.Clear();
            List <CStatItem>   lstStatItem = new List <CStatItem>();
            List <CBaseObject> lstObj      = m_Report.StatItemMgr.GetList();

            foreach (CBaseObject obj in lstObj)
            {
                lstStatItem.Add((CStatItem)obj);
            }
            lstStatItem.Sort();//按索引idx排序

            foreach (CStatItem StatItem in lstStatItem)
            {
                dataGridView.Columns.Add(StatItem.Name, StatItem.Name);
            }

            List <string> lstTable = new List <string>();
            string        sFields  = "";
            string        sGroupBy = "";
            string        sOrderBy = "";

            foreach (CStatItem StatItem in lstStatItem)
            {
                string sOrderFiled = "";
                if (StatItem.ItemType == CStatItem.enumItemType.Field)
                {
                    CTable table = (CTable)Program.Ctx.TableMgr.Find(StatItem.FW_Table_id);
                    if (table == null)
                    {
                        continue;
                    }
                    CColumn column = (CColumn)table.ColumnMgr.Find(StatItem.FW_Column_id);
                    if (column == null)
                    {
                        continue;
                    }

                    if (!lstTable.Contains(table.Code))
                    {
                        lstTable.Add(table.Code);
                    }
                    if (StatItem.StatType == CStatItem.enumStatType.Val)
                    {
                        sFields    += string.Format("[{0}].[{1}],", table.Code, column.Code);
                        sGroupBy   += string.Format("[{0}].[{1}],", table.Code, column.Code);
                        sOrderFiled = string.Format("[{0}].[{1}]", table.Code, column.Code);
                    }
                    else
                    {
                        sFields += string.Format("{0}([{1}].[{2}]) as [{3}],",
                                                 StatItem.GetStatTypeFunc(), table.Code, column.Code, StatItem.Name);
                        sOrderFiled = StatItem.Name;
                    }
                }
                else
                {
                    sFields    += string.Format("({0}) as [{1}],", StatItem.Formula, StatItem.Name);
                    sOrderFiled = StatItem.Name;
                }

                if (StatItem.Order == CStatItem.enumOrder.Asc)
                {
                    sOrderBy += sOrderFiled + ",";
                }
                else if (StatItem.Order == CStatItem.enumOrder.Desc)
                {
                    sOrderBy += sOrderFiled + " desc,";
                }
            }
            sFields  = sFields.TrimEnd(",".ToCharArray());
            sGroupBy = sGroupBy.TrimEnd(",".ToCharArray());
            sOrderBy = sOrderBy.TrimEnd(",".ToCharArray());

            string sTable = "";

            foreach (string sTb in lstTable)
            {
                sTable += sTb + ",";
            }
            sTable = sTable.TrimEnd(",".ToCharArray());

            string sSql = string.Format("select {0} from {1} ", sFields, sTable);

            sSql += " where IsDeleted=0 ";
            if (m_Report.Filter.Trim() != "")
            {
                sSql += " and " + m_Report.Filter;
            }
            if (sGroupBy != "")
            {
                sSql += " group by " + sGroupBy;
            }
            if (sOrderBy != "")
            {
                sSql += " order by " + sOrderBy;
            }

            //因为采用构造sql语句的方法来运行报表,所以仅考虑单数据库的情况,
            //即取主数据库。如果考虑多数据库分布存储情况,则使用对象来计算报表。
            DataTable dt = Program.Ctx.MainDB.QueryT(sSql);

            if (dt == null)
            {
                MessageBox.Show("运行报表失败,请修改报表定义!");
                return;
            }

            foreach (DataRow r in dt.Rows)
            {
                dataGridView.Rows.Add(1);
                DataGridViewRow row = dataGridView.Rows[dataGridView.Rows.Count - 1];
                for (int col = 0; col < dataGridView.Columns.Count; col++)
                {
                    row.Cells[col].Value = r[col];
                }
            }
        }