Ich habe ein Hauptformular mit diversen Comboboxen nach deren Inhalt gesucht werden kann.Aufgrund des Suchergebnisses werden dann die betroffenen Formulare geöffnet.
Wenn ich im Unterformular im dtrowNutzer Änderungen vornehme wird sofort selectedindexchanged ausgelöst. Dabei reicht die Zuweisung, ich muß noch nicht mal ein bsNutzer.endedit ausgelöst haben.
In der Combobox selber bleibt interessanterweise der vorher eingestellte Wert erhalten, in der Bindingsource des Nutzerformulars wechselt die Bindingsourceposition, wobei es so aussieht als ob er den aktuellen Datensatz nicht findet.
Setze ich die Werte im Formular (wovon ja im Forum abgeraten wird) tritt dieser Effekt nicht auf.
bsNutzer.Position gibt 0 zurück.
Beim speichern könnte ich ja das Vehalten der Combobox noch nachvollziehen, deswegen schalte ich da vorher den Handler von Selectedindex_changed aus.
Wie kann ich das Problem lösen ?
Hauptformular:
Formular Nutzer
Wenn ich im Unterformular im dtrowNutzer Änderungen vornehme wird sofort selectedindexchanged ausgelöst. Dabei reicht die Zuweisung, ich muß noch nicht mal ein bsNutzer.endedit ausgelöst haben.
In der Combobox selber bleibt interessanterweise der vorher eingestellte Wert erhalten, in der Bindingsource des Nutzerformulars wechselt die Bindingsourceposition, wobei es so aussieht als ob er den aktuellen Datensatz nicht findet.
Setze ich die Werte im Formular (wovon ja im Forum abgeraten wird) tritt dieser Effekt nicht auf.
bsNutzer.Position gibt 0 zurück.
Beim speichern könnte ich ja das Vehalten der Combobox noch nachvollziehen, deswegen schalte ich da vorher den Handler von Selectedindex_changed aus.
Wie kann ich das Problem lösen ?
Hauptformular:
Quellcode
- sub new
- Me.Rechnerliste = dsRechnerliste_be.GetInstance
- Rechnerliste.FuelleAlleTabellenRechnerliste(clsServerini.Anwendung("Rechnerliste_be"))
- Me.bsNutzer.DataSource = Me.Rechnerliste
- Me.cboSucheNutzer.SelectedIndex = -1
- end sub
- Public Sub HandlerAktivate()
- AddHandler Me.cboSucheNutzer.SelectedIndexChanged, AddressOf cboSucheNutzer_SelectedIndexChanged
- end sub
- Private Sub cboSucheNutzer_SelectedIndexChanged(sender As Object, e As EventArgs)
- With Me.cboSucheNutzer
- RemoveHandler .SelectedIndexChanged, AddressOf cboSucheNutzer_SelectedIndexChanged 'verhindert das AutoCompleteMode.Suggest TextChanged nochmal aufruft
- If .SelectedIndex > -1 Then
- AufrufNutzerformular(CInt(.SelectedValue))
- End If
- .AutoCompleteMode = AutoCompleteMode.SuggestAppend
- AddHandler .SelectedIndexChanged, AddressOf cboSucheNutzer_SelectedIndexChanged
- End With
- End Sub
- Private Sub AufrufNutzerformular(parintID_Nutzer As Integer)
- If frmDPNutzer Is Nothing Then
- Dim frmdpNutzer As New frmDPNutzer
- End If
- With frmDPNutzer
- .ID_Nutzer = parintID_Nutzer
- .Show()
- .BringToFront()
- .Left = Me.Location.X
- .Top = Me.Location.Y + Me.Size.Height
- .Width = Me.Width
- End With
- End Sub
Formular Nutzer
Quellcode
- Dim dtrowNutzer As dsRechnerliste_be.tbl_NutzerRow
- Sub New()
- InitializeComponent()
- Dim lstPflichtfeld As New List(Of Control)(New Control() {Me.txtNachname, Me.txtVorname, Me.cboKostenstelle, Me.cboApl})
- clsFormular.lstPflichtfelder = Me.lstPflichtfeld
- clsFormular.Formularstatus(False)
- Me.Rechnerliste = dsRechnerliste_be.GetInstance
- Me.bsAekzNutzer.DataSource = Rechnerliste
- Me.bsArbeitsplatz.DataSource = Rechnerliste
- Me.bsKostenstelle.DataSource = Rechnerliste
- Me.bsProtokolle_Nutzer.DataSource = Protokolle
- Me.bsNutzer.DataSource = Rechnerliste
- End Sub
- Private _ID_Nutzer As Integer
- public Property ID_Nutzer() As Integer
- Get
- Return _ID_Nutzer
- End Get
- Set(ByVal value As Integer)
- _ID_Nutzer = value
- Me.bsNutzer.Position = Me.bsNutzer.Find(Rechnerliste.tbl_Nutzer.ID_NutzerColumn.ColumnName, value)
- End Set
- End Property
- Private Sub bsNutzer_CurrentChanged(sender As Object, e As EventArgs) Handles bsNutzer.CurrentChanged
- If dtrowNutzer IsNot Nothing AndAlso Not dtrowNutzer.RowState = DataRowState.Deleted Then
- With dtrowNutzer
- If .RowState <> DataRowState.Unchanged Then
- Select Case MessageBox.Show("Sie haben den Nutzer " & dtrowNutzer.Nutzername & " geändert. Soll dieser gespeichert werden ?", "Speichern ?", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question)
- Case DialogResult.Yes
- Speichern()
- Case DialogResult.Cancel
- Me.bsNutzer.Position = Me.bsNutzer.Find(Rechnerliste.tbl_Nutzer.ID_NutzerColumn.ColumnName, dtrowNutzer.ID_Nutzer)
- End Select
- End If
- End With
- End If
- Dim dv As DataRowView = DirectCast(Me.bsNutzer.Current, DataRowView)
- dtrowNutzer = DirectCast(dv.Row, dsRechnerliste_be.tbl_NutzerRow)
- End Sub
- Sub NamenBilden()
- With dtrowNutzer
- If .Nachname > String.Empty AndAlso .Vorname > String.Empty Then
- If .Mittelinitial > String.Empty Then
- .BKUAnmeldename = String.Concat(.Vorname.Umlauteersetzen, .Mittelinitial, .Nachname.Umlauteersetzen) 'Hier wird selectedindex_changed ausgelöst
- .Mailintern = String.Concat(.Vorname, " ", .Mittelinitial, " ", .Nachname)
- .Mailextern = String.Concat(.Vorname.Umlauteersetzen, ".", .Mittelinitial, ".", .Nachname.Umlauteersetzen)
- Else
- .BKUAnmeldename = String.Concat(.Vorname.Umlauteersetzen, .Nachname.Umlauteersetzen)
- .Mailintern = String.Concat(.Vorname, " ", .Nachname)
- .Mailextern = String.Concat(.Vorname.Umlauteersetzen, ".", .Nachname.Umlauteersetzen)
- End If
- .BKUAnmeldename = .BKUAnmeldename.Replace("-", "")
- Dim dtrowsAnwendungNutzer As dsRechnerliste_be.tbl_A_Anwendung_NutzerRow() = dtrowNutzer.Gettbl_A_Anwendung_NutzerRows
- End With
- End Sub