You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

352 lines
14 KiB

Imports System
Imports System.Data
Imports System.Data.SqlTypes
Imports System.Data.SqlClient
''' <summary>
''' Verbindungseditor: Verbindet 2 Domain-Tables in einer dritten Tabelle.
''' </summary>
''' <remarks></remarks>
'''<seealso cref="T:Vertragsverwaltung.TKB.VV.Sysadmin.DomainTable"></seealso>
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 SpaltenTitel As New TKB.VV.Utils.Tabellenspalte
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
''' <summary>
''' Laden der linken und rechten Tabelle
''' </summary>
''' <param name="TableLeft"></param>
''' <param name="TableRight"></param>
''' <param name="TableBottom"></param>
''' <param name="SysadminfnktNr"></param>
''' <remarks></remarks>
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
If Me.SysadminfunktionNr = 17 Then
Me.C1DatenLeft.ContextMenuStrip = SecurityObjekte_KopierenMenuStrip
End If
End Sub
''' <summary>
''' Laden sämlticher Tabellen
''' </summary>
''' <param name="sender"></param>
''' <param name="e"></param>
''' <remarks></remarks>
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
End Sub
''' <summary>
''' Aktualiserung der Verbindungstabelle
''' </summary>
''' <remarks></remarks>
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.Spaltentitel_aktualisieren(Me.C1DatenBottom, TablenameBottom, Me.domaintablebottom.Tabledata)
End Sub
''' <summary>
''' Linker Fokus-Knopf betätigt
''' </summary>
''' <param name="sender"></param>
''' <param name="e"></param>
''' <remarks></remarks>
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
''' <summary>
''' Rechter Fokus-Knopf betätigt
''' </summary>
''' <param name="sender"></param>
''' <param name="e"></param>
''' <remarks></remarks>
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
''' <summary>
''' Prüfung, ob Verbindungstabelle geändert wurde.
''' </summary>
''' <remarks></remarks>
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
''' <summary>
''' Formular schliessen
''' </summary>
''' <param name="sender"></param>
''' <param name="e"></param>
''' <remarks></remarks>
Private Sub BeendenToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BeendenToolStripMenuItem.Click
check_changes()
Me.Close()
End Sub
''' <summary>
''' Formular schliessen
''' </summary>
''' <param name="sender"></param>
''' <param name="e"></param>
''' <remarks></remarks>
Private Sub TSBtnQuit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TSBtnQuit.Click
check_changes()
Me.Close()
End Sub
''' <summary>
''' Formular-Resize: Button Verbinden und Button Focus-Rechts neu positionieren
''' </summary>
''' <param name="sender"></param>
''' <param name="e"></param>
''' <remarks></remarks>
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
''' <summary>
''' Verbindungstabelle sichern
''' </summary>
''' <param name="sender"></param>
''' <param name="e"></param>
''' <remarks></remarks>
Private Sub TSBtnSave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TSBtnSave.Click
Me.domaintablebottom.Save_Data()
End Sub
''' <summary>
''' Nach Datenmutation der unteren Tabelle mutiert_am und mutierer nachführen
''' </summary>
''' <param name="sender"></param>
''' <param name="e"></param>
''' <remarks></remarks>
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
''' <summary>
''' Doppelklick in linken Grid
''' </summary>
''' <param name="sender"></param>
''' <param name="e"></param>
''' <remarks></remarks>
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
''' <summary>
''' Linke Tabelle angeklickt
''' </summary>
''' <param name="sender"></param>
''' <param name="e"></param>
''' <remarks></remarks>
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
''' <summary>
''' Doppelklick im rechten Grid
''' </summary>
''' <param name="sender"></param>
''' <param name="e"></param>
''' <remarks></remarks>
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
''' <summary>
''' Rechte Tabelle angeklickt
''' </summary>
''' <param name="sender"></param>
''' <param name="e"></param>
''' <remarks></remarks>
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
''' <summary>
''' Die linke und rechte Domain-Table in der unteren Tabelle verbinden.
''' Daten sichern und erneut laden
''' </summary>
''' <param name="sender"></param>
''' <param name="e"></param>
''' <remarks></remarks>
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
''' <summary>
''' Anzeige allfälliger Cellen-Tips
''' </summary>
''' <param name="sender"></param>
''' <param name="e"></param>
''' <remarks></remarks>
Private Sub C1DatenBottom_FetchCellTips(ByVal sender As Object, ByVal e As C1.Win.C1TrueDBGrid.FetchCellTipsEventArgs) Handles C1DatenBottom.FetchCellTips
Dim ts As New TKB.VV.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
Private Sub SecurityObjekteKopierenToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SecurityObjekteKopierenToolStripMenuItem.Click
Dim s As String
Dim a As String
s = msg.Get_Meldungstext(854)
a = InputBox(s, "SecurityObjekte von einer Rolle kopieren")
If a <> "" Then
Copy_SecurityObjekte(Me.C1DatenLeft.Columns(0).Value, a)
End If
End Sub
Private Sub Copy_SecurityObjekte(ByVal dest As Integer, ByVal source As Integer)
Dim scmCmdToExecute As SqlCommand = New SqlCommand()
Dim dtToReturn As DataTable = New DataTable()
Dim sdaAdapter As SqlDataAdapter = New SqlDataAdapter(scmCmdToExecute)
Dim CheckState As Integer
scmCmdToExecute.CommandText = "dbo.sp_copy_securityObjects"
scmCmdToExecute.CommandType = CommandType.StoredProcedure
scmCmdToExecute.Connection = conn.scoDBConnection
Try
scmCmdToExecute.Parameters.Add(New SqlParameter("@source", SqlDbType.Int, 4, ParameterDirection.Input, True, 10, 0, "", DataRowVersion.Proposed, source))
scmCmdToExecute.Parameters.Add(New SqlParameter("@dest", SqlDbType.Int, 4, ParameterDirection.Input, True, 10, 0, "", DataRowVersion.Proposed, dest))
scmCmdToExecute.Parameters.Add(New SqlParameter("@mitarbeiternr", SqlDbType.Int, 4, ParameterDirection.Input, True, 10, 0, "", DataRowVersion.Proposed, Globals.clsmitarbeiter.iMitarbeiternr.Value))
conn.OpenConnection()
sdaAdapter.Fill(dtToReturn)
conn.CloseConnection(True)
Catch ex As Exception
Throw New Exception("frmKontakt_Massenmutation::" & scmCmdToExecute.CommandText & "::Error occured." & ex.Message, ex)
Finally
scmCmdToExecute.Dispose()
sdaAdapter.Dispose()
End Try
End Sub
End Class