Oppure

Loading
02/07/14 2:00
Light
Salve sto creando un quiz, le domande e le risposte risiedono in un database MySQL
La tabella è costituita da:
ID (chiave primaria, autoincrement)
Domanda
Risposta1
Risposta2
Risposta3
RispostaEsatta

Per estrarre la domande e le risposte faccio così:

strSQL = "SELECT * FROM domande where Domanda = '" & ListBox1.SelectedItem.ToString & "';"
CONNECTION.Open()
cmd = New MySqlCommand(strSQL, CONNECTION)
dr = cmd.ExecuteReader()

Do While dr.Read()
DomandaEstratta = (dr.Item("Domanda";).ToString())
Risposta1Estratta = (dr.Item("Risposta1";).ToString())
Risposta2Estratta = (dr.Item("Risposta2";).ToString())
Risposta3Estratta = (dr.Item("Risposta3";).ToString())
RispostaEsattaEstratta = (dr.Item("RispostaEsatta";).ToString())

Label1.Text = DomandaEstratta & "?"
RadioButton1.Text = Risposta1Estratta
RadioButton2.Text = Risposta2Estratta
RadioButton3.Text = Risposta3Estratta
RadioButton4.Text = RispostaEsattaEstratta

Loop
dr.Close()
cmd.Dispose()
CONNECTION.Close()

Per ordinare le risposte in modo random come posso fare?
Mi spiego meglio: io al momento faccio così:

Label1.Text = DomandaEstratta & "?"
RadioButton1.Text = Risposta1Estratta
RadioButton2.Text = Risposta2Estratta
RadioButton3.Text = Risposta3Estratta
RadioButton4.Text = RispostaEsattaEstratta

Però in questo modo la risposta esatta è sempre la numero 4, e non va bene.
Come posso risolvere? Grazie in anticipo
aaa
02/07/14 9:18
GN
Non so se ci sia un metodo più semplice, comunque la prima cosa che mi viene da consigliarti è di mettere le risposte in una lista
            DomandaEstratta = (dr.Item("Domanda").ToString())
            Dim Risposte As New List(Of String)
            Risposte.Add(dr.Item("Risposta1").ToString()) 
            Risposte.Add(dr.Item("Risposta2").ToString()) 
            Risposte.Add(dr.Item("Risposta3").ToString()) 
            RispostaEsattaEstratta = (dr.Item("RispostaEsatta").ToString()) 'lascio questa variabile nel caso che ti serva per controllare se l'utente ha risposto giusto
            Risposte.Add(RispostaEsattaEstratta)

poi riordinare casualmente la lista
            Dim R As New Random
            For i As Integer = 0 To Risposte.Count - 1
                        Dim Scambio As String = Risposte(i)
                        Dim j As Integer = R.Next(Risposte.Count)
                        Risposte(i) = Risposte(j)
                        Risposte(j) = Scambio
            Next

e quindi prendere dalla lista i valori da assegnare ai RadioButton
            RadioButton1.Text = Risposte(0)
            RadioButton2.Text = Risposte(1) 
            RadioButton3.Text = Risposte(2) 
            RadioButton4.Text = Risposte(3)
aaa
03/07/14 14:44
Light
Avevo trovato una soluzione, però era grezza:

Do While dr.Read()
DomandaEstratta = (dr.Item("Domanda";).ToString())
Risposta1Estratta = (dr.Item("Risposta1";).ToString())
Risposta2Estratta = (dr.Item("Risposta2";).ToString())
Risposta3Estratta = (dr.Item("Risposta3";).ToString())
RispostaEsattaEstratta = (dr.Item("RispostaEsatta";).ToString())

Label1.Text = DomandaEstratta & "?"

Dim x As New Random
Dim y(4) As String
y(1) = "1"
y(2) = "2"
y(3) = "3"
y(4) = "4"

Calcolo = y(x.Next(1, 5))

If Calcolo = "1" Then
RadioButton1.Text = RispostaEsattaEstratta
RadioButton2.Text = Risposta2Estratta
RadioButton3.Text = Risposta3Estratta
RadioButton4.Text = Risposta1Estratta
End If

If Calcolo = "2" Then
RadioButton1.Text = Risposta3Estratta
RadioButton2.Text = RispostaEsattaEstratta
RadioButton3.Text = Risposta2Estratta
RadioButton4.Text = Risposta1Estratta
End If

If Calcolo = "3" Then
RadioButton1.Text = Risposta2Estratta
RadioButton2.Text = Risposta3Estratta
RadioButton3.Text = RispostaEsattaEstratta
RadioButton4.Text = Risposta1Estratta
End If

If Calcolo = "4" Then
RadioButton1.Text = Risposta2Estratta
RadioButton2.Text = Risposta1Estratta
RadioButton3.Text = Risposta3Estratta
RadioButton4.Text = RispostaEsattaEstratta
End If

Loop

Grazie, la tua soluzione è migliore. ;)
aaa