Exemple #1
0
        //求取平均值 X~,S,V
        public static DataTable CreateAverageViewReport(StringBuilder _selCol, StringBuilder _selSqlAver, string _strTestNo)
        {
            BLL.Bend bllts = new HR_Test.BLL.Bend();
            //求平均
            DataSet dsaver = bllts.GetFinishSumList1(_selSqlAver.ToString(), " testSampleNo in ('" + _strTestNo + ") and isFinish=true and isEffective=false ");

            //获取选择试样的数量和试样编号
            string _sel = _selCol.ToString();

            DataSet dsfinish = bllts.GetFinishListReport(_sel, " testSampleNo in ('" + _strTestNo + ") and isFinish=true and isEffective=false ");

            int fcount = dsfinish.Tables[0].Rows.Count;

            //变异系数 = sd/mean
            StringBuilder strCV = new StringBuilder();

            //中间值
            StringBuilder strMid = new StringBuilder();

            ////添加新列
            //DataColumn dc = new DataColumn();
            //dc = dsaver.Tables[0].Columns.Add("数量(" + fcount + ")", System.Type.GetType("System.String"));

            ////设置为第0列
            //dsaver.Tables[0].Columns["数量(" + fcount + ")"].SetOrdinal(0);

            ////平均值已经有一行,不用添加,直接修改其显示名称
            //dsaver.Tables[0].Rows[0][0] = "Mean:";
            ////S.D.标准偏差行
            //if (_isSelSD) { dsaver.Tables[0].Rows.Add("S.D.:"); }
            ////变异系数行
            //if (_isSelCV) { dsaver.Tables[0].Rows.Add("C.V.:"); }
            ////中间值行
            //if (_isSelMid) { dsaver.Tables[0].Rows.Add("Mid.:"); }
            //创建新的数据计算结果表
            DataSet dsaverto = new DataSet();

            dsaverto.Tables.Add();
            dsaverto.Tables[0].Columns.Add("数量(" + fcount + ")").SetOrdinal(0);
            for (int i = 0; i < dsaver.Tables[0].Columns.Count; i++)
            {
                dsaverto.Tables[0].Columns.Add(dsaver.Tables[0].Columns[i].Caption).SetOrdinal(i + 1);
            }
            //给新数据表添加平均值列
            List <object> objmean = new List <object>();

            objmean.Add("Mean.:");
            for (int i = 0; i < dsaver.Tables[0].Columns.Count; i++)
            {
                if (!string.IsNullOrEmpty(dsaver.Tables[0].Rows[0][i].ToString()))
                {
                    if (double.Parse(dsaver.Tables[0].Rows[0][i].ToString()) != 0)
                    {
                        objmean.Add(dsaver.Tables[0].Rows[0][i].ToString());
                    }
                    else
                    {
                        objmean.Add("-");
                    }
                }
                else
                {
                    objmean.Add("-");
                }
            }
            dsaverto.Tables[0].Rows.Add(objmean.ToArray());

            double sumsd = 0;
            double sd    = 0;
            double cv    = 0;
            double ctrue = 0;
            double caver = 0;
            double temp  = double.MaxValue;
            double mid   = 0;

            List <object> objsd = new List <object>();

            objsd.Add("S.D.:");
            List <object> objcv = new List <object>();

            objcv.Add("C.V.:");
            List <object> objmid = new List <object>();

            objmid.Add("Mid.:");

            //计算标准偏差
            int averColCount    = dsaver.Tables[0].Columns.Count;
            int finishRowsCount = dsfinish.Tables[0].Rows.Count;

            for (int i = 0; i < averColCount; i++)
            {
                for (int j = 0; j < finishRowsCount; j++)
                {
                    //  求和 (真实值-平均值)^2
                    string strtrue = dsfinish.Tables[0].Rows[j][i + 2].ToString();
                    string straver = dsaver.Tables[0].Rows[0][i].ToString();
                    ctrue = Convert.ToDouble(strtrue);
                    caver = Convert.ToDouble(straver);
                    double c1 = (ctrue - caver) * (ctrue - caver);
                    sumsd += c1;
                    //查找中间值,最接近平均值的
                    double d_value = Math.Abs(ctrue - caver);
                    if (d_value < temp)
                    {
                        temp = d_value;
                        mid  = ctrue;
                    }
                }

                //标准偏差
                if (fcount - 1 != 0)
                {
                    sd = Math.Sqrt(sumsd / (fcount - 1));
                }
                else
                {
                    sd = 0;
                }

                //变异系数 =( 标准偏差 / 平均值 ) *100
                if (caver != 0)
                {
                    cv = (sd / caver) * 100;
                }
                else
                {
                    cv = 0;
                }

                if (sd != 0)
                {
                    objsd.Add(sd.ToString("f4"));
                }
                else
                {
                    objsd.Add("-");
                }
                if (cv != 0)
                {
                    objcv.Add(cv.ToString("f4"));
                }
                else
                {
                    objcv.Add("-");
                }
                if (mid != 0)
                {
                    objmid.Add(mid.ToString("f4"));
                }
                else
                {
                    objmid.Add("-");
                }

                temp  = double.MaxValue;
                sumsd = 0;
            }
            //S.D.标准偏差行
            if (_isSelSD)
            {
                dsaverto.Tables[0].Rows.Add(objsd.ToArray());
            }
            //变异系数行
            if (_isSelCV)
            {
                dsaverto.Tables[0].Rows.Add(objcv.ToArray());
            }
            //中间值行
            if (_isSelMid)
            {
                dsaverto.Tables[0].Rows.Add(objmid.ToArray());
            }

            dsfinish.Dispose();
            return(dsaverto.Tables[0]);
        }