Imports C1.Win.C1TrueDBGrid Imports System.Data Imports System.Data.SqlTypes Imports System.Data.SqlClient Public Class frmApplikationskontakt #Region "Deklarationen" Dim Kontaktperson As New TKB.VV.Applikation.clsKontakt Dim Vertragspartner As New TKB.VV.Vertrag.clsVertragspartner Dim Person As New TKB.VV.DB.clsPerson Dim sec As New TKB.VV.Utils.MySecurity Dim msg As New TKB.VV.Utils.MyMessage Dim FormReadonly As Boolean = False Dim FormDataChanged As Boolean = False Dim SpaltenTitel As New TKB.VV.Utils.Tabellenspalte Private VertragspartnerNr As Integer Private KontaktNr As Integer Private Applikationskontaktnr As Integer Private Applikationsnr As Integer Dim Neuer_Datensatz As Boolean = False #End Region #Region "Eventhandler ChangeEreignisse" ''' ''' Allg Eventhandler für Chanage-Ereignise festlegen ''' ''' ''' Private Sub AddChanges(ByVal Container As Control) Dim l As New List(Of Control) Me.GetControl(Me, "*", l) Dim evh As EventHandler = AddressOf ChangesMade For Each c As Control In l If TypeOf c Is TextBox Then Dim ctl As TextBox = c AddHandler ctl.TextChanged, evh End If If TypeOf c Is MaskedTextBox Then Dim ctl As MaskedTextBox = c AddHandler ctl.TextChanged, evh End If If TypeOf c Is ComboBox Then Dim ctl As ComboBox = c AddHandler ctl.SelectedValueChanged, evh End If If TypeOf c Is CheckBox Then Dim ctl As CheckBox = c AddHandler ctl.CheckedChanged, evh End If If TypeOf c Is ListBox Then Dim ctl As ListBox = c AddHandler ctl.SelectedValueChanged, evh End If Next End Sub ''' ''' Envent-Handler für Change-Ereignisse ''' ''' ''' ''' Private Sub ChangesMade(ByVal sender As Object, ByVal e As System.EventArgs) Me.FormDataChanged = True End Sub ''' ''' Sucht in den Base-Controls sämtliche Controls mit dem Namen in "Key" (Wildcards * möglich) und listet ''' die gefundnen Controls in der Liste L zur weiteren Bearbeitung ''' ''' Base-Contrlo (z.B. aktuelles Formular ''' Schlüssel welcher gesucht werden soll ''' Liste der gefundenen Objekte ''' True wenn eines oder mehr Controls gefunden wurden, false wenn kein Control gefunden wurde. ''' ''' Private Function GetControl(ByVal BaseControl As Control, ByVal Key As String, ByRef L As List(Of Control), Optional ByVal ReturnAtFirstElement As Boolean = False) As Boolean If L Is Nothing Then L = New List(Of Control) Dim Gut As Boolean Dim ReturnFlag As Boolean = False If Key IsNot Nothing Then Key = Key.ToLower If BaseControl.HasChildren = True Then For Each ctl As Control In BaseControl.Controls Gut = False If Key Is Nothing Then Gut = True Else If ctl.Name.Length >= Key.Length Then Key = Key.ToLower If Key.StartsWith("*") Then If Key.Substring(1) = ctl.Name.ToLower.Substring(ctl.Name.Length - (Key.Length - 1), Key.Length - 1) Then Gut = True ElseIf Key.EndsWith("*") Then If Key.Substring(0, Key.Length - 1) = ctl.Name.ToLower.Substring(0, Key.Length - 1) Then Gut = True Else If Key = ctl.Name.ToLower Then Gut = True End If End If End If If Gut = True Then L.Add(ctl) If ReturnAtFirstElement = True Then ReturnFlag = True End If If ReturnFlag = False Then Call GetControl(ctl, Key, L) End If Next End If If L.Count - 1 > -1 Then Return True Else Return False End If End Function #End Region #Region "Closing / Check_Changes" ''' ''' Schliessen des Formulars ''' ''' ''' ''' Private Sub FormularClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing If Me.FormReadonly = True Then Exit Sub If Check_Changes() = False Then e.Cancel = True Else If Me.Kontaktperson.Neuer_Datensatz = True Then Me.Kontaktperson.Delete(Me.Kontaktperson.iApplikationKontaktnr.Value) Globals.MyEventHanlder.Kontakte_Closed() Me.Dispose() End If End Sub ''' ''' Prüfung, ob Datenänderungen vorgenommen wurden. ''' ''' Private Function Check_Changes() As Boolean If Me.FormReadonly Then Exit Function Dim msgres As MsgBoxResult If Me.FormDataChanged Then msgres = msg.Show_MessageYesNoCancel(3) Select Case msgres Case MsgBoxResult.Yes Save_Data() Return True Case MsgBoxResult.Cancel Return False Case MsgBoxResult.No Return True End Select Else Return True End If End Function #End Region #Region "Formular" Sub New() InitializeComponent() End Sub Sub New(ByVal Applikationskontaktnr As Integer, ByVal Vertragspartnernr As Integer, ByVal Applikationsnr As Integer, Optional ByVal CreateNew As Boolean = False, Optional ByVal FormReadOnly As Boolean = False) InitializeComponent() Me.FormReadonly = FormReadOnly If CreateNew = True Then Me.Applikationskontaktnr = Me.Kontaktperson.Add_New(Applikationsnr) Me.Neuer_Datensatz = True Else Me.Applikationskontaktnr = Applikationskontaktnr End If Me.VertragspartnerNr = Vertragspartnernr Me.Applikationsnr = Applikationsnr End Sub Private Sub frmApplikationskontakt_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load sec.Set_Form_Security(Me) If Me.FormReadonly = True Then Me.TSBtnSave.Enabled = False If Me.TSBtnSave.Enabled = False Or Me.TSBtnSave.Visible = False Then Me.FormReadonly = True Me.TSBtnCopy.Enabled = False Me.TSBtnNew.Enabled = False Me.TSBtnDelete.Enabled = False Else Me.FormReadonly = False End If Load_Securitylevel() Load_Rollen() Get_Data(Me.Applikationskontaktnr) If Me.Neuer_Datensatz = True Then Me.Kontaktperson.Neuer_Datensatz = True Me.Neuer_Datensatz = False End If If Me.FormReadonly = True Then Me.TSBtnSave.Enabled = False sec.Set_Form_Readonly(Me) End If Me.AddChanges(Me) End Sub #End Region #Region "Buttons/Menu" ''' ''' Formular schliessen ''' ''' ''' ''' Private Sub TSBtnQuit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TSBtnQuit.Click Me.Close() End Sub ''' ''' Sicherungs-Button betätigt ''' ''' ''' ''' Private Sub TSBtnSave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TSBtnSave.Click Me.Save_Data() Me.txtMutiert_am.Text = Me.Kontaktperson.daMutiert_am.ToString Me.FormDataChanged = False End Sub ''' ''' Datensatz kopieren ''' ''' ''' ''' Private Sub TSBtnCopy_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TSBtnCopy.Click If Me.Check_Changes = False Then Exit Sub Me.Get_Data(Kontaktperson.Create_Copy(Me.Kontaktperson.iApplikationKontaktnr.Value)) Me.Kontaktperson.Neuer_Datensatz = True End Sub ''' ''' Neuer Datensatz erstellen ''' ''' ''' ''' Private Sub TSBtnNew_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TSBtnNew.Click If Me.Check_Changes = False Then Exit Sub Me.Get_Data(Me.Kontaktperson.Add_New(Me.Applikationsnr)) Me.Kontaktperson.Neuer_Datensatz = True End Sub ''' ''' Aktueller Datensatz inaktivieren ''' ''' ''' ''' Private Sub TSBtnDelete_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TSBtnDelete.Click If msg.Show_MessageYesNo(250) = MsgBoxResult.Yes Then Me.Kontaktperson.Delete_Applikationskontakt(Me.Kontaktperson.iApplikationKontaktnr.Value) Me.Close() End If End Sub ''' ''' Menu Beenden ''' ''' ''' ''' Private Sub BeendenToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BeendenToolStripMenuItem.Click Me.TSBtnQuit_Click(sender, e) End Sub ''' ''' Vertragspartner suchen ''' ''' ''' ''' Private Sub btnVertragspartnersuche_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnVertragspartnersuche.Click Dim f As New frmVertragspartnerSuche f.ShowDialog() If f.Vertragspartnernr <> -1 Then Me.VertragspartnerNr = f.Vertragspartnernr f.Dispose() Me.Get_Vertragspartner() End If End Sub #End Region #Region "Security" ''' ''' Laden der Securitylevel-Daten in die Combobox ''' ''' Private Sub Load_Securitylevel() Dim seclevel As New TKB.VV.DB.clsSecurityLevel Dim secleveldata As New DataTable seclevel.cpMainConnectionProvider = Globals.conn Globals.conn.OpenConnection() secleveldata = seclevel.SelectAll Globals.conn.CloseConnection(True) Me.cboxSecurityLevel.DataSource = secleveldata Me.cboxSecurityLevel.DisplayMember = "Bezeichnung" Me.cboxSecurityLevel.ValueMember = "SecurityLevelNr" seclevel.Dispose() End Sub #End Region #Region "Daten" ''' ''' Person laden und präsentieren ''' ''' ''' Private Sub Get_Data(ByVal Nr As Integer) Me.Kontaktperson.Get_Applikationskontakt(Nr) Me.lbRolle.SelectedValue = Me.Kontaktperson.iKontakttypNr.Value Me.cbIntern.Checked = Me.Kontaktperson.bIntern.Value = True Me.txtErstellt_am.Text = Me.Kontaktperson.daErstellt_am.ToString Me.txtMutiert_am.Text = Me.Kontaktperson.daMutiert_am.ToString Me.txtBemerkung.Text = Me.Kontaktperson.sBemerkung.ToString Me.txtMutierer.Text = Me.Kontaktperson.iMutierer.Value Me.cbaktiv.Checked = Me.Kontaktperson.bAktiv.Value = True Me.cboxSecurityLevel.SelectedValue = Me.Kontaktperson.iSecurityLevelNr.Value If Me.Kontaktperson.iPersonNr.Value <> 0 Then Try Person.cpMainConnectionProvider = Globals.conn Person.iPersonNr = New SqlInt32(CType(Me.Kontaktperson.iPersonNr.Value, Int32)) Person.SelectOne() Me.VertragspartnerNr = Person.iVertragspartnernr.Value Catch End Try End If Me.Get_Vertragspartner() Dim i As Integer = 0 For i = 0 To Me.C1Kontaktpersonen.Splits(0).Rows.Count - 1 Me.C1Kontaktpersonen.Bookmark = i Try If Me.C1Kontaktpersonen.Columns("PersonNr").CellText(i) = Me.Kontaktperson.iPersonNr.Value Then Exit For Catch End Try Next Me.FormDataChanged = False End Sub ''' ''' Daten sichern, sofern Änderungen vorgenommen worden sind ''' ''' Private Sub Save_Data() If Me.FormDataChanged Then Me.Kontaktperson.iKontakttypNr = New SqlInt32(CType(Me.lbRolle.SelectedValue, Int32)) Me.Kontaktperson.iPersonNr = New SqlInt32(CType(Me.C1Kontaktpersonen.Columns("PersonNr").Value, Int32)) Me.Kontaktperson.bIntern = New SqlBoolean(CType(Me.cbIntern.Checked, Boolean)) Me.Kontaktperson.bAktiv = New SqlBoolean(CType(Me.cbaktiv.Checked, Boolean)) Me.Kontaktperson.sBemerkung = New SqlString(CType(Me.txtBemerkung.Text, String)) Me.Kontaktperson.iSecurityLevelNr = New SqlInt32(CType(Me.cboxSecurityLevel.SelectedValue, Int32)) Get_Data(Me.Kontaktperson.Save_Data) Me.FormDataChanged = False End If End Sub Private Function Get_Vertragspartner() Me.txtVertragspartner.Text = Me.Vertragspartner.Get_Vertragspartnername(Me.VertragspartnerNr) Get_Vertragspartner_Kontakte() End Function Private Function Get_Vertragspartner_Kontakte() Try 'If Check_Changes() = False Then Exit Function Catch ex As Exception End Try Me.C1Kontaktpersonen.Enabled = False Me.Vertragspartner.Get_Kontaktpersonen(Me.C1Kontaktpersonen) Me.SpaltenTitel.Spaltentitel_aktualisieren(Me.C1Kontaktpersonen, "Person", Me.Vertragspartner.Kontaktpersonen.Tabledata) sec.Set_Form_Security(Me) Me.C1Kontaktpersonen.Enabled = True End Function Private Function Load_Rollen() Dim rollen As New TKB.VV.DB.clsKontakttyp Dim rollendata As New DataTable rollen.cpMainConnectionProvider = Globals.conn rollendata = rollen.SelectAll() Dim rv As New DataView(rollendata, "ApplikationsbereichNr=2 and aktiv=1", "", DataViewRowState.CurrentRows) Me.lbRolle.DataSource = rv Me.lbRolle.ValueMember = "KontakttypNr" Me.lbRolle.DisplayMember = "Bezeichnung" End Function #End Region #Region "Kontextmenu C1Kontaktperson" ''' ''' C1Kontaktperson Details anzeigen ''' ''' ''' ''' Private Sub DetailsKontaktpersonToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles DetailsKontaktpersonToolStripMenuItem.Click Try Dim f As New frmPerson(Me.C1Kontaktpersonen.Columns("PersonNr").Value, Me.VertragspartnerNr, Me.FormReadonly) f.ShowDialog() f.Dispose() Catch End Try End Sub ''' ''' C1Kontaktperson neue Person erfassen ''' ''' ''' ''' Private Sub NeuKontaktpersonToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles NeuKontaktpersonToolStripMenuItem.Click Dim i As Integer = Me.Vertragspartner.Kontaktperson.Add_New(Me.VertragspartnerNr) Dim f As New frmPerson(i, Me.VertragspartnerNr, Me.FormReadonly) f.ShowDialog() f.Dispose() Me.Get_Vertragspartner_Kontakte() Dim r As Integer = 0 For r = 0 To Me.C1Kontaktpersonen.Splits(0).Rows.Count - 1 Me.C1Kontaktpersonen.Bookmark = r If Me.C1Kontaktpersonen.Columns("PersonNr").CellText(r) = i Then Exit For Next End Sub ''' ''' C1Kontaktperson Mousedown ''' ''' ''' ''' Private Sub C1Kontaktpersonen_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles C1Kontaktpersonen.MouseDown Me.C1Kontaktpersonen.Bookmark = Me.C1Kontaktpersonen.RowContaining(e.Y) End Sub #End Region #Region "KontextMenu Vertragspartner" ''' ''' Vertragspartner anzeigen ''' ''' ''' ''' Private Sub DetailsVertragspartnerToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles DetailsVertragspartnerToolStripMenuItem.Click Dim f As New frmVertragspartner(Me.VertragspartnerNr, Me.FormReadonly) f.ShowDialog() f.dispose() Me.Get_Vertragspartner() End Sub ''' ''' Neuer Vertragspartner eröffnen ''' ''' ''' ''' Private Sub NeuVertragspartnerToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles NeuVertragspartnerToolStripMenuItem.Click Dim i As Integer = Me.Vertragspartner.Add_New Dim f As New frmVertragspartner(i, Me.FormReadonly) f.ShowDialog() f.dispose() Me.VertragspartnerNr = i Me.Get_Vertragspartner() End Sub ''' ''' Vertragspartner suchen ''' ''' ''' ''' Private Sub SuchenVertragspartnerToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SuchenVertragspartnerToolStripMenuItem.Click Me.btnVertragspartnersuche_Click(sender, e) End Sub #End Region Private Sub C1Kontaktpersonen_FetchRowStyle(ByVal sender As Object, ByVal e As C1.Win.C1TrueDBGrid.FetchRowStyleEventArgs) Handles C1Kontaktpersonen.FetchRowStyle Try If Me.C1Kontaktpersonen.Columns("aktiv").CellValue(e.Row) = False Then Dim FNT As Font = e.CellStyle.Font e.CellStyle.Font = New Font(FNT, FontStyle.Strikeout) e.CellStyle.ForeColor = Color.Gray End If Catch End Try End Sub Private Sub txtVertragspartner_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtVertragspartner.TextChanged End Sub Private Sub KontaktpersonMenuStrip_Opening(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles KontaktpersonMenuStrip.Opening Me.Disable_Enable_Menu(sender, Me.C1Kontaktpersonen) End Sub ''' ''' Enabling bzw. Disabling der Menu-Einträge aufgrund der angezeigten Rows im Truedbgrind ''' ''' Zu bearbeitendes Menu ''' Betroffenes Grid ''' ''' Nach dem Setzen der Submenus wird sec.form_Security durchlaufen, damit allfällig standardmössig aktivierte Menueinträge ''' aufgrund der Security-Einstellung wieder deaktiviert werden Private Function Disable_Enable_Menu(ByRef menu As ContextMenuStrip, ByRef c1data As C1TrueDBGrid) If Me.FormReadonly Then For Each obj As Object In menu.Items Dim objtype As System.Type = obj.GetType If LCase(objtype.Name) = "toolstripmenuitem" Then Dim mnu As ToolStripMenuItem = obj If (mnu.Text.IndexOf("Anzeigen") > 0 Or mnu.Text.IndexOf("anzeigen") > 0 Or mnu.Text.IndexOf("Details") > 0) And c1data.Splits(0).Rows.Count > 0 Then mnu.Enabled = True Else mnu.Enabled = False End If End If Next sec.Set_Form_Security(Me) Exit Function End If If c1data.Splits(0).Rows.Count = 0 Then For Each obj As Object In menu.Items Dim objtype As System.Type = obj.GetType If LCase(objtype.Name) = "toolstripmenuitem" Then Dim mnu As ToolStripMenuItem = obj If mnu.Text.IndexOf("Neu") > 0 Then mnu.Enabled = True Else mnu.Enabled = False End If End If Next Else For Each obj As Object In menu.Items Dim objtype As System.Type = obj.GetType If LCase(objtype.Name) = "toolstripmenuitem" Then Dim mnu As ToolStripMenuItem = obj mnu.Enabled = True End If Next End If sec.Set_Form_Security(Me) End Function End Class