''' ''' Verbindungseditor: Verbindet 2 Domain-Tables in einer dritten Tabelle. ''' ''' ''' Public Class frmVerbindungEditor #Region "Deklarationen" Dim Fokus As Integer = 1 Dim Domaintableleft As Sysadmin.DomainTable Dim Domaintableright As Sysadmin.DomainTable Dim domaintablebottom As Sysadmin.DomainTable Dim SpaltenTitel As New EDOKA.Tabellenspalte Dim SysadminfunktionNr As Integer Dim TablenameLeft As String Dim TablenameRight As String Dim TablenameBottom As String Dim first As Boolean = True #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 Sysadmin.DomainTable(TableLeft) Me.Domaintableright = New 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.Spaltentitel_aktualisieren(Me.C1DatenLeft, TablenameLeft, Me.Domaintableleft.Tabledata) 'SpaltenTitel.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 first = False If TablenameBottom = "Dokumentaufhebung" Or TablenameBottom = "dokumentindexmutation" Then CtxMenuDokumentaufhebung.Visible = True Else CtxMenuDokumentaufhebung.Visible = False End If 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 Sysadmin.DomainTable(Me.TablenameBottom, Fokus, keyvalue) Me.C1DatenBottom.DataSource = domaintablebottom.Tabledata Me.C1DatenBottom.DataMember = domaintablebottom.Tabledata.Tables(0).TableName 'SpaltenTitel.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() If first Then Exit Sub Dim msgres As MsgBoxResult If Me.domaintablebottom.Tabledata.HasChanges Then msgres = MsgBox("Daten wurden verändert.Speichern?", vbYesNoCancel + vbQuestion) If msgres = MsgBoxResult.Yes Then Me.domaintablebottom.Save_Data() End If End If 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.MitarbeiterNr Next End Sub ''' ''' Doppelklick in linken Grid ''' ''' ''' ''' Private Sub C1DatenLeft_DoubleClick(ByVal sender As Object, ByVal e As System.EventArgs) Handles c1DatenLeft.DoubleClick Try Me.BtnVerbinden_Click(sender, e) Catch End Try End Sub ''' ''' Linke Tabelle angeklickt ''' ''' ''' ''' Private Sub TBLeft_Click(ByVal sender As System.Object, ByVal e As C1.Win.C1TrueDBGrid.RowColChangeEventArgs) Handles c1DatenLeft.RowColChange Try check_changes() Refresh_Bottomtable() Catch End Try End Sub ''' ''' Doppelklick im rechten Grid ''' ''' ''' ''' Private Sub C1DatenRight_DoubleClick(ByVal sender As Object, ByVal e As System.EventArgs) Handles c1DatenRight.DoubleClick Try Me.BtnVerbinden_Click(sender, e) Catch ex As Exception End Try 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 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() Next Me.Refresh_Bottomtable() End Sub Private Sub VonDokumenttypKopierenToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles VonDokumenttypKopierenToolStripMenuItem.Click If Me.Fokus <> 1 Then MsgBox("Bitte den Fokus der Tabellen wechseln.") Exit Sub End If Dim s As String check_changes() s = InputBox("Bitte geben Sie die Dokumenttyp-Nr. ein, zu welcher die Daten kopiert werden sollen." + vbCrLf + "Von Dokumenttyp: " + Me.c1DatenLeft.Columns(0).Value.ToString + " nach...") If s <> "" Then Dim ileft As Integer = Me.c1DatenLeft.SelectedRows.Count Dim iright As Integer = Me.c1DatenRight.Splits(0).Rows.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 Dim i As Integer For i = 0 To Me.domaintablebottom.Tabledata.Tables(0).Rows.Count - 1 If Me.domaintablebottom.Tabledata.Tables(0).Rows(i).Item("Aktiv") = True Then keyvalueleft = s Keyvalueright = domaintablebottom.Tabledata.Tables(0).Rows(i).Item(3) Me.domaintablebottom.Insert_Bottom_Table(Me.Domaintableleft.Tabledata.Tables(0).Columns(0).ColumnName, keyvalueleft, Me.Domaintableright.Tabledata.Tables(0).Columns(0).ColumnName, Keyvalueright) End If Next If Me.domaintablebottom.Tabledata.HasChanges Then Me.domaintablebottom.Save_Data() End If Me.Refresh_Bottomtable() MsgBox("Kopiervorgang abgeschlossen.") End If End Sub End Class