''' ''' 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 Utils.Tabellenspalte Dim SysadminfunktionNr As Integer Dim TablenameLeft As String Dim TablenameRight As String Dim TablenameBottom As String Dim first As Boolean = True Dim msg As New 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 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 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 = msg.Show_MessageYesNo(3) 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.clsmitarbeiter.iMitarbeiternr.Value 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 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 ''' ''' Anzeige allfälliger Cellen-Tips ''' ''' ''' ''' Private Sub C1DatenBottom_FetchCellTips(ByVal sender As Object, ByVal e As C1.Win.C1TrueDBGrid.FetchCellTipsEventArgs) Handles C1DatenBottom.FetchCellTips Dim ts As New Utils.Tabellenspalte ts.Tabelle = Me.TablenameBottom Try ts.Feld = Me.C1DatenBottom.Columns(e.ColIndex).DataField.ToString ts.getspalte() e.CellTip = ts.TipText Catch End Try ts = Nothing End Sub End Class