m:n - Bezeihung mit DataSet und DataGridView ?

24/04/2009 - 16:37 von progrudi | Report spam
Hallo zusammen,
ich komme mit dem Thema m:n - Beziehung in Data Grid Views nicht ganz
zurecht. Das Problem wurde zwar schon in einem Thread "m:n Zuordnung
darstellen mit DataSet und BindingSource 3/24/2009 2:49 AM PST" gefragt,
leider konnte ich hier keine eindeutige Antwort finden. Das Problem ist aber
das selbe. Zunàchst die Datenbankstruktur:
Es gibt eine Tabelle 'Person' mit einer 'ID' als PrimeKey
Es gibt eine Tabelle 'Gremium' mit einer 'ID' als PrimeKey
Es gibt eine VermittlerTabelle 'Person2Gremium' mit
einem ForeignKey 'PersonID' und einem ForeignKey 'GremiumID'.

Es gibt eine FK - Beziehung zwischen Person und Person2Gremium
Es gibt eine FK - Beziehung zwischen Gremium und Person2Gremium

Hier ist also eine Klassische m:n - Beziehung für Person und Gremium
modelliert.

Nun zur 'Bedientechnologie':
In Datagrid A will ich eine Person anklicken.
Als Ergebnis sollen in einem zweiten DataGridView alle Gremien angezeigt
werden, die über die Tabelle 'Person2Gremium' an die gewàhlte Person aus
Datagrid A gebunden sind.
Das Gleiche soll in einer anderen WindowsForm in die entgegengesetzte
Richtung funktionieren. (Datagrid A enthàlt jetzt das Gremium, in Datagrid B
sollen alle Personen aus diesem Gremium angezeigt werden)
Frage: Wie kann ich das bewerkstelligen?

Das Hinzufügen bzw. Zuordnen soll in einem anderen Fenster passieren, dass
hier aber nicht gefragt ist. Hier geht's erstmal nur um die Anzeige der
Zuordnungen.
 

Lesen sie die antworten

#1 Frank Dzaebel
24/04/2009 - 23:02 | Warnen spam
Hallo,

wir benutzen hier gerne den vollen Vor- und Zunamen als Usernamen.

ich komme mit dem Thema m:n - Beziehung in
DataGridViews nicht ganz zurecht. [...] Es geht um die Anzeige ...



Hier ein recht flexibles Beispiel:
(sei Bestellungen die Mittler-Tabelle)

private void Form1_Load(object sender, EventArgs e)
{
this.kundenTableAdapter.Fill(this.
personalBestellungKundeDataSet.Kunden);
this.bestellungenTableAdapter.Fill(this.
personalBestellungKundeDataSet.Bestellungen);
this.personalTableAdapter.Fill(this.
personalBestellungKundeDataSet.Personal);

personalBindingSource.PositionChanged += new EventHandler(
personalBindingSource_PositionChanged);
RefreshQuery();
}

void personalBindingSource_PositionChanged(object sender, EventArgs e)
{
RefreshQuery();
}

private void RefreshQuery()
{
var query from p in personalBestellungKundeDataSet.Personal
where p._Personal_Nr == (int)personalDataGridView.
CurrentRow.Cells[0].Value
join b in personalBestellungKundeDataSet.Bestellungen
on p._Personal_Nr equals b._Personal_Nr
join k in personalBestellungKundeDataSet.Kunden
on b._Kunden_Code equals k._Kunden_Code
select new
{
// hier halt beliebig, dass was Du wünscht:
NeuerName = p.Vorname + ", " + p.Nachname,
Versanddatum = b.Straße,
Kontaktperson = k.Kontaktperson
};

dataGridView1.DataSource = query.ToList();
}


ciao Frank
Dipl.Inf. Frank Dzaebel [MCP/MVP C#]
http://Dzaebel.NET

Ähnliche fragen