jj 21.09 classwindreamdocgrid

This commit is contained in:
JenneJ 2016-09-21 16:14:24 +02:00
parent 3265b3fd53
commit b2b75dfa19
2 changed files with 142 additions and 108 deletions

View File

@ -11,8 +11,11 @@ Public Class ClassWindreamDocGrid
Public Shared RESULT_INWORK As Boolean
Public Shared RESULT_DOC_ID As Integer
Public Shared RESULT_DISPLAYNAME As String
Public Shared RESULT_CONFIG_IDS As Hashtable
Private Shared _dropdownValueChangedHandler As EventHandler
Private Shared _datepickerValueChangedHandler As EventHandler
Private Shared _textValueChangedHandler As EventHandler
Public Shared Sub GetDocItems(gridView As GridView)
Try
@ -47,105 +50,54 @@ Public Class ClassWindreamDocGrid
End Try
End Sub
Public Shared Sub FormatColumns(gridView As GridView, DT_RESULT As DataTable, DT_WINDREAM_RESULTLIST As DataTable, DT_DOCRESULT_DROPDOWN_ITEMS As DataTable, DropdownValueChangedHandler As EventHandler)
Dim dateColumns As New List(Of String)
Dim checkboxColumns As New List(Of String)
Dim dropdownTable As New DataTable()
dropdownTable.TableName = "DROPDOWN_TABLE"
dropdownTable.Columns.Add("ID", GetType(Integer))
dropdownTable.Columns.Add("COLUMN_VIEW", GetType(String))
Public Shared Sub FillColumns(gridView As GridView, DT_RESULT As DataTable, DT_WINDREAM_RESULTLIST As DataTable, DT_DOCRESULT_DROPDOWN_ITEMS As DataTable, DropdownValueChangedHandler As EventHandler, DatepickerValueChangedHandler As EventHandler, TextValueChangedHandler As EventHandler)
' Handler speichern
_dropdownValueChangedHandler = DropdownValueChangedHandler
_datepickerValueChangedHandler = DatepickerValueChangedHandler
_textValueChangedHandler = TextValueChangedHandler
' Tabelle vor dem verändern klonen
Dim clonedTable As DataTable = DT_RESULT.Clone()
RESULT_CONFIG_IDS = New Hashtable()
' Datentypen der DataTable setzen
For Each row As DataRow In DT_WINDREAM_RESULTLIST.Rows
Dim guid As Integer = row.Item("GUID")
Dim width As Integer = row.Item("WIDTH")
Dim typeID As Integer = row.Item("TYPE_ID")
Dim isVisible As Boolean = row.Item("VISIBLE")
Dim isEditable As Boolean = row.Item("EDITABLE")
Dim columnTitle As String = row.Item("HEADER_CAPTION")
' Liste aller Datumsspalten erstellen
RESULT_CONFIG_IDS.Add(columnTitle, guid)
' Checkbox Spalte auf Boolean setzen
If typeID = 2 And isVisible Then
Dim checkboxColumn As DataColumn = clonedTable.Columns(columnTitle)
If Not IsNothing(checkboxColumn) Then
checkboxColumn.DataType = GetType(Boolean)
End If
End If
' Datepicker Spalte auf Date setzen
If typeID = 3 And isVisible = True Then
dateColumns.Add(columnTitle)
End If
Dim datepickerColumn As DataColumn = clonedTable.Columns(columnTitle)
' Liste aller Checkboxspalten erstellen
If typeID = 2 And isVisible = True Then
checkboxColumns.Add(columnTitle)
End If
If typeID = 4 And isVisible = True Then
Dim dropdownRow As DataRow = dropdownTable.NewRow()
dropdownRow.Item("ID") = guid
dropdownRow.Item("COLUMN_VIEW") = columnTitle
dropdownTable.Rows.Add(dropdownRow)
dropdownTable.AcceptChanges()
End If
Next
Dim clonedTable As DataTable = DT_RESULT.Clone()
' In DataTable die DateSpalten mit dem Type Date belegen
For Each dateColumnTitle As String In dateColumns
Dim dateColumn As DataColumn = clonedTable.Columns(dateColumnTitle)
If Not IsNothing(dateColumn) Then
dateColumn.DataType = GetType(Date)
End If
Next
' In DataTable die CheckboxSpalten mit dem Typ Boolean belegen
For Each checkboxColunmTitle As String In checkboxColumns
Dim checkboxColumn As DataColumn = clonedTable.Columns(checkboxColunmTitle)
If Not IsNothing(checkboxColumn) Then
checkboxColumn.DataType = GetType(Boolean)
End If
Next
Try
clonedTable.Load(DT_RESULT.CreateDataReader())
DT_RESULT = clonedTable
Catch ex As Exception
ClassLogger.Add(">> Attention: Could not load converted datatable DocSearch: " & ex.Message, False)
End Try
gridView.GridControl.DataSource = DT_RESULT
' Breite der Spalten anpassen
For Each row As DataRow In DT_WINDREAM_RESULTLIST.Rows
Dim Width = row.Item("WIDTH")
If Not IsNothing(Width) And Not IsDBNull(Width) Then
Dim column = DirectCast(gridView.Columns.Item(row.Item("HEADER_CAPTION")), DevExpress.XtraGrid.Columns.GridColumn)
If Not IsNothing(column) Then
column.Width = Width
If Not IsNothing(datepickerColumn) Then
'datepickerColumn.DataType = GetType(DateTime)
End If
End If
Next
' Dropdown/Combobox Editor für passende Spalten anwenden
For Each dropdownRow As DataRow In dropdownTable.Rows
Dim dropdown As New RepositoryItemComboBox()
Dim columnTitle As String = dropdownRow.Item("COLUMN_VIEW")
Dim guid As Integer = dropdownRow.Item("ID")
Dim expression As String = String.Format("CONFIG_ID = {0}", guid.ToString())
Dim matchingRows() As DataRow = DT_DOCRESULT_DROPDOWN_ITEMS.Select(expression, "SEQUENCE")
' Dropdown füllen
For Each matchingRow As DataRow In matchingRows
Dim item As New WindreamDocGridComboboxItem()
item.ConfigID = matchingRow.Item("CONFIG_ID")
item.Value = matchingRow.Item("VALUE")
dropdown.Items.Add(item)
Next
gridView.GridControl.RepositoryItems.Add(dropdown)
If Not IsNothing(gridView.Columns(columnTitle)) Then
gridView.Columns(columnTitle).ColumnEdit = dropdown
End If
AddHandler dropdown.SelectedValueChanged, _dropdownValueChangedHandler
Next
' Eigenschaften der Spalten anpassen
' Tabelle zurückspielen und zuweisen
Try
clonedTable.Load(DT_RESULT.CreateDataReader())
DT_RESULT = clonedTable
gridView.GridControl.DataSource = DT_RESULT
Catch ex As Exception
ClassLogger.Add(">> Attention: Could not load converted datatable DocSearch: " & ex.Message, False)
End Try
gridView.Columns.Item("ICON").MaxWidth = 24
gridView.Columns.Item("ICON").MinWidth = 24
@ -153,8 +105,6 @@ Public Class ClassWindreamDocGrid
gridView.Columns.Item("OBJECTTYPE").Visible = False
gridView.Columns.Item("DocID").Visible = False
' Changed & Created Spalten anpassen
Dim created, changed As String
If USER_LANGUAGE <> "de-DE" Then
changed = "Changed"
@ -176,30 +126,104 @@ Public Class ClassWindreamDocGrid
changedColumn.DisplayFormat.FormatString = CURRENT_DATE_FORMAT & " HH:MM:ss"
End If
' Für die Dropdown Spalte Änderungen zulassen
' Alle Spalten aus ReadOnly setzen, danach werden alle passenden auf nicht ReadOnly gesetzt
For Each column As GridColumn In gridView.Columns
Dim _AllowEdit As Boolean = False
For Each dropdownrow As DataRow In dropdownTable.Rows
Dim columnTitle = dropdownrow.Item("COLUMN_VIEW")
If columnTitle = column.FieldName Then
_AllowEdit = True
Exit For
End If
Next
column.OptionsColumn.AllowEdit = _AllowEdit
column.OptionsColumn.AllowEdit = False
Next
Dim CheckBoxEditorForDisplay = New RepositoryItemCheckEdit()
CheckBoxEditorForDisplay.ValueChecked = "True"
CheckBoxEditorForDisplay.ValueUnchecked = "False"
'Alle Checkbox Spalten durchgehen und CheckBoxEditor zuweisen
For Each columnTitle As String In checkboxColumns
gridView.GridControl.RepositoryItems.Add(CheckBoxEditorForDisplay)
If Not IsNothing(gridView.Columns(columnTitle)) Then
gridView.Columns(columnTitle).ColumnEdit = CheckBoxEditorForDisplay
For Each row As DataRow In DT_WINDREAM_RESULTLIST.Rows
Dim guid As Integer = row.Item("GUID")
Dim width As Integer = row.Item("WIDTH")
Dim typeID As Integer = row.Item("TYPE_ID")
Dim isVisible As Boolean = row.Item("VISIBLE")
Dim isEditable As Boolean = row.Item("EDITABLE")
Dim columnTitle As String = row.Item("HEADER_CAPTION")
' Breite der Spalten setzen
If Not IsNothing(width) And Not IsDBNull(width) Then
Dim column = DirectCast(gridView.Columns.Item(row.Item("HEADER_CAPTION")), DevExpress.XtraGrid.Columns.GridColumn)
If Not IsNothing(column) Then
column.Width = width
End If
End If
If typeID = 1 And isVisible And isEditable Then
Dim textedit As New RepositoryItemTextEdit()
Dim value As String = ClassDatabase.Execute_Scalar("SELECT VALUE FROM TBPMO_DOC_VALUES WHERE CONFIG_ID = " & guid)
Dim col As GridColumn = gridView.Columns(columnTitle)
gridView.GridControl.RepositoryItems.Add(textedit)
'Editor zuweisen
If Not IsNothing(col) Then
col.ColumnEdit = textedit
col.OptionsColumn.AllowEdit = True
End If
' Handler zuweisen
AddHandler textedit.Leave, _textValueChangedHandler
End If
If typeID = 2 And isVisible And isEditable Then
Dim checkEdit As New RepositoryItemCheckEdit()
checkEdit.ValueChecked = True
checkEdit.ValueUnchecked = False
Dim value As String = ClassDatabase.Execute_Scalar("SELECT VALUE FROM TBPMO_DOC_VALUES WHERE CONFIG_ID = " & guid)
Dim col As GridColumn = gridView.Columns(columnTitle)
gridView.GridControl.RepositoryItems.Add(checkEdit)
If Not IsNothing(col) Then
col.OptionsColumn.AllowEdit = True
col.ColumnEdit = checkEdit
End If
End If
If typeID = 3 And isVisible And isEditable Then
Dim dateedit As New RepositoryItemDateEdit()
Dim value As String = ClassDatabase.Execute_Scalar("SELECT VALUE FROM TBPMO_DOC_VALUES WHERE CONFIG_ID = " & guid)
Dim col As GridColumn = gridView.Columns(columnTitle)
gridView.GridControl.RepositoryItems.Add(dateedit)
If Not IsNothing(col) Then
col.ColumnEdit = dateedit
col.OptionsColumn.AllowEdit = True
col.DisplayFormat.FormatType = FormatType.DateTime
col.DisplayFormat.FormatString = CURRENT_DATE_FORMAT & " HH:MM:ss"
End If
AddHandler dateedit.EditValueChanged, _datepickerValueChangedHandler
End If
If typeID = 4 And isVisible And isEditable Then
Dim dropdown As New RepositoryItemComboBox()
' Dropdown Items finden
Dim matchingRows() As DataRow = DT_DOCRESULT_DROPDOWN_ITEMS.Select(String.Format("CONFIG_ID = {0}", guid), "SEQUENCE")
' Dropdown füllen
For Each matchingRow As DataRow In matchingRows
Dim item As New WindreamDocGridComboboxItem()
item.ConfigID = matchingRow.Item("CONFIG_ID")
item.Value = matchingRow.Item("VALUE")
dropdown.Items.Add(item)
Next
' Dropdown als Editor hinzufügen
gridView.GridControl.RepositoryItems.Add(dropdown)
Dim col As GridColumn = gridView.Columns(columnTitle)
'Editor zuweisen
If Not IsNothing(col) Then
col.ColumnEdit = dropdown
End If
' Handler zuweisen
AddHandler dropdown.SelectedValueChanged, _dropdownValueChangedHandler
End If
Next
End Sub
Public Class WindreamDocGridComboboxItem

View File

@ -89,6 +89,14 @@ Public Class frmRecordView
'Perform your actions
End Sub
Private Sub OnDateSelectedValueChanged(sender As Object, e As EventArgs)
End Sub
Private Sub OnTextSelectedValueChanged(sender As Object, e As EventArgs)
End Sub
Private Sub RUN_WDSEARCH_GRID()
Me.Cursor = Cursors.WaitCursor
Try
@ -111,12 +119,14 @@ Public Class frmRecordView
tslblWindreamView.Text = msg
If DT_RESULT.Rows.Count > 0 Then
ClassWindreamDocGrid.FormatColumns(
ClassWindreamDocGrid.FillColumns(
GridViewDoc_Search,
DT_RESULT,
DT_WINDREAM_RESULTLIST,
DT_DOCRESULT_DROPDOWN_ITEMS,
AddressOf OnCBSelectedValueChanged)
AddressOf OnCBSelectedValueChanged,
AddressOf OnDateSelectedValueChanged,
AddressOf OnTextSelectedValueChanged)
End If
Else
Dim msg = "Keine Windream-Dokumente für Record: " & JUMP_RECORD_ID & " gefunden"