2017-10-19 8 views
-1

Je crée un système d'examen en C#. Je crée le résultat, j'ai des réponses dans un listbox1 et des réponses correctes dans un autre listbox2, mon problème est que les valeurs dans les listboxes doivent être comparées et le résultat devrait être généré sur sa base. Si la moitié des valeurs correspondent à l'étudiant, passez sinon échec. Mon code pour cela suit mais cela ne fonctionne pas.Correspondance des éléments lisboxes et création du résultat

for(int intCount = 0; intCount < listBoxSanswers.Items.Count;intCount++) 
{ 
    for (int intSubCount = 0; intSubCount < listBoxActAnswers.Items.Count; intSubCount++) 
    { 
     if (listBoxActAnswers.Items[intCount].ToString() == listBoxActAnswers.Items[intSubCount].ToString()) 
     {  
      listBox3.Items.Add(listBoxActAnswers.Items[intCount].ToString()); 
     } 
    } 
} 
+1

dans votre instruction if l'une des deux listes devrait être "listBoxSanswers" – Bambuk

+0

Quand vous dites "ça ne marche pas", que voulez-vous dire exactement? Une erreur est-elle lancée ou n'obtenez-vous pas les résultats escomptés? – RH6

+0

Ne fonctionne pas signifie qu'il ne copie pas les éléments communs de deux zones de liste dans la troisième zone de liste. Je souhaite que les éléments de listbox1 et de listbox2 soient comparés et que les éléments communs soient ajoutés à listbox3. –

Répondre

0

Si vous souhaitez utiliser votre approche, que vous devez changer l'une des deux listes à listBoxSanswers

Si vous voulez un chemin plus court, sans les boucles, vous pouvez essayer cette ligne:

listBox3.Items.AddRange(listBoxActAnswers.Items.Cast<string>().ToList().Intersect(listBoxSanswers.Items.Cast<string>().ToList()).ToArray()); 

EDIT: Oh d'accord, alors vous avez un DataTable comme source de données. Que vous pouvez le faire de cette façon:

listBox3.Items.AddRange(listBoxActAnswers.Items.Cast<DataRowView>().Select(r => r[0]).ToList().Intersect(listBoxSanswers.Items.Cast<DataRowView>().Select(r => r[0]).ToList()).ToArray()); 

Peut-être que vous devez adapter Select(r => r[0]) à la colonne de droite qui est votre DisplayMember.

+0

votre erreur de lancement de code Incapable de lancer l'objet de type 'System.Data.DataRowView' pour taper 'System.String'. –

+0

J'ai modifié ma réponse – Bambuk