Imports DevExpress.Utils Imports DevExpress.XtraGrid Imports DevExpress.XtraGrid.Columns Imports DevExpress.XtraGrid.Views.Grid Imports DevExpress.XtraEditors Imports DevExpress.XtraEditors.Repository Public Class ClassWindreamDocGrid Public Shared SELECTED_DOC_PATH As String 'Public Shared RESULT_OBJECTTYPE As String Public Shared SELECTED_INWORK As Boolean Public Shared SELECTED_DOC_ID As Integer 'Public Shared RESULT_DISPLAYNAME As String Public Shared RESULT_CONFIG_IDS As Hashtable Public Shared DT_RESULTFILES As DataTable Private Shared _dropdownValueChangedHandler As EventHandler Private Shared _datepickerValueChangedHandler As EventHandler Private Shared _textValueChangedHandler As EventHandler Private Shared Function Init_Table() Try Dim table As New DataTable table.TableName = "TBSELECTED_FILES" ' Create two columns, ID and Name. table.Columns.Add("DOC_ID", GetType(Integer)) table.Columns.Add("DOC_PATH", GetType(System.String)) table.Columns.Add("OBJECTTYPE", GetType(System.String)) table.Columns.Add("INWORK", GetType(System.Boolean)) table.Columns.Add("DISPLAYNAME", GetType(System.String)) DT_RESULTFILES = table Return True Catch ex As Exception ClassLogger.Add("Unexpected Error in Initting TableResult Docs: " & ex.Message, True) DT_RESULTFILES = Nothing Return False End Try End Function Public Shared Sub GetDocItems(gridView As GridView) If Init_Table() = True Then If gridView.SelectedRowsCount > 0 Then DT_RESULTFILES.Clear() For Each row In gridView.GetSelectedRows Dim newRow As DataRow = DT_RESULTFILES.NewRow() Try Dim DOC_ID = gridView.GetRowCellValue(row, "DocID") SELECTED_DOC_ID = DOC_ID newRow("DOC_ID") = gridView.GetRowCellValue(row, "DocID") Catch ex As Exception newRow("DOC_ID") = 0 End Try Try SELECTED_DOC_PATH = gridView.GetRowCellValue(row, "FULLPATH") newRow("DOC_PATH") = gridView.GetRowCellValue(row, "FULLPATH") Catch ex As Exception newRow("DOC_PATH") = "" End Try Try newRow("OBJECTTYPE") = gridView.GetRowCellValue(row, "OBJECTTYPE") Catch ex As Exception newRow("OBJECTTYPE") = "" End Try Try newRow("INWORK") = gridView.GetRowCellValue(row, "in work?") Catch ex As Exception newRow("INWORK") = False End Try Try Dim dpn = gridView.GetRowCellValue(row, "Displayname") If IsDBNull(dpn) Then dpn = "" End If newRow("DISPLAYNAME") = dpn Catch ex As Exception newRow("DISPLAYNAME") = "" End Try DT_RESULTFILES.Rows.Add(newRow) DT_RESULTFILES.AcceptChanges() Next Else Dim newRow As DataRow = DT_RESULTFILES.NewRow() Try Dim DOC_ID = gridView.GetFocusedRowCellValue(gridView.Columns("DocID")) SELECTED_DOC_ID = DOC_ID newRow("DOC_ID") = gridView.GetFocusedRowCellValue(gridView.Columns("DocID")) Catch ex As Exception newRow("DOC_ID") = 0 End Try Try SELECTED_DOC_PATH = gridView.GetFocusedRowCellValue(gridView.Columns("FULLPATH")) newRow("DOC_PATH") = gridView.GetFocusedRowCellValue(gridView.Columns("FULLPATH")) Catch ex As Exception newRow("DOC_PATH") = "" End Try Try newRow("OBJECTTYPE") = gridView.GetFocusedRowCellValue(gridView.Columns("OBJECTTYPE")) Catch ex As Exception newRow("OBJECTTYPE") = "" End Try Try newRow("INWORK") = gridView.GetFocusedRowCellValue(gridView.Columns("in work?")) Catch ex As Exception newRow("INWORK") = False End Try Try Dim dpn = gridView.GetFocusedRowCellValue(gridView.Columns("Displayname")) If IsDBNull(dpn) Then dpn = "" End If newRow("DISPLAYNAME") = dpn Catch ex As Exception newRow("DISPLAYNAME") = "" End Try DT_RESULTFILES.Rows.Add(newRow) DT_RESULTFILES.AcceptChanges() End If End If 'If gridView.SelectedRowsCount = 1 Then ' Try ' RESULT_DOC_PATH = gridView.GetFocusedRowCellValue(gridView.Columns("FULLPATH")) ' Catch ex As Exception ' ClassLogger.Add(">> Attention: Could not set DocVariable RESULT_DOC_PATH: " & ex.Message, False) ' RESULT_DOC_PATH = Nothing ' End Try ' Try ' RESULT_OBJECTTYPE = gridView.GetFocusedRowCellValue(gridView.Columns("OBJECTTYPE")) ' Catch ex As Exception ' ClassLogger.Add(">> Attention: Could not set DocVariable RESULT_OBJECTTYPE: " & ex.Message, False) ' RESULT_OBJECTTYPE = "" ' End Try ' Try ' RESULT_INWORK = gridView.GetFocusedRowCellValue(gridView.Columns("in work?")) ' Catch ex As Exception ' ClassLogger.Add(">> Attention: Could not set DocVariable RESULT_INWORK: " & ex.Message, False) ' RESULT_INWORK = "" ' End Try ' Try ' RESULT_DOC_ID = gridView.GetFocusedRowCellValue(gridView.Columns("DocID")) ' Catch ex As Exception ' ClassLogger.Add(">> Attention: Could not set DocVariable RESULT_DOC_ID: " & ex.Message, False) ' RESULT_DOC_ID = Nothing ' End Try ' Try ' RESULT_DISPLAYNAME = gridView.GetFocusedRowCellValue(gridView.Columns("Displayname")) ' Catch ex As Exception ' ClassLogger.Add(">> Attention: Could not set DocVariable RESULT_DISPLAYNAME: " & ex.Message, False) ' RESULT_DISPLAYNAME = "" ' End Try 'Else 'End If End Sub 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 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") 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 Dim datepickerColumn As DataColumn = clonedTable.Columns(columnTitle) If Not IsNothing(datepickerColumn) Then 'datepickerColumn.DataType = GetType(DateTime) End If End If Next ' 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 gridView.Columns.Item("FULLPATH").Visible = False gridView.Columns.Item("OBJECTTYPE").Visible = False gridView.Columns.Item("DocID").Visible = False Dim created, changed As String If USER_LANGUAGE <> "de-DE" Then changed = "Changed" created = "Created" Else changed = "Geändert" created = "Erstellt" End If Dim createdColumn = gridView.Columns(created) If Not IsNothing(createdColumn) Then createdColumn.DisplayFormat.FormatType = FormatType.DateTime createdColumn.DisplayFormat.FormatString = CURRENT_DATE_FORMAT & " HH:MM:ss" End If Dim changedColumn = gridView.Columns(changed) If Not IsNothing(changedColumn) Then changedColumn.DisplayFormat.FormatType = FormatType.DateTime changedColumn.DisplayFormat.FormatString = CURRENT_DATE_FORMAT & " HH:MM:ss" End If ' Alle Spalten aus ReadOnly setzen, danach werden alle passenden auf nicht ReadOnly gesetzt For Each column As GridColumn In gridView.Columns column.OptionsColumn.AllowEdit = False Next 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 Then Dim checkEdit As New RepositoryItemCheckEdit() checkEdit.ValueChecked = True checkEdit.ValueUnchecked = False Dim col As GridColumn = gridView.Columns(columnTitle) gridView.GridControl.RepositoryItems.Add(checkEdit) If Not IsNothing(col) Then col.ColumnEdit = checkEdit If isEditable Then col.OptionsColumn.AllowEdit = True Else col.OptionsColumn.AllowEdit = False End If End If End If If typeID = 3 And isVisible And isEditable Then Dim dateedit As New RepositoryItemDateEdit() 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.OptionsColumn.AllowEdit = True col.ColumnEdit = dropdown End If ' Handler zuweisen AddHandler dropdown.SelectedValueChanged, _dropdownValueChangedHandler End If Next End Sub Public Class WindreamDocGridComboboxItem Implements IConvertible Public ConfigID As Integer Public Value As String Public Overrides Function ToString() As String Return Me.Value End Function Public Function ToString1(provider As IFormatProvider) As String Implements IConvertible.ToString Return Me.Value End Function Public Function GetTypeCode() As TypeCode Implements IConvertible.GetTypeCode Throw New NotImplementedException End Function Public Function ToBoolean(provider As IFormatProvider) As Boolean Implements IConvertible.ToBoolean Throw New NotImplementedException End Function Public Function ToByte(provider As IFormatProvider) As Byte Implements IConvertible.ToByte Throw New NotImplementedException End Function Public Function ToChar(provider As IFormatProvider) As Char Implements IConvertible.ToChar Throw New NotImplementedException End Function Public Function ToDateTime(provider As IFormatProvider) As Date Implements IConvertible.ToDateTime Throw New NotImplementedException End Function Public Function ToDecimal(provider As IFormatProvider) As Decimal Implements IConvertible.ToDecimal Throw New NotImplementedException End Function Public Function ToDouble(provider As IFormatProvider) As Double Implements IConvertible.ToDouble Throw New NotImplementedException End Function Public Function ToInt16(provider As IFormatProvider) As Short Implements IConvertible.ToInt16 Throw New NotImplementedException End Function Public Function ToInt32(provider As IFormatProvider) As Integer Implements IConvertible.ToInt32 Throw New NotImplementedException End Function Public Function ToInt64(provider As IFormatProvider) As Long Implements IConvertible.ToInt64 Throw New NotImplementedException End Function Public Function ToSByte(provider As IFormatProvider) As SByte Implements IConvertible.ToSByte Throw New NotImplementedException End Function Public Function ToSingle(provider As IFormatProvider) As Single Implements IConvertible.ToSingle Throw New NotImplementedException End Function Public Function ToType(conversionType As Type, provider As IFormatProvider) As Object Implements IConvertible.ToType Throw New NotImplementedException End Function Public Function ToUInt16(provider As IFormatProvider) As UShort Implements IConvertible.ToUInt16 Throw New NotImplementedException End Function Public Function ToUInt32(provider As IFormatProvider) As UInteger Implements IConvertible.ToUInt32 Throw New NotImplementedException End Function Public Function ToUInt64(provider As IFormatProvider) As ULong Implements IConvertible.ToUInt64 Throw New NotImplementedException End Function End Class End Class