Рейтинг:
1
Richard Deeming
Вы используете целочисленное деление, поэтому результат будет усечен.
Измените ваши переменные на double
:
double correctAnswers = 0, incorrectAnswers = 0, totalQuestions = grdquestions.Rows.Count;
РЕДАКТИРОВАТЬ: Вам также понадобится
if (!IsPostBack) { ... }
тест вокруг кода привязки данных в
Page_Load
метод. В противном случае выбранные пользователем параметры будут перезаписываться каждый раз, и ни одна из радиокнопок не будет проверена к моменту запуска обработчика нажатия кнопки.
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
SqlCommand com = new SqlCommand("Select * from [Biology]", con);
SqlDataAdapter da = new SqlDataAdapter(com);
DataTable dt2 = new DataTable();
da.Fill(dt2);
grdquestions.DataSource = dt2;
grdquestions.DataBind();
}
}
AhmedHosny96
после изменения int на double, но это не работает братан ?
Richard Deeming
"Это не работает" -недостаточно информации. Вы получаете ошибку? Неверный вывод? Сообщение от летающего макаронного монстра?
Помните, мы не можем видеть ваш экран. Все, что нам нужно, - это то, что вы печатаете в этой маленькой коробке. Помогите нам помочь вам! :)
AhmedHosny96
я имею в виду, что он все еще показывает 0,00% после изменения на двойной
Richard Deeming
Ладно, это наводит на мысль, что он не считает правильные ответы.
Какой результат вы получите, если используете:
label1.Text= string.Format("percentage is {0} ({1}/{2})", correctAnswerPercentage, correctAnswers, totalQuestions);
AhmedHosny96
тем не менее его 00.0% я думаю, что он не увеличивает правильные ответы ?
Richard Deeming
Замените линию:
label1.text= "percentage is"+correcAnswerpercentage;
с:
label1.Text= string.Format("percentage is {0} ({1}/{2})", correctAnswerPercentage, correctAnswers, totalQuestions);
Вывод должен выглядеть примерно так:
percentage is 0.00% (0/42)
Если он не показывает цифры в скобках после процента, то это звучит так, как будто вам нужно перекомпилировать свой проект.
Если это
является показаны цифры в скобках, и первая из них-это
0
затем вам нужно отладить код , чтобы увидеть, где он идет не так. Это может быть то, что он не может найти элементы управления; или что текст не точно соответствует значению из базы данных; или что элементы управления не проверены; или многое другое.
Если вам нужна информация о том, как отлаживать код, у Microsoft есть учебник:
Учебник: научитесь отлаживать код C# с помощью Visual Studio[
^]
Richard Deeming
На самом деле, глядя на ваш код снова, это, вероятно, что элементы управления не проверяются.
protected void Page_Load(object sender, EventArgs e)
{
SqlCommand com = new SqlCommand("Select * from [Biology]", con);
SqlDataAdapter da = new SqlDataAdapter(com);
DataTable dt2 = new DataTable();
da.Fill(dt2);
grdquestions.DataSource = dt2;
grdquestions.DataBind();
}
Вы повторно привязываете сетку при каждой загрузке страницы, что перезапишет все выбранные пользователем параметры. Вам нужно проверить
IsPostBack
собственность прежде всего:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
SqlCommand com = new SqlCommand("Select * from [Biology]", con);
SqlDataAdapter da = new SqlDataAdapter(com);
DataTable dt2 = new DataTable();
da.Fill(dt2);
grdquestions.DataSource = dt2;
grdquestions.DataBind();
}
}
AhmedHosny96
его отображение : процент составляет 0.00% (0/42)
и я проверил свойство IsPostBack, но ничего не изменилось ?
Richard Deeming
Затем вам нужно будет отладить свой код. Установите точку останова в первой строке таблицы. examsubmit_Click
метод, и шаг через него, чтобы увидеть, что происходит не так.
AhmedHosny96
братан я отладил код начиная с exasubmit_click
остальная часть кода в порядке, но отладчик перескочил на :
если (радиобаттон.Проверен)
{
если (радиобаттон.Текст == ответ)
{
correctAnswers++;
totalMarks += маркировка;
}
еще
{
incorrectAnswers++;
радиокнопка.Проверено = ложь;
}
}
к :
еще если (радиобуттон.Текст == ответ)
{
correctAnswers++;
радиокнопка.Проверено = истина;
}
таким образом, ясно, что условные выражения не выполняются скомпилированным ... ?
Richard Deeming
Это просто означает, что тот, на который вы сейчас смотрите, не проверен. Если вы продолжаете шагать через него, вы должны добраться до того, который проверен.
AhmedHosny96
извините проблема начинается с :
если (радиобаттон.Текст == ответ)
{
correctAnswers++;
totalMarks += маркировка;
}
еще
{
incorrectAnswers++;
радиокнопка.Проверено = ложь;
}
и остановись пока здесь
еще если (радиобуттон.Текст == ответ)
{
correctAnswers++;
радиокнопка.Проверено = истина;
}
так что же мне делать? ..
Richard Deeming
Так что текущий радиобаттон, на который вы смотрите, не проверен. Продолжайте шагать, пока не найдете тот, который проверен.
Если ни один из них не проверен, то в вашем коде есть что-то, что перезаписывает выбор пользователя, прежде чем вы его прочитаете.
AhmedHosny96
@Richard Deeming все еще вопрос остается нерешенным, что вы рекомендовали..?
Richard Deeming
Я рекомендую вам отладить свой код. Извините, но мы не можем сделать это для вас.
AhmedHosny96
спасибо u brother за все, что я решил ошибку, генерируя результат по-другому спасибо за вашу помощь еще раз <3 big hug
Richard Deeming
Отличная новость. Рад, что вы все уладили. :)