Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 从vb中存储在数据表中的学生分数计算排名。网_Vb.net_Datatable_Vb6_Datagridviewcolumn - Fatal编程技术网

Vb.net 从vb中存储在数据表中的学生分数计算排名。网

Vb.net 从vb中存储在数据表中的学生分数计算排名。网,vb.net,datatable,vb6,datagridviewcolumn,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("Perce

我正在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))
然后通过循环遍历datatable的行和列,计算所有主题的总数并添加到“获得的分数”列中

        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分的学生应为1 成绩为429.5的学生应为2 成绩为412分的学生应该是3

依此类推,直到记录中的所有行。(附图)

如果datatable有任何函数可以在这里提供帮助,或者我如何在循环中添加逻辑来计算学生的排名,并在排名列中添加值。谢谢


p.S.我不想对获得的分数的行进行排序,但想在每个学生的分数前面添加排名,这已经按照他们的卷号排序。

您可以使用此代码在表中设置排名列

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

警告,我没有在PC上测试它。

您可以在DataView上排序。我的意思是排序发生在一个不影响网格当前顺序的对象上。是的,我知道datagridview排序,已经提到我希望保持可见行的原样,这是很重要的,因为学生在该课程中是按“滚动编号”的顺序显示的。必须在rank列中填写它们的秩值。我不是说对DataGridView进行排序。我想你可以根据获得的分数从你的数据表中构建一个名为DataView的新对象,然后根据这个数据视图的顺序将Rank的值设置到你的表中。哦,谢谢,我会尝试一下并回答。谢谢@steve,这正是我想要的,你的数据太棒了。非常感谢:)如果学生分数相同,有没有办法阻止排名的增加。i、 如果两个学生得了300分,那么排名应该是相同的。为您的请求添加了一个可能的解决方案。
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;
}