Imports System Imports System.Data Imports System.Data.SqlTypes Imports System.Data.SqlClient '* ' Object MyspaltenTitel ' ' Dieses Objekt liest die Daten aus der Tabelle Spalten und speichert diese in spaltendaten ' Die Daten werden für die Spaltenbezeichnung der C1Datagrids verwendet ' ' Autor: Stefan Hutter ' Datum: 2.12.2002 '* Imports C1.Win.C1TrueDBGrid Namespace Utils Public Class Tabellenspalte Private m_table As String Private m_field As String Private m_spaltenname As String Private m_locked As Boolean Private m_Width As Integer Private m_Order As Integer Private m_alsHacken As Boolean Private m_tiptext As String Private m_numberformat As String Property ColWith() As Integer Get Return m_Width End Get Set(ByVal Value As Integer) m_Width = Value End Set End Property Property Order() As Integer Get Return m_Order End Get Set(ByVal Value As Integer) m_Order = Value End Set End Property Property Tabelle() As String Get Return m_table End Get Set(ByVal Value As String) m_table = Value End Set End Property Property Feld() As String Get Return m_field End Get Set(ByVal Value As String) m_field = Value End Set End Property Property spaltenname() As String Get Return m_spaltenname End Get Set(ByVal Value As String) m_spaltenname = Value End Set End Property Property locked() As Boolean Get Return m_locked End Get Set(ByVal Value As Boolean) m_locked = Value End Set End Property Property AlsHacken() As Boolean Get Return m_alsHacken End Get Set(ByVal Value As Boolean) m_alsHacken = Value End Set End Property Property TipText() As String Get Return m_tiptext End Get Set(ByVal Value As String) m_tiptext = Value End Set End Property Property Numberformat() As String Get Return m_numberformat End Get Set(ByVal value As String) m_numberformat = value End Set End Property Public Sub New() End Sub Public Sub New(ByRef daten As Object, ByRef tablename As String, ByRef ds As DataSet) Spaltentitel_aktualisieren(daten, tablename, ds) End Sub Public Function getspalte() Try Dim myspalten As New MySpaltenTitel() myspalten.getspalte(Me.Tabelle, Me.Feld, Me.spaltenname, Me.locked, Me.ColWith, Me.Order, Me.AlsHacken, Me.TipText, Me.Numberformat) Catch ex As Exception MsgBox(ex.Message) End Try End Function Public Function Spaltentitel_aktualisieren(ByRef daten As Object, ByRef tablename As String, ByRef ds As DataSet) Dim anzcols As Integer Dim i As Integer Dim s As String anzcols = daten.Splits(0).DisplayColumns.Count Me.Tabelle = tablename For i = 0 To daten.Columns.Count - 1 s = daten.Columns(i).DataField Me.Feld = s Me.getspalte() daten.Columns(i).Caption = Me.spaltenname If Me.ColWith = 0 Then daten.Splits(0).DisplayColumns(i).Width = 0 daten.Splits(0).DisplayColumns(i).Visible = False Else daten.Splits(0).DisplayColumns(i).Width = Me.ColWith End If If Me.locked Then daten.Splits(0).DisplayColumns(i).Locked = True End If If Me.AlsHacken Then daten.Columns(i).ValueItems.Presentation = C1.Win.C1TrueDBGrid.PresentationEnum.CheckBox End If 'Präsentation von aktiv If LCase(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 'Dim items As C1.Win.C1TrueDBGrid.ValueItems = daten.Columns("aktiv").ValueItems 'items.Values.Clear() 'items.Values.Add(New C1.Win.C1TrueDBGrid.ValueItem("False", False)) ' unchecked 'items.Values.Add(New C1.Win.C1TrueDBGrid.ValueItem("True", True)) ' checked 'items.Values.Add(New C1.Win.C1TrueDBGrid.ValueItem("", "INDETERMINATE")) ' indeterminate state End If Select Case LCase(daten.Columns(i).DataField) Case "erstellt_am", "erstelltam" daten.Columns(i).DefaultValue = Now End Select If daten.Columns(i).DataType.Name = "DateTime" Then daten.Columns(i).NumberFormat = "dd.MM.yyyy HH:mm:ss" End If If Me.Numberformat <> "" Then daten.columns(i).numberformat = Me.Numberformat End If Next ColumnOrder(tablename, daten) daten.HeadingStyle.WrapText = False End Function Public Function Spaltentitel_aktualisieren(ByRef daten As Object, ByRef tablename As String, ByRef dt As DataTable, Optional ByVal Aktiv_Spalte_True_Setzen As Boolean = True) Dim anzcols As Integer Dim i As Integer Dim t As New DataTable() Dim s As String anzcols = daten.Splits(0).DisplayColumns.Count t = dt Me.Tabelle = tablename For i = 0 To daten.Columns.Count - 1 s = daten.Columns(i).DataField 'If s = "ApplikationNr" Then ' MsgBox("Hallo") 'End If Me.Feld = s Me.getspalte() daten.Columns(i).Caption = Me.spaltenname If Me.ColWith = 0 Then daten.Splits(0).DisplayColumns(i).Width = 0 daten.Splits(0).DisplayColumns(i).Visible = False Else daten.Splits(0).DisplayColumns(i).Width = Me.ColWith End If If Me.locked Then daten.Splits(0).DisplayColumns(i).Locked = True End If If Me.AlsHacken Then daten.Columns(i).ValueItems.Presentation = C1.Win.C1TrueDBGrid.PresentationEnum.CheckBox End If 'Präsentation von aktiv If LCase(daten.Columns(i).DataField) = "aktiv" And Aktiv_Spalte_True_Setzen = True 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 Select Case LCase(daten.Columns(i).DataField) Case "erstellt_am", "erstelltam" daten.Columns(i).DefaultValue = Now End Select If daten.Columns(i).DataType.Name = "DateTime" Then daten.Columns(i).NumberFormat = "dd.MM.yyyy HH:mm:ss" End If If Me.Numberformat <> "" Then daten.columns(i).numberformat = Me.Numberformat End If Next ColumnOrder(tablename, daten) daten.HeadingStyle.WrapText = False End Function Public Function Spaltentitel_aktualisieren_Optionaler_Aktiv_Filer(ByRef daten As Object, ByRef tablename As String, ByRef dt As DataTable, Optional ByVal Aktiv_Filter As String = "") Dim anzcols As Integer Dim i As Integer Dim t As New DataTable() Dim s As String anzcols = daten.Splits(0).DisplayColumns.Count t = dt Me.Tabelle = tablename For i = 0 To daten.Columns.Count - 1 s = daten.Columns(i).DataField Me.Feld = s Me.getspalte() If Me.spaltenname = "" Then daten.Splits(0).DisplayColumns(i).Width = 0 Else daten.Columns(i).Caption = Me.spaltenname If Me.ColWith = 0 Then daten.Splits(0).DisplayColumns(i).Width = 0 daten.Splits(0).DisplayColumns(i).Visible = False Else daten.Splits(0).DisplayColumns(i).Width = Me.ColWith End If If Me.locked Then daten.Splits(0).DisplayColumns(i).Locked = True End If If Me.AlsHacken Then daten.Columns(i).ValueItems.Presentation = C1.Win.C1TrueDBGrid.PresentationEnum.CheckBox End If 'Präsentation von aktiv If LCase(daten.Columns(i).DataField) = "aktiv" And Aktiv_Filter <> "" 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 = Aktiv_Filter End If Select Case LCase(daten.Columns(i).DataField) Case "erstellt_am", "erstelltam" daten.Columns(i).DefaultValue = Now End Select If daten.Columns(i).DataType.Name = "DateTime" Then daten.Columns(i).NumberFormat = "dd.MM.yyyy HH:mm:ss" End If If Me.Numberformat <> "" Then daten.columns(i).numberformat = Me.Numberformat End If End If Next ColumnOrder(tablename, daten) daten.HeadingStyle.WrapText = False End Function ''' ''' Sortierung der in der DB-Tabelle Spalaten festgelegten Reihenfolge ''' ''' ''' ''' ''' Public Function ColumnOrder(ByVal Tablename As String, ByRef Data As C1TrueDBGrid) Dim spaltendata As DataTable = Globals.Spaltendaten Dim dv() As DataRow Dim dr As DataRow Dim dc As New Collection dv = spaltendata.Select("Tabelle='" & Tablename & "'", "Reihenfolge desc, Eintragnr") For Each c As C1DisplayColumn In Data.Splits(0).DisplayColumns dc.Add(c) Next While Data.Splits(0).DisplayColumns.Count > 0 Data.Splits(0).DisplayColumns.RemoveAt(0) End While For Each dr In dv For Each e As C1DisplayColumn In dc If e.Name = dr.Item(3) Then Data.Splits(0).DisplayColumns.Insert(0, e) End If Next Next End Function End Class Public Class MySpaltenTitel Private spaltendata As DataTable = Globals.Spaltendaten Sub New() load_data() End Sub Sub dispose() spaltendata.Dispose() Me.dispose() End Sub Public Function getspalte(ByVal tabelle As String, ByVal feld As String, ByRef spaltenname As String, ByRef locked As Boolean, _ ByRef colwidth As Integer, ByRef order As Integer, ByRef alshacken As Boolean, ByRef tiptext As String, ByRef numberformat As String) If spaltendata.Rows.Count = 0 Then load_data() Dim dv() As DataRow Dim dr As DataRow dv = spaltendata.Select("Tabelle='" & tabelle & "' and tabellenspalte='" & feld & "'", "Reihenfolge, Eintragnr") If dv.Length = 0 Then spaltenname = "" locked = True colwidth = 0 order = 0 alshacken = False tiptext = "" numberformat = "" End If For Each dr In dv spaltenname = dr.Item(3) locked = dr.Item(4) colwidth = dr.Item(6) order = dr.Item(7) alshacken = dr.Item(5) tiptext = dr.Item(8) numberformat = dr.Item(14).ToString Next 'Dim i As Integer 'For i = 0 To spaltendata.Rows.Count - 1 ' If UCase(spaltendata.Rows(i).Item(1)) = UCase(tabelle) And UCase(spaltendata.Rows(i).Item(2)) = UCase(feld) Then ' spaltenname = spaltendata.Rows(i).Item(3) ' locked = spaltendata.Rows(i).Item(4) ' colwidth = spaltendata.Rows(i).Item(6) ' order = spaltendata.Rows(i).Item(7) ' alshacken = spaltendata.Rows(i).Item(5) ' tiptext = spaltendata.Rows(i).Item(8) ' Exit Function ' End If 'Next End Function Public Sub load_data() If Me.spaltendata.Rows.Count > 0 Then Exit Sub Dim spalten As New Utils.clsSpalten() spaltendata.Rows.Clear() spalten.cpMainConnectionProvider = conn spaltendata = spalten.Select_All_Aktiv Globals.Spaltendaten = spaltendata End Sub End Class Public Class clsSpalten Inherits DB.clsSpalten ''' ''' Purpose: SelectAll method. This method will Select all rows from the table. ''' ''' DataTable object if succeeded, otherwise an Exception is thrown. ''' ''' Properties set after a succesful call of this method: ''' ''' Public Function Select_All_Aktiv() As DataTable Dim scmCmdToExecute As SqlCommand = New SqlCommand() scmCmdToExecute.CommandText = "dbo.[pr_spalten_SelectAll_Aktiv]" scmCmdToExecute.CommandType = CommandType.StoredProcedure Dim dtToReturn As DataTable = New DataTable("spalten") Dim sdaAdapter As SqlDataAdapter = New SqlDataAdapter(scmCmdToExecute) ' // Use base class' connection object scmCmdToExecute.Connection = m_scoMainConnection Try scmCmdToExecute.Parameters.Add(New SqlParameter("@iErrorCode", SqlDbType.Int, 4, ParameterDirection.Output, True, 10, 0, "", DataRowVersion.Proposed, m_iErrorCode)) If m_bMainConnectionIsCreatedLocal Then ' // Open connection. m_scoMainConnection.Open() Else If m_cpMainConnectionProvider.bIsTransactionPending Then scmCmdToExecute.Transaction = m_cpMainConnectionProvider.stCurrentTransaction End If End If ' // Execute query. sdaAdapter.Fill(dtToReturn) m_iErrorCode = New SqlInt32(CType(scmCmdToExecute.Parameters.Item("@iErrorCode").Value, SqlInt32)) If Not m_iErrorCode.Equals(New SqlInt32(0)) Then ' // Throw error. Throw New Exception("Stored Procedure 'pr_spalten_SelectAll' reported the ErrorCode: " & m_iErrorCode.ToString()) End If Return dtToReturn Catch ex As Exception ' // some error occured. Bubble it to caller and encapsulate Exception object Throw New Exception("clsSpalten::SelectAll::Error occured.", ex) Finally If m_bMainConnectionIsCreatedLocal Then ' // Close connection. m_scoMainConnection.Close() End If scmCmdToExecute.Dispose() sdaAdapter.Dispose() End Try End Function End Class End Namespace