猿问

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

我是 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 上。


婷婷同学_
浏览 80回答 1
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);}
随时随地看视频慕课网APP
我要回答