2012-05-02 3 views
0

J'ai créé une interface utilisateur dynamique qui affiche chaque module que l'utilisateur a ajouté à sa sélection et toutes les évaluations de ce module sous le nom du module, Toutes les données sont enregistrées dans des listes de tableaux, y compris des objets comme textBoxes et Étiquettes.Interface utilisateur dynamique, boucle

est ici à quoi il ressemble: http://www.4shared.com/photo/fullsize/Ja3jHpRJ/screen1.html

Ensuite, l'utilisateur doit entrer leurs marques pour chaque évaluation et le bouton Calculer devrait calculer leur note globale pour chaque module A ce stade, je suis juste ajoutais les marques ensemble . Le programme fonctionne correctement quand il n'y a qu'un module ajouté, mais quand il y a plus de modules, il semble penser qu'un TextBox est vide, même si je les remplis tous avec des nombres.

ici est mon code

private void calculateButton_Click(object sender, EventArgs e) 

    { 
     int modLength = dat.ModuleTitle.Count; 
     int modAsses = 0; 
     int loopCount = 0; 

     for (int i = 0; i < modLength; i++) 
     { 

      int total = 0; 

      if ((textboxComputer[loopCount] as TextBox).Text == "") 
      { 
       Console.WriteLine("!!!!!"); 
      } 
      else 
      { 
       modAsses = int.Parse(dat.ModuleAssessNum[i].ToString()); 
       for (int y = 0; y < modAsses; y++) 
       { 

        total = total + int.Parse((textboxComputer[loopCount] as TextBox).Text.ToString()); 

        loopCount = loopCount + 1; 
       } 

       Console.WriteLine(total); 
      } 
     } 
    } 

Quand j'ajouter deux ou plusieurs modules, il affiche le "!!!!!" message, mais calcule la marque pour le premier module ajouté.

est ici une sortie http://www.4shared.com/photo/fullsize/PlY29BMQ/screen2.html

+0

Parse sans try/catch urg ... – Ricibob

Répondre

0

Vous devez vous assurer que le code qui crée les dynamiques supplémentaires éléments à l'écran est appelé dans le cadre de la charge de la page, de sorte que alors le viewstate est réinséré dans les éléments et peuvent être relus par votre code.

0

Il y a quelque chose qui ne va pas avec votre code, probablement beaucoup tort (sauf les noms de vos variables). Jetez un oeil à votre variable loopCount - vous ne la modifierez que conditionnellement dans votre boucle mais vous l'utiliserez toujours au début de la boucle (textboxComputer[loopCount]).

Alors, quel est le comportement attendu de cela? La première fois que vous entrez dans la boucle, vous pouvez imprimer le total comme vous le dites, mais vous changez également la variable loopCount. Une fois arrivé au Console.WriteLine("!!!!!");, vous ne le changez plus jamais - vos itérations seront donc se comporter de la même manière.

+0

Je ne vois pas la raison pour laquelle mon code va à la Console.WriteLine ("!!!!!"); du tout, puisque aucune des zones de texte n'est vide, j'en ajoute une à la boucle chaque fois qu'elle ajoute la valeur à "total" afin qu'elle puisse ensuite passer à la zone de texte suivante – Ivan

+0

Ne devriez-vous pas au moins définir le loopCount = 0 lorsque vous passez au module suivant? – Bond

+0

Si je l'ai mis à 0 il va prendre la valeur de la première zone de texte dans le tableau. Les boîtes de texte pour toutes les évaluations sont stockées dans le même tableau, ajoutées une par une lorsque les évaluations sont affichées. Le loopCount ne fait que suivre la valeur de la zone de texte à prendre ensuite. – Ivan

Questions connexes