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.

432 lines
17 KiB

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
''' <summary>
''' Sortierung der in der DB-Tabelle Spalaten festgelegten Reihenfolge
''' </summary>
''' <param name="Tablename"></param>
''' <param name="Data"></param>
''' <returns></returns>
''' <remarks></remarks>
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
''' <summary>
''' Purpose: SelectAll method. This method will Select all rows from the table.
''' </summary>
''' <returns>DataTable object if succeeded, otherwise an Exception is thrown. </returns>
''' <remarks>
''' Properties set after a succesful call of this method:
''' <UL>
''' <LI>iErrorCode</LI>
'''</UL>
''' </remarks>
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