Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

BindingSource

3 views
Skip to first unread message

Josef Morlo

unread,
Feb 25, 2012, 2:32:59 PM2/25/12
to
Hallo,

Folgende Ausgangssituation:

Jet, zwei DataAdapter, ein DataSet mit zwei Tabellen ("Dialoge",
"Dialogpartner"), Relationen. Detail-Tabelle "Dialoge" enthält zwei
Fremdschlüssel zur Tabelle "Dialogpartner", Felder "Dialogpartner1" und
"Dialogpartner2"“

mRelation1 = mDSet.Relations.Add("RelDialogePartner1", _
mDSet.Tables("Dialogpartner").Columns("DialogpartnerNr"), _
mDSet.Tables("Dialoge").Columns("Dialogpartner1"))

mRelation2 = mDSet.Relations.Add("RelDialogePartner2", _
mDSet.Tables("Dialogpartner ").Columns("DialogpartnerNr"), _
mDSet.Tables("Dialoge").Columns("Dialogpartner2"))

Darstellung auf einem Formular mit zwei ComboBoxen, "CboPartner1" und
"CboPartner2", DatagridView "DgvDialoge" und drei "BindingSources":

mBSource1.DataSource = mDSet.Tables("Dialoge")
DgvDialoge.DataSource= mBSource1


mBSource2.DataSource = mDSet.Tables("Dialogpartner"))
Me.CboPartner1.DataSource = mBSource2
CboPartner1.ValueMember = "DialogartnerNr"
CboPartner1.DisplayMember = "Name"


mBSource3.DataSource = mDSet.Tables("Dialogpartner")
Me. CboPartner2.DataSource = mBSource3
CboPartner2.ValueMember = "DialogpartnerNr"
CboPartner2.DisplayMember = "Name"

CboPartner1.DataBindings.Add("SelectedValue", mBSource1,
"Dialogpartner1")
CboPartner2.DataBindings.Add("SelectedValue", mBSource1,
"Dialogpartner2")

Für die Anzeige funktioniert das auch. -

Für die Neuanlage eines Datensatzes hätte ich nun gern folgenden Effekt:
Wenn in einer Combobox ein Dialogpartner ausgewählt ist, sollte er nicht
mehr in der zweiten ComboBox erscheinen.

Ich habe mit BindingSource.Filter experimentiert. Aber das führt nicht
weiter. Wie könnte man das korrekt, schulmäßig lösen?

Danke und Gruß

Josef Morlo

Peter Fleischer

unread,
Feb 26, 2012, 1:54:48 PM2/26/12
to
Hi Josef,
an CboPartner2 bindest Du mBSource3, die alle Datensätze enthält. Wenn Du
beim Wechsel der Auswahl in CboPartner1 mittel LinQ eine Liste erstellst,
die das in CboPartner1 ausgewählte Element nicht enthält und diese bindest,
dann erreichst Du das gewünschte Ergebnis.

--
Viele Gruesse
Peter

Josef Morlo

unread,
Feb 27, 2012, 5:11:50 AM2/27/12
to
Hallo Peter,

Dass ich eine weitere Liste erstellen müsse, war der entscheidende Hinweis!

Ich hatte in meinen ersten Versuchen beide Comboboxen an die gleiche Sicht
gebunden. Nun habe eine eine weitere Instanz der DataTable „DialogPartner“
und über die Bindingsource eine zweite Sicht erstellt und daran die zweite
ComboBox gebunden. Nun funktionierts auch mit dem Filter. Ich hoffe, ich
sehe die Zusammenhänge halbwegs richtig.

Herzlichen Dank und lieben Gruß
Josef Morlo




Folgender Code bringt das gewünschte Ergebnis:
[...]
mDSet = New DataSet("DialogeDialogpartner")
mAdapterDialoge.Fill(mDSet, "Dialoge")
mAdapterDialogPartner.Fill(mDSet, "Dialogpartner")
*mAdapterDialogPartner.Fill(mDSet, "Dialogpartner2")

'Beziehung zu Redner1 über Teilnehmer
mRel1 = mDSet.Relations.Add("RelDialogePartner1", _
mDSet.Tables("DialogPartner").Columns("DialogPartnerNr"), _
mDSet.Tables("Dialoge").Columns("DialogPartner1"))

mRel2 = mDSet.Relations.Add("RelDialogePartner2", _
*mDSet.Tables("DialogPartner2").Columns("TeilnehmerNr"), _
mDSet.Tables("Dialoge").Columns("DialogPartner2"))

mBSource1.DataSource = mDSet.Tables(0)
With DataGridView1
.AutoGenerateColumns = True
.DataSource = mBSource1
End With

mBSource2.DataSource = mDSet.Tables(1)
CboPartner1.DataSource = mBSource2
CboPartner1.ValueMember = "DialogPartnerNr"
CboPartner1.DisplayMember = "Nachname"

mBSource3.DataSource = mDSet.Tables(2)
CboPartner2.DataSource = mBSource3
CboPartner2.ValueMember = " DialogPartnerNr"
CboPartner2.DisplayMember = "Nachname"

CboPartner1.DataBindings.Add( _
"SelectedValue", mBSource1, "Dialogpartner1")
CboPartner2.DataBindings.Add( _
"SelectedValue", mBSource1, "Dialogpartner2")

End Sub

Private Sub CboPartner1_SelectionChangeCommitted( _
ByVal sender As Object, ByVal e As System.EventArgs) _
Handles ComboBox1.SelectionChangeCommitted

Dim sfilter As String = _
"DialogPartnerNr <> " & CboPartner1.SelectedValue.ToString
mBSource3.Filter = sfilter

End Sub

0 new messages