如何在dataGridView中的Windows窗体c#中找到合格率?

问题描述 投票:1回答:1

我是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分。如果5名学生中有2名得分为50分或更高,则通过率应为40%,并应显示在我的lbl_passrate上。

c# windows-forms-designer
1个回答
1
投票

看起来列是每个类,每个学生的行都取决于你是如何进行平均值和最大值的。如果是这样,那么你需要一些内部变量来保持通过阈值,在你的例子中有50个标记。那么你就可以使用Linq轻松获得你想要的东西了。您可能需要通过零错误检查divid,但这是它的要点:

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);
}
© www.soinside.com 2019 - 2024. All rights reserved.