Liste der Mitarbeiter im DataGridView

03/06/2009 - 07:48 von Tamara Mikes | Report spam
Salü alle zusammen

Ich möchte in einem DataGridView eine Liste aller Mitarbeiter durch eine
Combobox gefiltert auf Abteilungen darstellen.

Folgende Daten und Tabellen habe ich

tblMitarbeiter
MitarbeiterID (Pk)
Mitarbeitername (Text)

tblAbteilung
AbteilungID (Pk)
AbteilungBezeichnung (Text)

tblMitarbeiter2Abteilung
MitarbeiterNr (Fk)
AbteilungNr(Fk)

Beziehungen:
tblMitarbeiterMitarbeiteID->tblMitarbeiter2AbteilungMitarbeiterNr
tblAbteilung.AbteilungID->tblMitarbeiter2Abteilung.AbteilungNr

Es funktioniert, dass ich in einem DataGridView alle Mitarbeiter darstelle
und die dazugehörigen Abteilungen aufliste. So kann ich zum Beispiel sehen
dass:

Meier, Einkauf
Müller, Werkstatt
Huber, Aussendienst
Huber, Controlling

Nun möchte ich eine Combobox erstellen mit allen Abteilungen (das kann ich).
Wenn man in der Combobox eine Abteilung auswàhlt, dann sollen in dier Liste
unten nur noch die Mitarbeiter der gewünschten Abteilung aufgelistet werden.
Das geht auch wunderbar (Filter auf Binding Source).

Jetzt aber etwas das ich noch nicht kann:
Ich möchte gerne in meinem DataGridView nur noch die Namen der Mitarbeiter
auflisten, ohne die Abteilungen so dass jeder Mitarbeiter nur noch einmal
vor kommt. Also obwohl Huber im Aussendienst und im Controlling ist, soll er
nur einmal gelistet werden.
Die Combobox mit dem Filter für die Abteilung soll aber dennoch
funktionieren.
Und genau hier stehe ich an.
Wenn ich die Abteilungen aus der DataGridView entferne, kann ich nicht mehr
filtern. Habe ich die Abteilungen drinn, ist Huber logischerweise doppelt
vorhanden.

Ich hoffe, dass ich mich gut ausgedrückt habe und jemand versteht was ich
mir vorstelle. Und noch viel mehr hoffe ich, dass es eine liebe Seele gibt,
welche mir ein bischen auf die Sprünge helfen kann.

Vielen lieben Dank für Euren Einsatz
Gruss Tamara
 

Lesen sie die antworten

#1 Peter Fleischer
03/06/2009 - 11:01 | Warnen spam
"Tamara Mikes" schrieb im Newsbeitrag
news:
...
Ich hoffe, dass ich mich gut ausgedrückt habe und jemand versteht was ich
mir vorstelle. Und noch viel mehr hoffe ich, dass es eine liebe Seele
gibt, welche mir ein bischen auf die Sprünge helfen kann.



Hi Tmara,
nachfolgend ein Beispiel:

Option Infer On
Option Strict On

Public Class Form1

Private dgv As New DataGridView With {.Dock = DockStyle.Fill}
Private WithEvents cb As New ComboBox With {.Dock = DockStyle.Top, _
.DisplayMember = "AbteilungBezeichnung", _
.ValueMember = "AbteilungID"}

Private Sub Form1_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Load
Me.Controls.AddRange(New Control() {dgv, cb})
cb.DataSource = (From itm In
TestData.DS.tblAbteilung.AsEnumerable).ToList
cb.SelectedIndex = -1
Anzeige()
End Sub

Private Sub cb_KeyDown(ByVal sender As Object, _
ByVal e As System.Windows.Forms.KeyEventArgs) _
Handles cb.KeyDown
If e.KeyCode = Keys.Enter Then Anzeige()
End Sub

Private Sub cb_SelectedIndexChanged(ByVal sender As Object, _
ByVal e As System.EventArgs) _
Handles cb.SelectedIndexChanged
Anzeige()
End Sub

Private Sub Anzeige()
If cb.SelectedIndex < 0 Then
dgv.DataSource = (From itm2 In TestData.DS.tblMitarbeiter _
Select New With {.Name =
itm2.Mitarbeitername}).ToList
Else
dgv.DataSource = (From itm1 In
TestData.DS.tblMitarbeiter2Abteilung.AsEnumerable _
Join itm2 In TestData.DS.tblMitarbeiter On
itm1.MitarbeiterNr Equals itm2.MitarbeiterID _
Where itm1.AbteilungNr = CType(cb.SelectedValue,
Integer) _
Select New With {.Name =
itm2.Mitarbeitername}).ToList
End If
End Sub


End Class

Class TestData
Public Shared DS As New DataSetNM
Public Shared BSMA As New BindingSource(DS, "tblMitarbeiter")
Public Shared BSAbt As New BindingSource(DS, "tblAbteilung")

Shared Sub New()
Dim r1 = DS.tblMitarbeiter.Rows.Add(Nothing, "Meier")
Dim r2 = DS.tblAbteilung.Rows.Add(Nothing, "Einkauf")
DS.tblMitarbeiter2Abteilung.Rows.Add(Nothing, _
r1("MitarbeiterID"), r2("AbteilungID"))
r1 = DS.tblMitarbeiter.Rows.Add(Nothing, "Müller")
r2 = DS.tblAbteilung.Rows.Add(Nothing, "Werkstatt")
DS.tblMitarbeiter2Abteilung.Rows.Add(Nothing, _
r1("MitarbeiterID"), r2("AbteilungID"))
r1 = DS.tblMitarbeiter.Rows.Add(Nothing, "Huber")
r2 = DS.tblAbteilung.Rows.Add(Nothing, "Aussendienst")
DS.tblMitarbeiter2Abteilung.Rows.Add(Nothing, _
r1("MitarbeiterID"), r2("AbteilungID"))
r2 = DS.tblAbteilung.Rows.Add(Nothing, "Controlling")
DS.tblMitarbeiter2Abteilung.Rows.Add(Nothing, _
r1("MitarbeiterID"), r2("AbteilungID"))
End Sub
End Class


Viele Grüsse
Peter

Ähnliche fragen