从存储在vb中的数据表中的学生标记计算排名。净

时间:2015-10-03 10:14:52

标签: vb.net datatable vb6 datagridviewcolumn

我正在研究vb.net中的考试结果系统,该系统要求根据获得的分数计算学生等级。主题标记数据存储在数据库中。我正在数据表中加载主题标记

da.Fill(dt) 'added to a datagridview.  
DataGridView1.DataSource = dt 

然后在dt中添加新列以显示结果:

            dt.Columns.Add("Obtained Marks", GetType(String))
            dt.Columns.Add("Percent", GetType(String))
            dt.Columns.Add("Result", GetType(String))
            dt.Columns.Add("Rank", GetType(Integer))

然后计算所有受试者的总数&通过循环遍历行和&amp ;;添加到获得的标记列中数据表的列。

        For s As Integer = 0 To dt.Rows.Count - 1
            For t As Integer = 0 To dt.Columns.Count - 1
              obtmarks += CDbl(dt.Rows(s).Item(t))
            Next
         dt.Rows(s)("Obtained Marks") = obtmarks
         dt.Rows(s)("Result") = "PASS"
         dt.Rows(s)("Rank") = 'RANK OF STUDENT
       Next

如何根据数据表栏中包含的总分数来计算学生的等级/位置"获得的分数"。 即     有分数的学生436 Rank应为1     有分数429.5的学生等级应为2     有标记的学生412等级应为3 ....

等等,直到记录中的所有行。 (图片附加)

如果有数据表的任何功能可以在这里提供帮助,或者我如何在循环中添加逻辑来计算学生的等级并在等级列中添加值。谢谢

P.S。我不想对获得的标记上的行进行排序,但是想要在他/她的标记前面添加每个学生的等级,这已经按照他们的卷号enter image description here

排序。

1 个答案:

答案 0 :(得分:1)

您可以使用此代码设置表格中的Rank列

DataView dv = new DataView(dt, "", "ObtainedMarks desc", DataViewRowState.CurrentRows);
for(int x = 0; x < dv.Count; x++)
    dv[x].Row["Rank"] = x+1;

只有在您完成计算列ObtainedMarks

的代码后才能执行此操作

另外,我建议在设置DataGridView的DataSource之前执行all,以避免在你还没有完成它时重新绘制网格中不必要的延迟

修改
要为具有相同标记的人提供相同的等级,您可以尝试这样的事情

int lastMark = -1;
int currentRank = 0;
int atSameRank = 1;
DataView dv = new DataView(dt, "", "ObtainedMarks desc", DataViewRowState.CurrentRows);
for(int x = 0; x < dv.Count; x++)
{
    int currentMark = Convert.ToInt32(dv["ObtainedMarks"]);
    if(currentMark != lastMark)
    {
        lastMark = currentMark;
        currentRank = currentRank + atSameRank;
        atSameRank = 0;
    }
    else
        atSameRank++;
    dv[x].Row["Rank"] = currentRank;
}

警告,我不在PC上,我可以测试它。