2012-07-17 4 views
0

J'ai eu un problème face au problème que j'utilise la table, "locationstation" et créer la station et l'emplacement à l'intérieur et la station et l'emplacement ont été liés à la localisation par leur clé primaire. J'ai déjà montré avec succès leurs données dans la zone de liste déroulante, mais le problème est maintenant que je ne sais pas comment sélectionner les données dans la zone de liste déroulante et enregistrer les données dans la table des emplacements. Je ne sais pas comment le faire fonctionner mais mes codes que j'essaie sont juste ici. L'aide sera grandement appréciée.linq requête et étranger utilisé pour créer des données

C'est le code que je lie le nom de la station et le nom de l'emplacement dans la liste déroulante.

private void Create_LS_Load(object sender, EventArgs e) 
    { 
     using (testEntities Setupctx = new testEntities()) 
     { 
      var storeStation = (from SLS in Setupctx.locationstations 
             join station s in Setupctx.stations on SLS.idStation equals s.idstations 
           select s.Station1).Distinct().ToList();         
      foreach (var LocationStation in storeStation) 
      { 
       cbStation.Items.Add(LocationStation); 
      } 

      var storeLocation = (from SLS in Setupctx.locationstations 
           join location l in Setupctx.locations on SLS.idLocation equals l.idlocation 
           select l.Location1).Distinct().ToList();          
      foreach (var LocationStation1 in storeLocation) 
      { 
       cbLocation.Items.Add(LocationStation1); 
      } 
     } 
    } 

Répondre

0

Salut réglé toutes les propriétés de navigation de selectStation égale à zéro avant d'ajouter l'objet en utilisant l'

Setupctx.locationstations.AddObject(selectStation); 

au lieu de

chaîne selectStation = cbStation.SelectedItem.ToString();

utilisation

LocationStation selectStation = (LocationStation) cbStation.SelectedItem;

puis d'extraire les valeurs de selectStation ou de faire ce que vous voulez avec. J'espère que cela aidera.

+0

Je sait en quelque sorte où le problème était, mais je ne sais pas comment le code dehors. La table locationstation a la colonne de stationid et locationid mais ma zone de liste déroulante contient le nom de la station et le nom de l'emplacement. D'une certaine manière, ils n'étaient pas les mêmes. Une idée comment? Je pense que mon code ci-dessus abit bousiller. – Philemon

+0

J'ai mis à jour la réponse ci-dessus. – ethicallogics

+0

bien qu'il n'y ait pas d'erreur sur les codes mais ils m'indiquent un message d'erreur pendant que je choisis la station et l'emplacement de la zone de liste déroulante. L'erreur qu'ils m'ont montrée est "Impossible de lancer des objets de type" System.String "pour taper" Setups.locationstation "." – Philemon

0
Station selectStation = (Station)cbStation.SelectedItem ; //cast here to your T 
Location selectLocation = (Location)cbLocation.SelectedItem; //cast here to your T 

locationstation creLS = new locationstation() 
{ 
StationId=selectStation.Id , 
LocationId=selectLocation.Id 
}; 

Setupctx.locationstations.AddObject(creLS); 
Setupctx.SaveChanges(); 

Cependant, je ne peux pas imaginer faire quelque chose comme ci-dessus sur la zone de liste déroulante avec des données clé/valeur. car probablement liaison types comboboxes à KeyValuePair en utilisant .ToDictionary() (où T est le type de clé primaire) ouvre une réutilisation de code plus facile pour gérer éléments sélectionnés et des liaisons sur toute zone de liste déroulante dans l'application entière en définissant ValueMember = Key et DisplayMember = valeur (ou toutes les propriétés clés/valeur sont dans votre contrôle combo), vous pouvez le faire par exemple:

long GetSelectedId(comboBox cbo) 
{ 


long IdOut=-1; 

if (cbo.SelectedItem==null) 
return IdOut; 

KeyValuePair<long, string> Item= (KeyValuePair<long, string>)cbo.SelectedItem; 
IdOut = Item.Key; 

return IdOut; 

} 
+0

Je ne comprends pas tout à fait le deuxième code que vous avez donné mais il ne peut pas confirmer travaille sur mon cas. alors, votre premier code donné en haut montre la même erreur que la réponse précédente. Une idée? – Philemon

+0

essayez de définir ValueMember et DisplayMember et lier ceux qui utilisent la propriété DataSource: combobox.datasource = YourLinqQuery, je veux dire au lieu de foreach et Items.Add – vlscanner

+0

Mais j'ai été conseillé d'utiliser linq. – Philemon

Questions connexes