2012-09-12 7 views
1

J'écris une première application simple en utilisant Winforms, C#, VS2010 et Entity Framework. Fondamentalement, j'ai un DB riche que je suis en train de taper, et j'ai déjà mis en place le framework, avec suffisamment de succès pour remplir un contrôle DataGridView avec un sous-ensemble de la table Work Order.Combo Box et Entity Framework

Maintenant, je veux placer une zone de liste déroulante sur le formulaire ("cbProjectID") dont la valeur est ProjectID et DisplayValue est ProjectNbr. Je veux seulement mettre des projets dans la liste déroulante qui sont liés à WorkOrders, et seulement ProjectIDs uniques dans cet ensemble (un projet peut avoir des douzaines d'ordres de travail ....)

Je suppose que j'ai besoin de générer une liste de EF, en utilisant LINQ. Je suis assez nouveau à LINQ, et je ne suis pas figurer dehors ... Voici mon code jusqu'à présent ...

using System; 
using CPASEntityFramework; 
using System.Data.Entity; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 

namespace BrowseWorkOrders 
{ 
    public partial class BrowseWOs : Form 
    { 
     public BrowseWOs() 
     { 
      InitializeComponent(); 
     } 

     private void BrowseWOs_Load(object sender, EventArgs e) 
     { 
      var context = new CPASEntities(); 
      var query = context.tblWorkOrders.Where(c => c.ProjectID==8); 
      tblWorkOrderBindingSource.DataSource = query.ToList(); 

     // Now, I want to load up the Combo Box with all the projects in the Work Order Table 

     } 
    } 
} 

que je suis à travers le filet en essayant de trouver une méthode que je comprends, mais J'échoue. Peut-être que quelqu'un peut m'aider. Voici ma source de données (je suppose que je ne devrais pas utiliser tblProject, mais au lieu d'utiliser le tblProject intérieur tblWorkOrder afin d'obtenir mon sous-ensemble ...)

Entity Framework Datasource

Toute aide et/ou des conseils seraient appréciés.


Voici le code maintenant ...

namespace BrowseWorkOrders 
{ 
    public partial class BrowseWOs : Form 
    { 
     public BrowseWOs() 
     { 
      InitializeComponent(); 
     } 

     private void BrowseWOs_Load(object sender, EventArgs e) 
     { 
      // Following loads up all Projects into the cbProjectID Combo Box 

      var context = new CPASEntities(); 
      var PrID = context.qryProjectIDNbrDescs.ToList(); 
      cbProjectID.DataSource = PrID; 
      cbProjectID.ValueMember = "ID"; 
      cbProjectID.DisplayMember = "ProjectNbr"; 
     } 

     private void cbProjectID_SelectedIndexChanged(object sender, EventArgs e) 
     { 
      var context = new CPASEntities(); 
      var query = context.tblWorkOrders.Where(c => c.ProjectID == (int)cbProjectID.SelectedValue).ToList(); 
      tblWorkOrderBindingSource.DataSource = query; 
     } 
    } 
} 
+0

J'ai trouvé l'erreur que je fait dans ce fil de discussion: [Stack Overflow Link] [1] [1]: http://stackoverflow.com/questions/4992129/combobox-selected-value-in-c-sharp –

Répondre

3

Vous devez le tblProject sur le dessus parce que l'autre est pour un seul WorkOrder seulement. Cependant, vous avez besoin de filtrer la liste avec ceux qui ont au moins WorkOrder:

var projects = context.tblProjects.Where(p => p.tblWorkOrders.Any()).ToArray(); 
cbProjectID.DataSource = projects; 
cbProjectID.ValueMember = "ProjectID"; 
cbProjectID.DisplayMember = "ProjectNbr"; 
+0

Merci beaucoup. Je me rapprochais de ça hier soir après que j'ai posté (j'ai travaillé dessus pendant un moment) mais une chose est partie ... Orderby? Quelle est la syntaxe. –

+0

ordre par quel champ? –

+0

Amiran, je veux commander par WONbr. Mais, je me suis aussi souvenu d'une requête dans la base de données qui contenait exactement les détails de la zone de liste déroulante du projet que je voulais, et avec votre conseil, cela a fonctionné. Je vous remercie. Maintenant, je suis coincé en utilisant l'élément sélectionné comme un filtre pour le dataviewgrid. dataviewgrid a une propriété appelée "Filter", mais je n'arrive pas à extraire l'ID choisi de la liste déroulante pour définir la propriété de filtre. Oh, eh bien, un pas à la fois - je souhaite juste que chaque étape ne prenne pas si longtemps - mais j'apprends. Merci encore Amiram. –