Mishti Choudhary Ответов: 1

Как рассчитать балл вопроса с множественным выбором в gridview


Я использую следующий код для расчета балла вопросной работы, содержащей вопрос с множественным выбором. Но я сталкиваюсь с проблемой, что оценка правильна, когда на все вопросы статьи даны ответы. Предположим, что если кто-то не отвечает ни на один из вопросов, то он показывает неправильный балл. Хотите, чтобы оценка обновлялась для каждого правильного ответа.
protected void RadioButton_CheckedChanged(object sender, EventArgs e)
    {
        string selans = "-1";
        int Score = 0;
        foreach (GridViewRow row in GridView1.Rows)
        {
            RadioButton r1 = ((RadioButton)row.FindControl("rad1"));
            RadioButton r2 = ((RadioButton)row.FindControl("rad2"));
            RadioButton r3 = ((RadioButton)row.FindControl("rad3"));
            RadioButton r4 = ((RadioButton)row.FindControl("rad4"));
            HiddenField hdn = ((HiddenField)row.FindControl("hf"));
            if (r1.Checked)
            {
                selans = "1";
            }
            else if (r2.Checked)
            {
                selans = "2";
            }
            else if (r3.Checked)
            {
                selans = "3";
            }
            else if (r4.Checked)
            {
                selans = "4";
            }
            if (selans == hdn.Value)
            {
                Score = Score + 1;
                com = new SqlCommand("update Exam set Score='" + Score + "' where PCode='" + Label14.Text + "'", con);
                con.Open();
                com.ExecuteNonQuery();
                con.Close();
            }
        }
    }

george4986

что стоимость СЗР.Значение?
почему бы вам не добавить еще один else после else if (r4. Checked){}
и обновить счет как ноль?

Mishti Choudhary

Попробовал, но результат тот же. Проблема с циклом for заключается в том, что он генерирует правильный балл только в том случае, если на все вопросы набора вопросов дан ответ. Если даже какой-либо из Анс не отвечает, он дает неправильный балл. Возможно ли, что для каждой строки оценка обновляется отдельно, а не все вопросы в целом?

Mishti Choudhary

Скрытое поле-это оценка правильных ответов на отдельные вопросы в одном ряду с опциями в виде сетки.

Mishti Choudhary

Я попробовал то же самое, используя свойство подкачки gridview, в котором gridview имел один вопрос на страницу. Затем получал правильный балл,но с этой проблемой менял страницу по нажатию кнопки. Не удалось изменить страницу Gridview при нажатии кнопки. Каждый раз приходилось выбирать следующую страницу вручную. Поэтому попробовал эту альтернативу.

george4986

plz Удалить для каждого цикла и добавить ниже код
Переключатель РД = (переключатели)отправителя;
Gridviewrow row = (GridViewRow)rd. NamingContainer;

BharatPrajapati212

ясно, что вы хотите в качестве вывода?
не могу понять вашего вопроса.

1 Ответов

Рейтинг:
0

kbrandwijk

Я думаю, что вы следуете неправильному подходу здесь. Ваши данные, вероятно, поступают из источника данных. Этот источник данных, вероятно, содержит вопрос, варианты ответов и правильный ответ. Логика определения балла по каждому вопросу или балла по всему тесту принадлежит вашему бизнес-объекту, а не графическому интерфейсу. Я бы посоветовал вам сделать следующее:

- Создайте класс вопросов, выглядящий примерно так (вы можете изменить свои ответы, чтобы они были коллекцией, если это необходимо, но я хотел, чтобы пример был простым

public class Question
{
  public string Question { get; set; }

  public string AnswerOne { get; set; }

  public string AnswerTwo { get; set; }

  public string AnswerThree { get; set; }

  public string AnswerFour { get; set; }

  public int CorrectAnswer { get; set; }

  public bool AnswerOneSelected { get; set; }

  public bool AnswerTwoSelected { get; set; }

  public bool AnswerThreeSelected { get; set; }

  public bool AnswerFourSelected { get; set; }

  public bool IsAnswerCorrect
  {
    get
    {
      bool[] currentAnswers = new bool[] { AnswerOneSelected, AnswerTwoSelected, AnswerThreeSelected, AnswerFourSelected };
      return currentAnswers[CorrectAnswer - 1];
    }
  }

  // You can use these properties if your datasource contains different scores per question
  public int ScoreForCorrectAnswer { get; set; }

  public int Score
  {
    get
    {
      return IsAnswerCorrect ? ScoreForCorrectAnswer : 0;
    }
  }
}

Привязать список объектов для вашего GridView в, обязывающий каждого ответа...Выбранное свойство для каждой из радиокнопок.

Затем вы можете либо реализовать INotifyPropertyChanged на своих объектах, чтобы узнать, когда выбран другой ответ, либо продолжить использовать событие CheckedChanged, которое вы уже используете.

Вы можете получить оценку за тест, запросив свою коллекцию объектов следующим образом:
var score = questions.Where(q => q.IsAnswerCorrect).Count();

Если вы хотите использовать другой механизм подсчета очков, используйте вместо этого свойство Score и сделайте что-то вроде:
var score = questions.Sum(q => q.Score);


Mishti Choudhary

Спасибо. Я все решил. Это было решено, взяв кнопку внутри gridview.

Member 13658833

Привет друг, я также разрабатываю ту же логику, но я не знаю, как получить выбранное значение переключателя, я использую управление ретранслятором на передней странице, динамически считывая данные
пожалуйста, помогите мне в этом
пожалуйста, объясните, как вы это реализуете