Imports System Imports System.Data Imports System.Data.SqlTypes Imports System.Data.SqlClien Imports C1.Win.C1TrueDBGrid Imports Syncfusion.WinForms.DataGrid 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 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 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, ByVal 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 Dim IsSfDatagrid As Boolean = False If daten.GetType.Name = "SfDataGrid" Then IsSfDatagrid = True If IsSfDatagrid Then anzcols = daten.columns.count Else anzcols = daten.Splits(0).DisplayColumns.Count End If t = dt Me.Tabelle = tablename Dim st As New MySpaltenTitel If st.Check_Table_Has_Spaltendata(tablename) = False Then Exit Function For i = 0 To daten.Columns.Count - 1 If IsSfDatagrid Then s = daten.columns(i).MappingName Else s = daten.Columns(i).DataField End If 'If s = "ApplikationNr" Then ' MsgBox("Hallo") 'End If Me.Feld = s Me.getspalte() If Me.spaltenname <> "" Then If IsSfDatagrid Then daten.columns(i).headertext = Me.spaltenname Else daten.Columns(i).Caption = Me.spaltenname End If If Me.ColWith = 0 Then If IsSfDatagrid Then daten.columns(i).width = 0 daten.columns(i).visible = 0 Else daten.Splits(0).DisplayColumns(i).Width = 0 daten.Splits(0).DisplayColumns(i).Visible = False End If Else If IsSfDatagrid Then daten.columns(i).Width = Me.ColWith Else daten.Splits(0).DisplayColumns(i).Width = Me.ColWith End If End If If Me.locked Then If IsSfDatagrid Then daten.columns(i).style.readonly = True Else daten.Splits(0).DisplayColumns(i).Locked = True End If End If If Me.AlsHacken Then If Not IsSfDatagrid Then daten.Columns(i).ValueItems.Presentation = C1.Win.C1TrueDBGrid.PresentationEnum.CheckBox End If End If If Not IsSfDatagrid Then '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 End If If Not IsSfDatagrid Then 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 End If Next If Not IsSfDatagrid Then ColumnOrder(tablename, daten) daten.HeadingStyle.WrapText = False End If 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 Public Function ColumnOrder(ByVal Tablename As String, ByRef Data As C1TrueDBGrid) Dim spaltendata As DataTable = Globals.Spaltendaten Dim dv() As System.Data.DataRow Dim dr As System.Data.DataRow Dim dc As New Collection dv = spaltendata.Select("Tabelle='" & Tablename & "'", "Reihenfolge desc, spaltenr") 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 Check_Table_Has_Spaltendata(ByVal tab As String) As Boolean If spaltendata.Rows.Count = 0 Then load_data() Dim dv() As System.Data.DataRow dv = spaltendata.Select("Tabelle='" & tab + "'") If dv.Length = 0 Then Return False Else Return True End Function 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 System.Data.DataRow Dim dr As System.Data.DataRow dv = spaltendata.Select("Tabelle='" & tabelle & "' and tabellenspalte='" & feld & "'", "Reihenfolge, Spaltenr") 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(12) colwidth = dr.Item(4) order = dr.Item(5) alshacken = dr.Item(13) tiptext = dr.Item(6) numberformat = dr.Item(7).ToString Next End Function Public Sub load_data() If Me.spaltendata.Rows.Count > 0 Then Exit Sub Dim db As New clsDB spaltendata.Rows.Clear() db.Get_Spaltendata() spaltendata = db.dsDaten.Tables(0) Globals.Spaltendaten = spaltendata End Sub End Class