Как найти скорость прохождения в WindowsForm c # в dataGridView? - PullRequest
1 голос
/ 25 марта 2019

Я новичок в 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 баллов. Если 2 из 5 студентов набрали 50 или более баллов, проходной балл должен составлять 40%, и он должен отображаться на моей lbl_passrate.

1 Ответ

1 голос
/ 25 марта 2019

Похоже, что столбцы - это каждый класс, а строки - каждый учащийся, в зависимости от того, как вы выполняете Среднее и Макс. Если это так, то вам понадобится некоторая внутренняя переменная для удержания проходного порога, 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);
}
...