如何从垂直到水平获取数据表值



我想把我的值设置为:

结果|one|two|3

平均值|1.4|2.45|3

但我的结果是:

结果|one|two|3

平均值|1.4

平均|2.45

平均|3

有办法改变它吗?我的代码低于

private void button1_Click(object sender, EventArgs e)
    {
        DataTable dtGrid = gridData.DataSource as DataTable;
        DataTable dtResult = new DataTable();
        Math columnIndex = new Math();
        dtResult.Columns.Add("Result", typeof(string));
        dtResult.Columns.Add("One", typeof(double));
        dtResult.Columns.Add("Two", typeof(double));
        dtResult.Columns.Add("Three", typeof(double));
        dtResult.Columns.Add("Four", typeof(double));
        dtResult.Columns.Add("Five", typeof(double));
        dtResult.Columns.Add("Six", typeof(double));
            for (int i = 1; i < dtGrid.Columns.Count; i++)
            {
                List<double> avgList = new List<double>();
                for (int j = 1; j < dtGrid.Rows.Count ; j++)
                {
                    avgList.Add(Convert.ToDouble(dtGrid.Rows[j][i].ToString()));
                }
            double averageList = columnIndex.getAverageValue(avgList);
            dtResult.Rows.Add("average", averageList);
            gridData2.DataSource = dtResult;
           }
    }

您在内部循环的每个迭代(每个列)中都添加了一个新行,这就是为什么您会得到意外的结果;所以你要做的是,在开始迭代之前创建一个新行,并将每列的平均值添加到新创建的行中。在列迭代完成后,将新行添加到列中;您可以更改将项目添加到列表的逻辑,如下所示:

   DataRow dAvgRow = dtResult.NewRow();
        DataRow dMinRow = dtResult.NewRow();
        dAvgRow[0]="average";
        dMinRow[0] = "Minimum";
        for (int i = 1; i < dtGrid.Columns.Count; i++)
        {
            List<double> avgList = new List<double>();
            for (int j = 1; j < dtGrid.Rows.Count; j++)
            {
                avgList.Add(Convert.ToDouble(dtGrid.Rows[j][i].ToString()));
            }
            double averageList = avgList.Average();
            dAvgRow[i] = averageList.ToString("#.##");     
            dMinRow[i]=avgList.Min();
        }
        dtResult.Rows.Add(dAvgRow);
        dtResult.Rows.Add(dMinRow); 
  gridData2.DataSource = dtResult;

最新更新