我是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上。
答案 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);
}