因为此系统中的评分指标是动态设置的,所以后台对每个评分指标查询结果显示的过程中需要对评分指标和被评人信息进行动态合成datatable,然后显示。
后台查询界面:
以下是核心代码:
#region 合成datatable
DataTable dtEvaluater = new DataTable();//将被评分人datatable当做源datatable
DataTable dtMainIndex = new DataTable();//存放全部使用的大类指标
dtMainIndex = resultQueryManager.SelectAllMain("1"); //选出全部大类指标
dtEvaluater = resultQueryManager.SelectByDepartment(departmentName);//按部门名称选出全部被评分人
if (dtEvaluater.Rows.Count == 0) //没有被评人数据
{
Label1.Visible = true;
Label1.Text = "此部门下没有测评人。";
return;
}
//选出全部大类指标,当做列添加到dtEvaluater源datatable中,进行datatable的拼接
for (int k = 0; k < dtMainIndex.Rows.Count; k++)
{
string dtColumnName = dtMainIndex.Rows[k]["MainContent"].ToString();
//dtEvaluater.Columns.Add(dtColumnName);//dtEvaluater中添加大类列,并用大类内容作为列名
dtEvaluater.Columns.Add(dtColumnName, typeof(System.String));//dtEvaluater中添加大类列,并用大类内容作为列名
}
dtEvaluater.Columns.Add("总分", typeof(System.String)); //添加总分列
//设置变量,用于存放计算后的总分
//循环添加每一个大类的分数
for (int i = 0; i < dtEvaluater.Rows.Count; i++)
{
double strSum = 0;
//按照被评分人选出全部大指标分数,并添加上,合成一个datatable
int EvaluaterID = System.Int32.Parse(dtEvaluater.Rows[i]["EvaluaterID"].ToString()); //得到dtEvaluater中被评人ID
for (int j = 0; j < dtMainIndex.Rows.Count; j++)
{
int MainIndexID = System.Int32.Parse(dtMainIndex.Rows[j]["MainIndexID"].ToString());//得到大类指标ID
//根据实验课指标大类Id,课程Id计算此课程此大类的分数
DataTable dtScore = resultQueryManager.AverageMainIndex(semester, year, MainIndexID, EvaluaterID);//一门课程一个大类指标的分数
string mainContent = dtMainIndex.Rows[j]["MainContent"].ToString(); //选出大类Id对应的大类名称
if (dtScore.Rows.Count != 0) //存在分数
{
if (dtScore.Rows[0][0].ToString() == "") //此大类指标下没有分数值,此大类指标没有参加测评
{
dtEvaluater.Rows[i][mainContent] = "";
}
else
{
double dScore = Convert.ToDouble(dtScore.Rows[0][0].ToString());
//Math.Round(dScore,2);//按照四舍五入的国际标准
dtEvaluater.Rows[i][mainContent] = Math.Round(dScore, 2);//将分数加入到dt相对应的大类下 (转换成两位小数)
strSum = strSum + Math.Round(dScore, 2);
//dtEvaluater.Rows[i][mainContent] = dtScore.Rows[0][0].ToString(); //将分数加入到dt相对应的大类下 (没有转换成两位小数)
}
}
else //不存在分数
{
dtEvaluater.Rows[i][mainContent] = "0";
}
dtEvaluater.Rows[i]["总分"] = strSum;//填充总分单元格
}
}
#endregion
dtEvaluater.Columns.Remove("EvaluaterID");
dtEvaluater.Columns.Remove("IsUsed");
dtEvaluater.Columns["EvaluaterName"].ColumnName = "姓名";
dtEvaluater.Columns["EvaluaterDepartment"].ColumnName = "部门";
dtEvaluater.Columns["EvaluaterPosition"].ColumnName = "职务";
gvResult.DataSource = dtEvaluater;
gvResult.DataBind();