2011-08-01 7 views
0

데이터베이스 값을 양식의 라디오 단추에 바인딩하는 데 문제가 있습니다. 나는 퀴즈를 가지고 있으며, 데이터베이스에 올바른 대답을위한 칼럼뿐만 아니라 각각의 가능한 대답에 대한 칼럼을 가지고 있습니다.라디오 단추 바인딩 문제

그러나 '정답'열의 값이 항상 첫 번째 라디오 버튼의 값과 같지 않더라도 올바른 답은 항상 첫 번째 라디오 버튼입니다. . 대신 questionNumber 변수의 경우 RecordCount 변수를 증가 계속 같은

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 
using System.Data.OleDb; 
using System.Data.Sql; 
using System.Data.SqlClient; 

namespace Quiz_Test 
{ 
public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
    } 

    String chosenAnswer, correctAnswer; 
    DataTable table; 
    int questionNumber = 0; 
    int correctAnswers = 0; 

    private void Form1_Load(object sender, EventArgs e) 
    { 
     string cnString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\Users\\Hannah\\Desktop\\QuizQuestions.accdb"; 

     OleDbConnection conGet = new OleDbConnection(cnString); 
     OleDbCommand cmdGet = new OleDbCommand(); 

     conGet.Open(); 
     cmdGet.CommandType = CommandType.Text; 
     cmdGet.Connection = conGet; 

     cmdGet.CommandText = "SELECT * FROM QuizQuestions ORDER BY rnd()"; 

     OleDbDataReader reader = cmdGet.ExecuteReader(); 
     table = new DataTable(); 
     table.Load(reader); 
     int recordCount = table.Rows.Count; 

     foreach (DataRow row in table.Rows) 
     { 

      labelQuestion.Text = table.Rows[questionNumber]["Question"].ToString(); 
      radioButton1.Text = table.Rows[questionNumber]["Answer 1"].ToString(); 
      radioButton2.Text = table.Rows[questionNumber]["Answer 2"].ToString(); 
      radioButton3.Text = table.Rows[questionNumber]["Answer 3"].ToString(); 
      radioButton4.Text = table.Rows[questionNumber]["Answer 4"].ToString(); 
      correctAnswer = table.Rows[questionNumber]["Correct Answer"].ToString(); 
      recordCount++; 
     } 
    conGet.Close(); 
    } 

    private void btnGoToNextOne_Click(object sender, EventArgs e) 
    { 
     String cnString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\Users\\Hannah\\Desktop\\QuizQuestions.accdb"; 

     OleDbConnection conGet = new OleDbConnection(cnString); 
     OleDbCommand cmdGet = new OleDbCommand(); 
     int recordCount = table.Rows.Count; 

     { 
      conGet.Open(); 

      cmdGet.CommandType = CommandType.Text; 
      cmdGet.Connection = conGet; 

      cmdGet.CommandText = "SELECT * FROM QuizQuestions ORDER BY rnd()"; // select all columns in all rows 

      OleDbDataReader reader = cmdGet.ExecuteReader(); 
      reader.Read(); 
     if (questionNumber < recordCount) 
     { 

      if (radioButton1.Checked) 
      { 
       chosenAnswer = reader["Answer 1"].ToString(); 
      } 
      else if (radioButton2.Checked) 
      { 
       chosenAnswer = reader["Answer 2"].ToString(); 
      } 
      else if (radioButton3.Checked) 
      { 
       chosenAnswer = reader["Answer 3"].ToString(); 
      } 
      else if (radioButton4.Checked) 
      { 
       chosenAnswer = reader["Answer 4"].ToString(); 
      } 

      if (questionNumber < recordCount) 
      { 

       if (chosenAnswer == reader["Correct Answer"].ToString()) 
       { 
        labelQuestion.Text = table.Rows[questionNumber]["Question"].ToString(); 
        radioButton1.Text = table.Rows[questionNumber]["Answer 1"].ToString(); 
        radioButton2.Text = table.Rows[questionNumber]["Answer 2"].ToString(); 
        radioButton3.Text = table.Rows[questionNumber]["Answer 3"].ToString(); 
        radioButton4.Text = table.Rows[questionNumber]["Answer 4"].ToString(); 
        correctAnswer = table.Rows[questionNumber]["Correct Answer"].ToString(); 
        questionNumber++; 
        correctAnswers++; 
       } 
       else 
       { 
        MessageBox.Show("This is incorrect"); 
       } 
       } 
       recordCount++; 
      } 
      else 
      { 
       MessageBox.Show("You have finished the test. You have " + questionNumber + " answers correct"); 
      } 
      } 
     } 
    } 
} 
+1

당신은 바인딩 또는 라디오 버튼의 체크 값을 설정하는 어디 코드에서 볼 수 없습니다. 당신은 그것이 사실인지를 확인하고 있습니다 만, 나는 당신이 그것을 어디에 놓고 있는지 보지 못합니다. – LarsTech

+0

안녕하세요, 그건 내 코드 전부입니다. 제발 좀 더 자세히 설명해 주시겠습니까? – user612041

답변

0

것 같습니다 :

여기 내 코드입니다.

recordCount 변수가 없어도 table.Rows.Count 속성 만 사용하면됩니다.

나는 당신이 어떤 사용되지 않는 foreach는 루프 등, 계속 가지고 있지만 그것은 기본적으로 문제를 해결해야한다고 생각

+0

문제를 분류하지 않았지만 OK, 변경했습니다. – user612041