我是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上。
看起来列是每个类,每个学生的行都取决于你是如何进行平均值和最大值的。如果是这样,那么你需要一些内部变量来保持通过阈值,在你的例子中有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);
}