Combo-Box und Entity Framework
Schreibe ich eine erste einfache app mit Winforms, C#, VS2010, und Entity Framework. Im Grunde genommen habe ich ein reichhaltiges DB ich bin zu Tippen, und ich habe bereits den Rahmen, erfolgreich genug, um füllen Sie ein DataGridView-Steuerelement mit einer Teilmenge der Arbeit Order-Tabelle.
Jetzt, ich möchten, setzen Sie ein Kombinationsfeld auf das Formular ("cbProjectID"), deren Wert ProjectID und DisplayValue ist ProjectNbr. Ich will nur um Projekte in der Liste des Kombinationsfelds, die verwandt sind, um Arbeitsaufträge, und nur einzigartige ProjectIDs innerhalb dieses Satzes (ein Projekt, das möglicherweise Dutzende von Arbeitsaufträgen....)
Ich nehme an, ich muss eine Liste erstellen von EF, unter Verwendung von LINQ. Ich bin ziemlich neu bei LINQ, und ich bin nicht es herauszufinden...Hier ist mein code bisher...
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
}
}
}
Ich habe durch das Netz versucht, eine Methode zu finden, die ich verstehe, aber ich versage. Vielleicht kann mir jemand helfen. Hier ist meine Datenquelle (ich nehme an, ich sollte NICHT verwenden, tblProject, sondern stattdessen die tblProject innen tblWorkOrder um mein Teilmenge...)
Jede Hilfe und/oder Beratung würde geschätzt werden.
Hier ist der code jetzt...
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;
}
}
}
InformationsquelleAutor JimS-CLT | 2012-09-12
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie die tblProject auf die Spitze, weil die anderen für eine WorkOrder nur. Allerdings müssen Sie zum filtern der Liste mit denen, die haben, zumindest auf WorkOrder:
um durch das Feld?
Amiran, ich möchte bestellen durch WONbr. Aber, ich erinnerte mich auch an eine Abfrage in der db, der genau das Projekt combo-box Details, die ich wollte, und mit Ihren Rat, habe es funktioniert. Danke. Nun, ich bin stecken mit dem ausgewählten Element als filter für die dataviewgrid. dataviewgrid hat eine Eigenschaft namens "Filter", aber ich kann nicht scheinen, um zu extrahieren die gewählte ID aus der combobox zum einstellen der filter-Eigenschaft. Oh, gut, einen Schritt zu einer Zeit-wünschte nur, jeder Schritt dauerte nicht so lange-aber ich Lerne. Nochmals vielen Dank Amiram.
Der ausgewählte Wert aus der
SelectedValue
Eigentum und die Abfrage so filtern, wie: Kontext.tblWorkOrders.Where(c => c.ProjectID==(int)cbProjectID.SelectedValue);Ich habe vereinfacht die Dinge jetzt ein wenig, dass ich immer mehr Verständnis. So, jetzt werde ich legen Sie die Datenquelle für das DataGridView nur, nachdem der Benutzer eine Auswahl in der combo-box, aber Amiram, ich bin immer noch Probleme mit SelectedValue... ... Es scheint Feuer viele Male laden der form, vielleicht mit jedem neuen Eintrag in die Liste? ... Ich habe Ihre Anweisung oben (kopiert und eingefügt), und ich habe einen Fehler bei der Konvertierung. Die datasource ist ein EF-Objekt, also die SelectedValue-Eigenschaft verweist auf ein Objekt, nicht eine ganze Zahl ist. Ich habe versucht, die "ID" - Eigenschaft des Objekts, sondern Intellisense keine hatte es.
InformationsquelleAutor Amiram Korach