''' ''' Verbindungseditor: Verbindet 2 Domain-Tables in einer dritten Tabelle. ''' ''' ''' Public Class frmVerbindungEditor #Region "Deklarationen" Dim Fokus As Integer = 1 Dim Domaintableleft As TKB.VV.Sysadmin.DomainTable Dim Domaintableright As TKB.VV.Sysadmin.DomainTable Dim domaintablebottom As TKB.VV.Sysadmin.DomainTable Dim SysadminfunktionNr As Integer Dim TablenameLeft As String Dim TablenameRight As String Dim TablenameBottom As String Dim msg As New TKB.VV.Utils.MyMessage #End Region ''' ''' Laden der linken und rechten Tabelle ''' ''' ''' ''' ''' ''' Public Sub New(ByVal TableLeft As String, ByVal TableRight As String, ByVal TableBottom As String, ByVal SysadminfnktNr As Integer) InitializeComponent() Me.Domaintableleft = New TKB.VV.Sysadmin.DomainTable(TableLeft) Me.Domaintableright = New TKB.VV.Sysadmin.DomainTable(TableRight) Me.TablenameLeft = TableLeft Me.TablenameRight = TableRight Me.TablenameBottom = TableBottom Me.SysadminfunktionNr = SysadminfnktNr End Sub ''' ''' Laden sämlticher Tabellen ''' ''' ''' ''' Private Sub FrmVerbindungEditor_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Me.C1DatenLeft.DataSource = Domaintableleft.Tabledata Me.C1DatenLeft.DataMember = Domaintableleft.Tabledata.Tables(0).TableName Me.C1DatenRight.DataSource = Domaintableright.Tabledata Me.C1DatenRight.DataMember = Domaintableright.Tabledata.Tables(0).TableName SpaltenTitel_Aktualisieren(Me.C1DatenLeft, TablenameLeft, Me.Domaintableleft.Tabledata) SpaltenTitel_Aktualisieren(Me.C1DatenRight, TablenameRight, Me.Domaintableright.Tabledata) Refresh_Bottomtable() Me.C1DatenLeft.AllowAddNew = False Me.C1DatenLeft.AllowDelete = False Me.C1DatenLeft.AllowUpdate = False Me.C1DatenRight.AllowAddNew = False Me.C1DatenRight.AllowDelete = False Me.C1DatenRight.AllowUpdate = False Me.C1DatenBottom.AllowAddNew = False Me.C1DatenBottom.AllowDelete = False Me.GrpBoxLeft.Text = Me.TablenameLeft Me.GrpBoxRight.Text = Me.TablenameRight Me.GrpBoxBottom.Text = Me.TablenameBottom End Sub ''' ''' Aktualiserung der Verbindungstabelle ''' ''' Private Sub Refresh_Bottomtable() Try check_changes() Me.domaintablebottom.dispose() Catch End Try Dim keyvalue As String = "" If Fokus = 1 Then keyvalue = Me.C1DatenLeft.Columns(0).Value Else keyvalue = Me.C1DatenRight.Columns(0).Value End If Me.domaintablebottom = New TKB.VV.Sysadmin.DomainTable(Me.TablenameBottom, Fokus, keyvalue) Me.C1DatenBottom.DataSource = domaintablebottom.Tabledata Me.C1DatenBottom.DataMember = domaintablebottom.Tabledata.Tables(0).TableName SpaltenTitel_Aktualisieren(Me.C1DatenBottom, TablenameBottom, Me.domaintablebottom.Tabledata) End Sub ''' ''' Linker Fokus-Knopf betätigt ''' ''' ''' ''' Private Sub BtnFocusLeft_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnFocusLeft.Click Fokus = 1 Me.BtnFocusLeft.ImageIndex = 1 Me.BtnFocusRight.ImageIndex = 2 Refresh_Bottomtable() End Sub ''' ''' Rechter Fokus-Knopf betätigt ''' ''' ''' ''' Private Sub BtnFocusRight_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnFocusRight.Click Me.Fokus = 2 Me.BtnFocusRight.ImageIndex = 1 Me.BtnFocusLeft.ImageIndex = 2 Refresh_Bottomtable() End Sub ''' ''' Prüfung, ob Verbindungstabelle geändert wurde. ''' ''' Private Sub check_changes() Dim msgres As MsgBoxResult If Me.domaintablebottom.Tabledata.HasChanges Then msgres = msg.Show_MessageYesNo(3) If msgres = MsgBoxResult.Yes Then Me.domaintablebottom.Save_Data() End If End If End Sub ''' ''' Aktualisiert die Spaltentitel der aktuellen Tabelle ''' ''' ''' Public Sub SpaltenTitel_Aktualisieren(ByRef daten As Object, ByVal tablename As String, ByVal ds As DataSet) Dim titel As New TKB.VV.Utils.MySpaltenTitel Dim anzcols As Integer Dim cols(daten.Splits(0).DisplayColumns.Count) As C1.Win.C1TrueDBGrid.C1DisplayColumn Dim ts As New TKB.VV.Utils.Tabellenspalte Dim i As Integer Dim t As New DataTable() Dim s As String anzcols = daten.Splits(0).DisplayColumns.Count t = ds.Tables(0) ts.Tabelle = tablename For i = 0 To daten.Columns.Count - 1 s = daten.Columns(i).DataField ts.Feld = s ts.getspalte() daten.Columns(i).Caption = ts.spaltenname If ts.ColWith = 0 Then daten.Splits(0).DisplayColumns(i).Width = 0 daten.Splits(0).DisplayColumns(i).Visible = False Else daten.Splits(0).DisplayColumns(i).Width = ts.ColWith End If If ts.locked Then daten.Splits(0).DisplayColumns(i).Locked = True End If If ts.AlsHacken Then daten.Columns(i).ValueItems.Presentation = C1.Win.C1TrueDBGrid.PresentationEnum.CheckBox End If 'Präsentation von aktiv If daten.Columns(i).DataField = "aktiv" Then daten.Columns(i).ValueItems.Presentation = C1.Win.C1TrueDBGrid.PresentationEnum.CheckBox daten.Columns(i).ValueItems.DefaultItem = True daten.Columns(i).DefaultValue = True daten.Columns(i).FilterText = True End If If daten.Columns(i).DataField = "erstellt_am" Then daten.Columns(i).DefaultValue = Now End If Next End Sub ''' ''' Formular schliessen ''' ''' ''' ''' Private Sub BeendenToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BeendenToolStripMenuItem.Click check_changes() Me.Close() End Sub ''' ''' Formular schliessen ''' ''' ''' ''' Private Sub TSBtnQuit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TSBtnQuit.Click check_changes() Me.Close() End Sub ''' ''' Formular-Resize: Button Verbinden und Button Focus-Rechts neu positionieren ''' ''' ''' ''' Private Sub FrmVerbindungEditor_Resize(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Resize Me.BtnFocusRight.Left = Me.Width - (Me.BtnFocusRight.Width + 10) Me.BtnVerbinden.Left = Me.SplitContainer2.Panel1.Width - (Me.BtnVerbinden.Width / 2) End Sub ''' ''' Verbindungstabelle sichern ''' ''' ''' ''' Private Sub TSBtnSave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TSBtnSave.Click Me.domaintablebottom.Save_Data() End Sub ''' ''' Nach Datenmutation der unteren Tabelle mutiert_am und mutierer nachführen ''' ''' ''' ''' Private Sub C1DatenBottom_AfterColUpdate(ByVal sender As Object, ByVal e As C1.Win.C1TrueDBGrid.ColEventArgs) Handles C1DatenBottom.AfterColUpdate Dim i As Integer For i = 0 To Me.C1DatenBottom.Columns.Count - 1 If LCase(Me.C1DatenBottom.Columns(i).DataField) = "mutiert_am" Then Me.C1DatenBottom.Columns(i).Value = Now If LCase(Me.C1DatenBottom.Columns(i).DataField) = "mutierer" Then Me.C1DatenBottom.Columns(i).Value = Globals.clsmitarbeiter.iMitarbeiternr.Value Next End Sub ''' ''' Linke Tabelle angeklickt ''' ''' ''' ''' Private Sub TBLeft_Click(ByVal sender As System.Object, ByVal e As C1.Win.C1TrueDBGrid.RowColChangeEventArgs) Handles C1DatenLeft.RowColChange check_changes() Refresh_Bottomtable() End Sub ''' ''' Rechte Tabelle angeklickt ''' ''' ''' ''' Private Sub TBRight_Click(ByVal sender As System.Object, ByVal e As C1.Win.C1TrueDBGrid.RowColChangeEventArgs) Handles C1DatenRight.RowColChange check_changes() Refresh_Bottomtable() End Sub ''' ''' Die linke und rechte Domain-Table in der unteren Tabelle verbinden. ''' Daten sichern und erneut laden ''' ''' ''' ''' Private Sub BtnVerbinden_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnVerbinden.Click check_changes() Dim ileft As Integer = Me.C1DatenLeft.SelectedRows.Count Dim iright As Integer = Me.C1DatenRight.SelectedRows.Count Dim ic As Integer = 0 Dim Currentsel As Boolean Dim colrows As C1.Win.C1TrueDBGrid.SelectedRowCollection Dim keyvalueleft As Integer = 0 Dim Keyvalueright As Integer = 0 If (Me.Fokus = 1 And ileft > 1) Or (Me.Fokus = 2 And iright > 1) Then Me.msg.show_standardmessage(4, MsgBoxStyle.Exclamation) Exit Sub End If If Me.Fokus = 1 Then ic = iright colrows = Me.C1DatenRight.SelectedRows End If If Me.Fokus = 2 Then ic = ileft colrows = Me.C1DatenLeft.SelectedRows End If If ic = 0 Then ic = ic + 1 Currentsel = True End If Dim i As Integer For i = 0 To ic - 1 If Me.Fokus = 1 Then keyvalueleft = Me.C1DatenLeft.Columns(0).Value If Currentsel = True Then Keyvalueright = Me.C1DatenRight.Columns(0).Value Else Keyvalueright = Me.C1DatenRight.Columns(0).CellValue(colrows(i)) End If Else Keyvalueright = Me.C1DatenRight.Columns(0).Value If Currentsel = True Then keyvalueleft = Me.C1DatenLeft.Columns(0).Value Else keyvalueleft = Me.C1DatenLeft.Columns(0).CellValue(colrows(i)) End If End If Next Me.domaintablebottom.Insert_Bottom_Table(Me.Domaintableleft.Tabledata.Tables(0).Columns(0).ColumnName, keyvalueleft, Me.Domaintableright.Tabledata.Tables(0).Columns(0).ColumnName, Keyvalueright) Me.domaintablebottom.Save_Data() Me.Refresh_Bottomtable() End Sub End Class