我想把我的值设置为:
结果|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;