J'ai cherché une réponse à mon problème depuis un certain temps maintenant et je n'ai pas trouvé de solution. PS: Je travaille sur un jeu Quiz en allemand, donc vous ne serez peut-être pas capable de comprendre les noms de variables etc., mais je pense que cela ne devrait pas être le problème.L'édition de DataTable ne s'affiche pas correctement
J'ai un DataTable avec 8 colonnes dans la classe SQL
, et dans la dernière colonne, il est un 0.
namespace Quiz
{
class SQL
{
public static DataTable GEO_Fragen()
{
using (DataTable GEO = new DataTable("Geografie"))
{
GEO.Columns.Add("ID", typeof(int));
GEO.Columns.Add("Frage", typeof(string));
GEO.Columns.Add("Antwort 1", typeof(string));
GEO.Columns.Add("Antwort 2", typeof(string));
GEO.Columns.Add("Antwort 3", typeof(string));
GEO.Columns.Add("Antwort 4", typeof(string));
GEO.Columns.Add("Richtige Antwort", typeof(int));
GEO.Columns.Add("Gefragt", typeof(int));
GEO.Rows.Add(0, "Question", "Answer 1", "Answer 2", "Answer 3", "Answer 4", 4, 0);
GEO.Rows.Add(1, "Question", "Answer 1", "Answer 2", "Answer 3", "Answer 4", 4, 0);
GEO.Rows.Add(2, "Question", "Answer 1", "Answer 2", "Answer 3", "Answer 4", 4, 0);
GEO.Rows.Add(3, "Question", "Answer 1", "Answer 2", "Answer 3", "Answer 4", 4, 0);
GEO.Rows.Add(4, "Question", "Answer 1", "Answer 2", "Answer 3", "Answer 4", 4, 0);
GEO.Rows.Add(5, "Question", "Answer 1", "Answer 2", "Answer 3", "Answer 4", 4, 0);
GEO.Rows.Add(6, "Question", "Answer 1", "Answer 2", "Answer 3", "Answer 4", 4, 0);
GEO.Rows.Add(7, "Question", "Answer 1", "Answer 2", "Answer 3", "Answer 4", 4, 0);
GEO.Rows.Add(8, "Question", "Answer 1", "Answer 2", "Answer 3", "Answer 4", 4, 0);
GEO.Rows.Add(9, "Question", "Answer 1", "Answer 2", "Answer 3", "Answer 4", 4, 0);
GEO.Rows.Add(10, "Question", "Answer 1", "Answer 2", "Answer 3", "Answer 4", 4, 0);
GEO.Rows.Add(11, "Question", "Answer 1", "Answer 2", "Answer 3", "Answer 4", 4, 0);
GEO.Rows.Add(12, "Question", "Answer 1", "Answer 2", "Answer 3", "Answer 4", 4, 0);
GEO.Rows.Add(13, "Question", "Answer 1", "Answer 2", "Answer 3", "Answer 4", 4, 0);
GEO.Rows.Add(14, "Question", "Answer 1", "Answer 2", "Answer 3", "Answer 4", 4, 0);
GEO.Rows.Add(15, "Question", "Answer 1", "Answer 2", "Answer 3", "Answer 4", 4, 0);
GEO.Rows.Add(16, "Question", "Answer 1", "Answer 2", "Answer 3", "Answer 4", 4, 0);
GEO.Rows.Add(17, "Question", "Answer 1", "Answer 2", "Answer 3", "Answer 4", 4, 0);
GEO.Rows.Add(18, "Question", "Answer 1", "Answer 2", "Answer 3", "Answer 4", 4, 0);
GEO.Rows.Add(19, "Question", "Answer 1", "Answer 2", "Answer 3", "Answer 4", 4, 0);
return GEO;
}
}
//...more code
Dans une autre classe, je choisis une question au hasard. Si cette question a un "1" dans la dernière colonne (signifiant qu'elle a déjà été utilisée), elle en génère une autre.
public void Zufallszahl()
{
zufall = rnd.Next(0, SQL.GEO_Fragen().Rows.Count);
if (SQL.GEO_Fragen().Rows[zufall]["Gefragt"].ToString() == "1")
{
Zufallszahl();
}
else
{
lbl_Frage.Text = SQL.GEO_Fragen().Rows[zufall]["Frage"].ToString(); //Filling in a random Question and Answers
rad_Antwort1.Text = SQL.GEO_Fragen().Rows[zufall]["Antwort 1"].ToString();
rad_Antwort2.Text = SQL.GEO_Fragen().Rows[zufall]["Antwort 2"].ToString();
rad_Antwort3.Text = SQL.GEO_Fragen().Rows[zufall]["Antwort 3"].ToString();
rad_Antwort4.Text = SQL.GEO_Fragen().Rows[zufall]["Antwort 4"].ToString();
rad_Antwort1.Checked = false; // No radio button is ticked
rad_Antwort2.Checked = false;
rad_Antwort3.Checked = false;
rad_Antwort4.Checked = false;
}
}
Et maintenant le vrai problème: Quand je change la valeur de la dernière colonne de la ligne que j'ai choisi au hasard, il le fait vraiment peu de temps dans le mode de débogage. Mais juste après cela, quand je me laisse montrer la valeur de cette cellule, elle affiche à nouveau "0".
private void btn_Weiter_Click(object sender, EventArgs e)
{
if (rad_Antwort1.Checked == true || rad_Antwort2.Checked == true || rad_Antwort3.Checked == true || rad_Antwort4.Checked == true)
{
Pruefen(); // Checking the chosen answer
lbl_Score.Text = "Punkte: " + Punkte; // Current points
string kontrolle = SQL.GEO_Fragen().Rows[zufall]["Antwort 1"].ToString();
SQL.GEO_Fragen().Rows[zufall]["Gefragt"] = 1; //Changing value of the last column in row "zufall" to "1"
MessageBox.Show(SQL.GEO_Fragen().Rows[zufall]["Gefragt"].ToString()); //Shows "0" instead of "1"
if (rad_Antwort1.Text == kontrolle) // Next question
{
Zufallszahl();
while (Counter <= 10)
{
Counter = Counter + 1;
break;
}
if (Counter > 10)
{
SQL.GEO_Fragen().Reset();
btn_Weiter.Hide(); // After 10 questions back to main menu
lbl_Frage.Hide();
rad_Antwort1.Hide();
rad_Antwort2.Hide();
rad_Antwort3.Hide();
rad_Antwort4.Hide();
lbl_Titel.Show();
lbl_Themen.Show();
rad_Geografie.Show();
rad_Geschichte.Show();
rad_Serien.Show();
rad_Videospiele.Show();
btn_Start.Show();
}
//... more code
J'ai essayé beaucoup de choses différentes, je l'ai essayé avec AcceptChanges()
, BeginEdit()
et EndEdit()
. Juste à des fins de débogage j'ai également essayé de mettre le DataTable et la commande d'édition dans une méthode. L'édition fonctionne alors parfaitement.
Merci beaucoup! Il semble que cela a fonctionné! Désolé de ne pas avoir répondu plus vite, j'avais beaucoup à faire :). – Racer4443
Pas de problèmes, @ Racer4443, je sais ce que tu veux dire;) et heureux d'être d'aide :) – davmos