作者:鉴湖侠ph | 来源:互联网 | 2024-11-19 20:14
在ZC公司的员工评估系统中,评分指标是可以动态调整的。因此,在后台查询评分结果时,需要将评分指标与被评估人的信息动态地组合成一个数据表(DataTable),以便于展示和分析。以下是实现这一功能的具体步骤及代码示例:
后台查询界面预览:
核心代码实现:
#region 动态生成数据表
// 创建用于存储被评估人的数据表
DataTable dtEvaluater = new 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中
foreach (DataRow row in dtMainIndex.Rows)
{
string columnName = row["MainContent"].ToString();
dtEvaluater.Columns.Add(columnName, typeof(System.String));
}
// 添加总分列
dtEvaluater.Columns.Add("总分", typeof(System.String));
// 遍历每个被评估人,计算其各项评估指标得分
foreach (DataRow evaluaterRow in dtEvaluater.Rows)
{
double totalScore = 0;
int evaluaterID = Convert.ToInt32(evaluaterRow["EvaluaterID"]);
foreach (DataRow indexRow in dtMainIndex.Rows)
{
int indexID = Convert.ToInt32(indexRow["MainIndexID"]);
// 查询特定评估指标下的平均得分
DataTable scoreTable = resultQueryManager.AverageMainIndex(semester, year, indexID, evaluaterID);
string indexName = indexRow["MainContent"].ToString();
if (scoreTable.Rows.Count > 0 && !string.IsNullOrEmpty(scoreTable.Rows[0][0].ToString()))
{
double score = Convert.ToDouble(scoreTable.Rows[0][0]);
evaluaterRow[indexName] = Math.Round(score, 2);
totalScore += score;
}
else
{
evaluaterRow[indexName] = "0";
}
}
evaluaterRow["总分"] = Math.Round(totalScore, 2).ToString();
}
#endregion
// 清理不需要的列,并调整列名以提高可读性
dtEvaluater.Columns.Remove("EvaluaterID");
dtEvaluater.Columns.Remove("IsUsed");
dtEvaluater.Columns["EvaluaterName"].ColumnName = "姓名";
dtEvaluater.Columns["EvaluaterDepartment"].ColumnName = "部门";
dtEvaluater.Columns["EvaluaterPosition"].ColumnName = "职位";
// 绑定数据源以在界面上显示
GridView gvResult = new GridView();
gvResult.DataSource = dtEvaluater;
gvResult.DataBind();