如何在dataGridView的WindowsForm C#中查找通过率?

时间:2019-03-25 19:27:52

标签: c# windows-forms-designer

我是C#的新手,请原谅我的愚蠢问题。

所以。我有一个程序,提示用户输入他们的姓名和获得的成绩。到目前为止,我可以在dataGridView中找到给定成绩中的平均成绩和最高成绩。

这是平均和最大代码:

    dataGridView1.Rows.Add(txt_name.Text, txt_grade.Text);

    private void btn_calculate_Click(object sender, EventArgs e)
    {
        int[] columnData = (from DataGridViewRow row in dataGridView1.Rows
                            where row.Cells[1].FormattedValue.ToString()!= string.Empty
                            select Convert.ToInt32(row.Cells[1].FormattedValue)).ToArray();


        lbl_average.Text = "Average grade is: " + columnData.Average().ToString();
        lbl_highest.Text = "Highest grade is: " + columnData.Max().ToString();
    }

我现在需要获得通过率。例如,合格率为50分。如果五分之二的学生得分为50或更高,则通过率应为40%,并显示在我的lbl_passrate上。

1 个答案:

答案 0 :(得分:1)

根据您的平均和最大值计算,列似乎是每个班级,行是每个学生。如果是这样,那么您将需要一些内部变量来保存通过阈值,在您的示例中为50分。因此,您可以使用Linq轻松获得所需的服务。您可能需要检查零错误除数,但这是要点:

dataGridView1.Rows.Add(txt_name.Text, txt_grade.Text);

private void btn_calculate_Click(object sender, EventArgs e)
{
    int passingMarks = 50;

    int[] columnData = (from DataGridViewRow row in dataGridView1.Rows
                        where row.Cells[1].FormattedValue.ToString()!= string.Empty
                        select Convert.ToInt32(row.Cells[1].FormattedValue)).ToArray();


    lbl_average.Text = "Average grade is: " + columnData.Average().ToString();
    lbl_highest.Text = "Highest grade is: " + columnData.Max().ToString();
    var passingStudents = columnData.AsQueryable().Where(g=>g >= passingMarks).Count();
    var passingRate = ((double)passingStudents / columnData.Length) * 100;

    lbl_passrate.Text = String.Format("Pass Rate = {0}%", passingRate);
}