private void SelectionMultiples() { CListeObjetsDonnees liste = ListeRelations; CObjetDonneeAIdNumerique[] elts = (CObjetDonneeAIdNumerique[])CInterpreteurTextePropriete.CreateListeFrom( liste, "ElementLie", typeof(CObjetDonneeAIdNumerique)); elts = CFormSelectElementsMultiples.GetListeElements( m_typeRelation.TypeElements, m_typeRelation.FiltreDataAssocie, elts); if (elts != null) { using (CWaitCursor waiter = new CWaitCursor()) { //Table Entite->Vrai si existe dans les deux liste // ->Faux si existe uniquement dans l'ancienne liste (à supprimer) // ->Null si existe uniquement dans la nouvelle liste (à créer) Hashtable tableExistants = new Hashtable(); foreach (CRelationEntreeAgenda_ElementAAgenda rel in ListeRelations) { tableExistants[rel.ElementLie] = false; } foreach (CObjetDonneeAIdNumerique objet in elts) { if (tableExistants[objet] == null) //création { CRelationEntreeAgenda_ElementAAgenda rel = new CRelationEntreeAgenda_ElementAAgenda(m_entreeAgenda.ContexteDonnee); rel.CreateNewInCurrentContexte(); rel.ElementLie = objet; rel.EntreeAgenda = m_entreeAgenda; rel.RelationTypeEntree_TypeElement = m_typeRelation; } else { tableExistants[objet] = true; } } //Supprime ceux qui doivent être supprimés foreach (CRelationEntreeAgenda_ElementAAgenda rel in ListeRelations.ToArrayList()) { object val = tableExistants[rel.ElementLie]; if (val is bool && ((bool)val) == false) { rel.Delete(); } } } } RefreshText(); }