Je voudrais créer une carte avec le nom de l'objet de propriété en tant que clé et une liste de type objet en tant que valeur.Créer une carte de liste générique pour initialiser plusieurs ComboBox en une fois
Dans mon cas, je voudrais avoir une carte:
Dictionary<string, List<Object1 Or 2>> objectToListofObj1Or2 = new Dictionary<string, List<Object1 Or 2>>();
je peux avoir soit une liste de contact ou Adresse.
J'ai une méthode pour initialiser ma carte, en ce moment il est AbstractEntity, une superclasse de Adresse et contact:
public Dictionary<string, List<AbstractEntity>> InitializeMapping()
{
Dictionary<string, List<AbstractEntity>> objectToListContactCorrespondance1 = new Dictionary<string, List<AbstractEntity>>();
objectToListContactCorrespondance1["CodeContactFactAchatExterne"] = ContactsFacturationAchatExterne.Cast<AbstractEntity>().ToList();
//my key is the property name, value is my list already created, here is a List of type Contact
objectToListContactCorrespondance1["CodeContactContractAchatExterne"] = ContactsContractualisationAchatExterne.Cast<AbstractEntity>().ToList();
//here a list of type Adress
objectToListContactCorrespondance1["CodeAdresseContractAchatExterne"] = AdressesContractualisationAchatExterne.Cast<AbstractEntity>().ToList();
Je fais tout cela pour pré sélectionner un grand nombre de rambComboBox avec le CodeAdress ou correspondant CodeContact dans la liste dans la vue comme ceci:
Dictionary<string, List<AbstractEntity>> mapping = InitializeMappingContact();
foreach (PropertyInfo propertyInfo in dataInit.GetType().GetProperties())
{
if (mapping.ContainsKey(propertyInfo.Name) && (alreadyIn.Where(code => code == propertyInfo.Name).ToList().Count == 0))
{
if (mapping[propertyInfo.Name].First().GetType() == typeof(Contact))
{
Contact test = (Contact)mapping[propertyInfo.Name].First();
propertyInfo.SetValue(dataInit, mapping[propertyInfo.Name].Count == 1 ? test.CodeContact : null, null);
}
else
{
Adresse test = (Adresse)mappingContact[propertyInfo.Name].First();
propertyInfo.SetValue(dataInit, mappingContact[propertyInfo.Name].Count == 1 ? test.CodeAdresse : null, null);
}
}
}
Ma carte fonctionne maintenant, j'ai ajouté le premier(). Mais mon combobox arent » sélectionné avec cette ligne (dataInit permet mon initialize la vue):
propertyInfo.SetValue(dataInit, mappingContact[propertyInfo.Name].Count == 1 ? test.CodeContact : null, null);
Sinon, si je n'utilise mon foreach et la méthode Initialize, je dois le faire ligne par ligne manuellement comme ceci:
dataInit.CodeAdresseContractAchatSVD = AdressesContractualisationAchatSVD.Count == 1 ? AdressesContractualisationAchatSVD.First().CodeAdresse : null;
Je voudrais faire:
dataInit."mapping[propertyInfo.Name]" = mappingContact[propertyInfo.Name].Count == 1 ? (Adress)mappingContact[propertyInfo.Name].First().CodeAdresse : null;
Comme une note, 'la cartographie [propertyInfo.Name] .GetType() == typeof (Contact)' serait mieux écrire: '' cartographie [propertyInfo.Name] est contact' – Clemens
Pourquoi ne pas utiliser le travail de AbstractEntity ? Que se passe-t-il lorsque vous déboguez le code? – CalC
Je pourrais avoir trouvé quelque chose: mon type de test est faux, je dois faire: mappage [propertyInfo.Name] .FIRST(). GetType() == typeof (Contact) ou pour faire la liste en tant que type correspondant –