Imports DevExpress.Utils Imports DevExpress.XtraGrid Imports DevExpress.XtraGrid.Columns Imports DevExpress.XtraGrid.Views.Grid Imports DevExpress.XtraEditors Imports DevExpress.XtraEditors.Repository Imports DevExpress.XtraGrid.Views.Base Imports DevExpress.XtraEditors.Controls Public Class ClassDocGrid ' === BEGIN CLASS PART === Public Class clsWMDoc Public Property DocId As Integer Public Property ParentID As Integer Public Property DocPath As String Public Property Filename As String Public Property DisplayName As String Public Property DocType As String Public Property InWork As Boolean Public Property InWorkUser As String End Class Private ReadOnly GridView As GridView Public ReadOnly Property SelectedDocuments As List(Of clsWMDoc) Get Return GetSelectedDocuments(GridView) End Get End Property Public ReadOnly Property HasSelectedDocuments As Boolean Get Return HasNoSelectedDocuments(GridView) End Get End Property Public Sub New(pGridView As GridView) GridView = pGridView End Sub ' === END CLASS PART === Private Shared _Helper As ClassHelper 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 SELECTED_DOC_RIGHT As Integer 'Public Shared RESULT_DISPLAYNAME As String Public Shared RESULT_CONFIG_IDS As Hashtable Private Shared ReadOnly DATE_COLUMNS As New List(Of String) Private Shared ReadOnly DATE_COLUMNS_CONFIG As New List(Of String) ' This should replace DT_RESULTFILES and also ' SELECTED_INWORK, SELECTED_DOC_ID, SELECTED_DOC_RIGHT, SELECTED_DOC_PATH Public Shared SELECTED_DOCUMENTS As New List(Of clsWMDoc) Public Shared DT_RESULTFILES As DataTable Private Shared DT_DROPDOWN_ITEMS As DataTable Private Shared _dropdownValueChangedHandler As EventHandler Private Shared _datepickerValueChangedHandler As EventHandler Private Shared _textValueChangedHandler As EventHandler Private Shared _checkValueChangedHandler As EventHandler Private Shared Function Init_Table() Try Dim table As New DataTable With { .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)) table.Columns.Add("ACCESS_RIGHT", GetType(Integer)) DT_RESULTFILES = table Return True Catch ex As Exception LOGGER.Warn("Unexpected Error in Initting TableResult Docs: " & ex.Message) DT_RESULTFILES = Nothing Return False End Try End Function Public Shared Function HasNoSelectedDocuments(pGridView As GridView) As Boolean Dim oSelectedRows As List(Of Integer) = pGridView.GetSelectedRows().ToList() Return oSelectedRows.Count = 0 End Function Public Shared Function GetSingleSelectedDocument(pGridView As GridView) As List(Of clsWMDoc) If pGridView.RowCount = 0 Then Return Nothing End If Dim oDocuments As New List(Of clsWMDoc) Dim oDocId = pGridView.GetRowCellValue(pGridView.FocusedRowHandle, "DocID") Dim oSQL = $"Select dwParentID FROM TBPMO_DOCRESULT_LIST where DocID = {oDocId}" Dim odwParentID = MYDB_ECM.GetScalarValue(oSQL) Dim oDisplayName = pGridView.GetRowCellValue(pGridView.FocusedRowHandle, "Displayname") Dim oDocPath = pGridView.GetRowCellValue(pGridView.FocusedRowHandle, "FULLPATH") Dim oObjecttype = pGridView.GetRowCellValue(pGridView.FocusedRowHandle, "OBJECTTYPE") Dim oFilename = pGridView.GetRowCellValue(pGridView.FocusedRowHandle, "Dateiname") Dim oInWork = pGridView.GetRowCellValue(pGridView.FocusedRowHandle, "in work?") Dim oInWorkUser = pGridView.GetRowCellValue(pGridView.FocusedRowHandle, "in work User") oDocuments.Add(New clsWMDoc With { .DocId = oDocId, .ParentID = odwParentID, .DocPath = oDocPath, .DocType = oObjecttype, .DisplayName = oDisplayName, .Filename = oFilename, .InWork = oInWork, .InWorkUser = oInWorkUser }) Return oDocuments End Function Public Shared Function GetSelectedDocuments(pGridView As GridView, Optional pGetFirst As Boolean = False) As List(Of clsWMDoc) Dim oSelectedRows As List(Of Integer) If pGridView.RowCount = 0 Then Return Nothing End If If pGetFirst = True Then pGridView.FocusedRowHandle = 0 oSelectedRows = New List(Of Integer) From {0} Else oSelectedRows = pGridView.GetSelectedRows().ToList() End If Dim oDocuments As New List(Of clsWMDoc) For Each oRowHandle In oSelectedRows Dim oDocId = pGridView.GetRowCellValue(oRowHandle, "DocID") Dim oSQL = $"Select dwParentID FROM TBPMO_DOCRESULT_LIST where DocID = {oDocId}" Dim odwParentID = MYDB_ECM.GetScalarValue(oSQL) Dim oDisplayName = pGridView.GetRowCellValue(oRowHandle, "Displayname") Dim oDocPath = pGridView.GetRowCellValue(oRowHandle, "FULLPATH") Dim oObjecttype = pGridView.GetRowCellValue(oRowHandle, "OBJECTTYPE") Dim oFilename = pGridView.GetRowCellValue(oRowHandle, "Dateiname") Dim oInWork = pGridView.GetRowCellValue(oRowHandle, "in work?") Dim oInWorkUser = pGridView.GetRowCellValue(oRowHandle, "in work User") oDocuments.Add(New clsWMDoc With { .DocId = oDocId, .ParentID = odwParentID, .DocPath = oDocPath, .DocType = oObjecttype, .DisplayName = oDisplayName, .Filename = oFilename, .InWork = oInWork, .InWorkUser = oInWorkUser }) Next Return oDocuments End Function Public Shared Sub GetDocItems(gridView As GridView) _Helper = New ClassHelper If Init_Table() = True Then Console.WriteLine("gridView.SelectedRowsCount: " & gridView.SelectedRowsCount.ToString) gridView.EndSelection() If gridView.SelectedRowsCount >= 1 Then DT_RESULTFILES.Clear() For Each row In gridView.GetSelectedRows Dim newRow As DataRow = DT_RESULTFILES.NewRow() Dim oDocID = gridView.GetRowCellValue(row, "DocID") If IsNothing(oDocID) Then Exit Sub End If Dim CHeckDT As DataTable = ClassHelper.FILTER_DATATABLE(CURRENT_DT_TBPMO_DOC_RECORD_LINK, "DOC_ID = " + oDocID.ToString, "") Try newRow("INWORK") = False SELECTED_INWORK = False Dim oSQL = "Select IN_WORK,IN_WORK_USER FROM TBPMO_DOCRESULT_LIST where DocID = " + oDocID Dim oDT As DataTable = MYDB_ECM.GetDatatable(oSQL) If Not IsNothing(oDT) Then If oDT.Rows.Count = 1 Then newRow("INWORK") = CBool(oDT.Rows(0).Item("IN_WORK")) SELECTED_INWORK = CBool(oDT.Rows(0).Item("IN_WORK")) End If End If Catch ex As Exception newRow("INWORK") = False SELECTED_INWORK = False End Try Try SELECTED_DOC_RIGHT = gridView.GetRowCellValue(row, "ACCESS_RIGHT") newRow("ACCESS_RIGHT") = gridView.GetRowCellValue(row, SELECTED_DOC_RIGHT) Catch ex As Exception newRow("ACCESS_RIGHT") = 1 End Try Try SELECTED_DOC_PATH = _Helper.FORMAT_WM_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 Dim dpn = gridView.GetRowCellValue(row, "Displayname") If IsDBNull(dpn) Or IsNothing(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 SELECTED_DOC_ID = 0 End Try Try SELECTED_DOC_PATH = gridView.GetFocusedRowCellValue(gridView.Columns("FULLPATH")) If IsNothing(SELECTED_DOC_PATH) Then SELECTED_DOC_PATH = gridView.GetFocusedRowCellValue(gridView.Columns("FULL_FILENAME")) newRow("DOC_PATH") = gridView.GetFocusedRowCellValue(gridView.Columns("FULL_FILENAME")) Else newRow("DOC_PATH") = gridView.GetFocusedRowCellValue(gridView.Columns("FULLPATH")) End If Catch ex As Exception Try Catch ex1 As Exception newRow("DOC_PATH") = "" End Try End Try Try newRow("OBJECTTYPE") = gridView.GetFocusedRowCellValue(gridView.Columns("OBJECTTYPE")) Catch ex As Exception newRow("OBJECTTYPE") = "" End Try Try Dim dpn = gridView.GetFocusedRowCellValue(gridView.Columns("Displayname")) If IsDBNull(dpn) Or IsNothing(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 End Sub Public Shared Sub FillColumns(pDocGridView 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, CheckValueChangedHandler As EventHandler, SearchType As String, RECORD_ID As Integer) ' Handler speichern _dropdownValueChangedHandler = DropdownValueChangedHandler _datepickerValueChangedHandler = DatepickerValueChangedHandler _textValueChangedHandler = TextValueChangedHandler _checkValueChangedHandler = CheckValueChangedHandler 'Dropdown Tabelle speichern DT_DROPDOWN_ITEMS = DT_DOCRESULT_DROPDOWN_ITEMS ' Tabelle vor dem verändern klonen Dim clonedTable As DataTable = DT_RESULT.Clone() RESULT_CONFIG_IDS = New Hashtable() For Each row As DataRow In DT_WINDREAM_RESULTLIST.Rows Dim isConfig As Boolean = row.Item("CONFIG_COLUMNS") Dim guid As Integer = row.Item("GUID") Dim columnTitle As String = row.Item("HEADER_CAPTION") Dim type As Integer = row.Item("TYPE_ID") If type = 3 And isConfig = False Then DATE_COLUMNS.Add(columnTitle) ElseIf type = 3 And isConfig = True Then DATE_COLUMNS_CONFIG.Add(columnTitle) End If If isConfig = True Then RESULT_CONFIG_IDS.Add(columnTitle, guid) End If Next ' Tabelle zurückspielen und zuweisen Try clonedTable.Load(DT_RESULT.CreateDataReader()) DT_RESULT = clonedTable ' Neues Dataset für Master- und Detail-Tabelle erstellen Dim ds As New DataSet() Dim DT_DETAILS_SQL Select Case CURRENT_SEARCH_TYPE Case "NODE_DOWN" DT_DETAILS_SQL = String.Format("SELECT T.[GUID],T.[DocID],T.[CONFIG_ID],T1.HEADER_CAPTION,T.[VALUE],T1.[LANGUAGE], T1.COLUMN_VIEW,T1.EDITABLE,T1.TYPE_ID,T1.VISIBLE,T.CHANGED_WHEN,T.CHANGED_WHO " & "FROM TBPMO_DOC_VALUES T INNER JOIN TBPMO_STRUCTURE_NODES_USER_TEMP TTEMP ON T.RECORD_ID = TTEMP.RECORD_ID RIGHT JOIN TBPMO_DOCSEARCH_RESULTLIST_CONFIG T1 ON T.CONFIG_ID = T1.GUID WHERE T1.ENTITY_ID = {0} AND LANGUAGE = '{1}' AND T1.CONFIG_COLUMNS = 1", CURRENT_ENTITY_ID, USER_LANGUAGE) Case Else DT_DETAILS_SQL = String.Format("SELECT T.[GUID],T.[DocID],T.[CONFIG_ID],T1.HEADER_CAPTION,T.[VALUE],T1.[LANGUAGE], T1.COLUMN_VIEW,T1.EDITABLE,T1.TYPE_ID,T1.VISIBLE,T.CHANGED_WHEN,T.CHANGED_WHO " & "FROM TBPMO_DOC_VALUES T RIGHT JOIN TBPMO_DOCSEARCH_RESULTLIST_CONFIG T1 ON T.CONFIG_ID = T1.GUID WHERE T1.ENTITY_ID = {0} AND LANGUAGE = '{1}' AND T1.CONFIG_COLUMNS = 1 AND T.RECORD_ID = {2}", CURRENT_ENTITY_ID, USER_LANGUAGE, RECORD_ID) End Select '"FROM TBPMO_DOC_VALUES T INNER JOIN TBPMO_DOCSEARCH_RESULTLIST_CONFIG T1 ON T.CONFIG_ID = T1.GUID WHERE T1.ENTITY_ID = {0} AND T1.LANGUAGE = '{1}' AND T.RECORD_ID = {2} ORDER BY T.DocID, T1.SEQUENCE", CURRENT_ENTITY_ID, USER_LANGUAGE, RECORD_ID) Dim DT_DETAIL_VALUES As DataTable = MYDB_ECM.GetDatatable(DT_DETAILS_SQL) Dim oDocID As Integer Dim oConfigID As Integer Dim recordId As Integer Try ' Werte für Konfigurierte Spalten aus TBPMO_DOC_VALUES auslesen und Zellenweise einfügen For Each oRow As DataRow In DT_RESULT.Rows For Each col As DataColumn In DT_RESULT.Columns Dim colName As String = col.ColumnName oDocID = oRow.Item("DocID") oConfigID = RESULT_CONFIG_IDS.Item(col.ColumnName) If oConfigID <> 0 Then Dim value As String = "" Try Dim oFilter = $"DocID = {oDocID} AND CONFIG_ID = {oConfigID}" Dim oFlteredRows() As DataRow = DT_DETAIL_VALUES.Select(oFilter) If oFlteredRows.Length > 0 Then value = oFlteredRows(0)("VALUE").ToString() End If 'value = MYDB_ECM.GetScalarValue(String.Format("SELECT VALUE FROM TBPMO_DOC_VALUES WHERE CONFIG_ID = {0} AND DocID = {1} AND RECORD_ID = {2}", oConfigID, oDocID, RECORD_ID)) Catch ex As Exception LOGGER.Warn(String.Format("Attention: Could not get Value from TBPMO_DOC_VALUES for ConfigId[{0}], DocId[{1}]: ", oConfigID, oDocID) & ex.Message) End Try oRow.Item(colName) = value End If Next Next Catch ex As Exception LOGGER.Warn($"Attention: Could not load values from TBPMO_DOC_VALUES: " & ex.Message & vbNewLine & $"SELECT VALUE FROM TBPMO_DOC_VALUES WHERE CONFIG_ID = {oConfigID} AND DocID = {oDocID} AND RECORD_ID = {RECORD_ID}") End Try LOGGER.Debug("Values loaded...") Try ' Tabellen zum DataSet hinzufügen ds.Tables.Add(DT_RESULT) ds.Tables.Add(DT_DETAIL_VALUES) LOGGER.Debug("tables added to ds.Tables...") Catch ex As Exception LOGGER.Warn("Attention: Could not Add tables to ds.Tables: " & ex.Message) End Try Try Dim resultTable As DataTable = ds.Tables(0) Dim detailsTable As DataTable = ds.Tables(1) ' Relation `docIdDetails` erstellen Dim parentColumn As DataColumn = resultTable.Columns("docId") Dim childColumn As DataColumn = detailsTable.Columns("docId") LOGGER.Debug("tables added to ds.Tables...") LOGGER.Debug($"parentColumn.DataType: {parentColumn.DataType.ToString()}") LOGGER.Debug($"childColumn.DataType: {childColumn.DataType.ToString()}") ' Unique Constraint für DT_RESULT auf Spalte `docId` erstellen Dim uniqueConstraint As UniqueConstraint = New UniqueConstraint(parentColumn) resultTable.Constraints.Add(uniqueConstraint) ' Parameter `createConstraints` auf false setzen, um erstellung eines unsinnigen ' `foreignKeyConstraints` zu verhindern ds.Relations.Add("docIdDetails", parentColumn, childColumn, False) LOGGER.Debug("relationdocIdDetails created...") Catch ex As Exception LOGGER.Warn("Could not set master-detail Relation DocSearch: " & ex.Message) End Try Dim gridControl As GridControl = pDocGridView.GridControl ' Datasource auf Master-Tabelle setzen 'gridView.GridControl.DataSource = DT_RESULT gridControl.DataSource = ds.Tables(0) gridControl.ForceInitialize() ' Detail View anlegen und der Relation `docIdDetails` zuweisen Dim GVDoc_Values As New GridView(gridControl) 'grvwDetail.OptionsBehavior.Editable = False GVDoc_Values.OptionsView.ShowGroupPanel = False GVDoc_Values.BorderStyle = DevExpress.XtraEditors.Controls.BorderStyles.Style3D GVDoc_Values.OptionsView.EnableAppearanceEvenRow = True GVDoc_Values.Appearance.EvenRow.BackColor = Color.Orange GVDoc_Values.Appearance.HeaderPanel.BackColor = Color.Orange GVDoc_Values.Appearance.HeaderPanel.Options.UseBackColor = True gridControl.LevelTree.Nodes.Add("docIdDetails", GVDoc_Values) Catch ex As Exception MsgBox("Error in FillColumns: " & vbNewLine & ex.Message, MsgBoxStyle.Critical) LOGGER.Warn("Attention: Could not load converted datatable DocSearch: " & ex.Message) End Try AddHandler pDocGridView.MasterRowExpanded, AddressOf gridView_MasterRowExpanded AddHandler pDocGridView.CustomColumnDisplayText, AddressOf gridView_CustomColumnDisplayText AddHandler pDocGridView.FocusedRowChanged, AddressOf GVDoc_Values_FocusedRowChanged For Each row As DataRow In DT_WINDREAM_RESULTLIST.Rows Dim col As GridColumn = pDocGridView.Columns(row.Item("HEADER_CAPTION")) Dim colCaption = row.Item("HEADER_CAPTION") Dim type As Integer = row.Item("TYPE_ID") Dim isConfig As Boolean = row.Item("CONFIG_COLUMNS") If Not IsNothing(col) And type = 3 And isConfig Then LOGGER.Debug($"Adapting DisplayFormat (DATETIME for Column {colCaption}") col.DisplayFormat.FormatType = FormatType.DateTime col.DisplayFormat.FormatString = CURRENT_DATE_FORMAT & " HH:MM:ss" End If Next pDocGridView.Columns.Item("ICON").MaxWidth = 24 pDocGridView.Columns.Item("ICON").MinWidth = 24 pDocGridView.Columns.Item("FULLPATH").Visible = False pDocGridView.Columns.Item("OBJECTTYPE").Visible = False If Not System.IO.File.Exists(LAYOUT_DOC_GRIDVIEW) Then pDocGridView.Columns.Item("DocID").Visible = False End If Dim oCreatedFieldName, oChangedFieldName As String If USER_LANGUAGE <> "de-DE" Then oChangedFieldName = "Changed" oCreatedFieldName = "Created" Else oChangedFieldName = "Geändert" oCreatedFieldName = "Erstellt" End If Dim oCreatedColumn = pDocGridView.Columns(oCreatedFieldName) If Not IsNothing(oCreatedColumn) Then oCreatedColumn.DisplayFormat.FormatType = FormatType.DateTime oCreatedColumn.DisplayFormat.FormatString = CURRENT_DATE_FORMAT & " HH:MM:ss" End If Dim oChangedColumn = pDocGridView.Columns(oChangedFieldName) If Not IsNothing(oChangedColumn) Then oChangedColumn.DisplayFormat.FormatType = FormatType.DateTime oChangedColumn.DisplayFormat.FormatString = CURRENT_DATE_FORMAT & " HH:MM:ss" End If If GridDocResult_BestFitColumns Then pDocGridView.OptionsView.BestFitMaxRowCount = -1 pDocGridView.BestFitColumns(True) End If ' Alle Spalten aus ReadOnly setzen, danach werden alle passenden auf nicht ReadOnly gesetzt For Each column As GridColumn In pDocGridView.Columns column.OptionsColumn.AllowEdit = False Next End Sub Public Shared Sub detailView_CustomRowCellEdit(grvw As GridView, e As CustomRowCellEditEventArgs) Try If (e.Column.Name = "colVALUE") Then Dim rowView As DataRowView = grvw.GetRow(e.RowHandle) Dim configId As Integer = rowView.Item("CONFIG_ID") Dim title = rowView.Item("HEADER_CAPTION") Dim editable As Boolean = rowView.Item("EDITABLE") Dim typeId As Integer = rowView.Item("TYPE_ID") If typeId = 1 And editable Then Dim textedit As New RepositoryItemTextEdit() AddHandler textedit.Leave, _textValueChangedHandler e.RepositoryItem = textedit ElseIf typeId = 2 Then Dim checkEdit As New RepositoryItemCheckEdit() checkEdit.ValueChecked = "True" checkEdit.ValueUnchecked = "False" checkEdit.GlyphAlignment = HorzAlignment.Near checkEdit.Caption = String.Empty AddHandler checkEdit.CheckedChanged, _checkValueChangedHandler e.RepositoryItem = checkEdit ElseIf typeId = 3 Then Dim dateedit As New RepositoryItemDateEdit() dateedit.DisplayFormat.FormatType = FormatType.DateTime dateedit.DisplayFormat.FormatString = CURRENT_DATE_FORMAT dateedit.EditFormat.FormatType = FormatType.DateTime dateedit.EditFormat.FormatString = CURRENT_DATE_FORMAT dateedit.EditMask = CURRENT_DATE_FORMAT AddHandler dateedit.FormatEditValue, Sub(sender As Object, _e As ConvertEditValueEventArgs) _e.Handled = True End Sub AddHandler dateedit.CustomDisplayText, Sub(sender As Object, _e As Controls.CustomDisplayTextEventArgs) Dim parsedDate As DateTime Dim stringDate As String = _e.Value.ToString If stringDate.Trim() = String.Empty Then _e.DisplayText = "" Else If Not DateTime.TryParse(stringDate, parsedDate) Then parsedDate = DateTime.ParseExact(stringDate, CURRENT_DATE_FORMAT, Globalization.DateTimeFormatInfo.InvariantInfo) End If _e.DisplayText = parsedDate.ToString(CURRENT_DATE_FORMAT) End If End Sub AddHandler dateedit.EditValueChanged, _datepickerValueChangedHandler e.RepositoryItem = dateedit ElseIf typeId = 10 And editable = True Then Dim dropdown As New RepositoryItemComboBox() Dim matchingRows() As DataRow = DT_DROPDOWN_ITEMS.Select(String.Format("CONFIG_ID = {0}", configId), "SEQUENCE") 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 AddHandler dropdown.SelectedValueChanged, _dropdownValueChangedHandler e.RepositoryItem = dropdown ElseIf typeId = 4 And editable Then Dim textedit As New RepositoryItemTextEdit() AddHandler textedit.Leave, _textValueChangedHandler e.RepositoryItem = textedit End If ElseIf (e.Column.Name <> "colVALUE") Then ' Erlaube Editieren nur für VALUE Spalte e.Column.OptionsColumn.AllowEdit = False End If Catch ex As Exception LOGGER.Warn("Error in detailView_CustomRowCellEdit: " & ex.Message) End Try End Sub Private Shared Sub gridView_CustomColumnDisplayText(sender As Object, e As CustomColumnDisplayTextEventArgs) Try Dim view As ColumnView = sender Dim parsedDate As DateTime If Not IsNothing(DATE_COLUMNS) Then If DATE_COLUMNS.Contains(e.Column.FieldName) And e.ListSourceRowIndex <> DevExpress.XtraGrid.GridControl.InvalidRowHandle Then LOGGER.Debug($"gridView_CustomColumnDisplayText1 [{e.Column.FieldName}] ") If e.Value.ToString() = String.Empty Then e.DisplayText = "" Exit Sub End If If Not DateTime.TryParse(e.Value, parsedDate) Then parsedDate = DateTime.ParseExact(e.Value, CURRENT_DATE_FORMAT & " HH:MM:ss", System.Globalization.DateTimeFormatInfo.InvariantInfo) End If e.DisplayText = parsedDate.ToString(CURRENT_DATE_FORMAT & " HH:MM:ss") End If End If If Not IsNothing(DATE_COLUMNS_CONFIG) Then If DATE_COLUMNS_CONFIG.Contains(e.Column.FieldName) And e.ListSourceRowIndex <> DevExpress.XtraGrid.GridControl.InvalidRowHandle Then If e.Value.ToString() = String.Empty Then e.DisplayText = "" Exit Sub End If LOGGER.Debug($"gridView_CustomColumnDisplayText2 [{e.Column.FieldName}] ") If Not DateTime.TryParse(e.Value, parsedDate) Then parsedDate = DateTime.ParseExact(e.Value, CURRENT_DATE_FORMAT, System.Globalization.DateTimeFormatInfo.InvariantInfo) End If e.DisplayText = parsedDate.ToString(CURRENT_DATE_FORMAT) End If End If Catch ex As Exception LOGGER.Warn("Unexpected error in gridView_CustomColumnDisplayText: " & ex.Message) End Try End Sub Public Shared Sub GVDoc_Values_FocusedRowChanged(sender As GridView, e As DevExpress.XtraGrid.Views.Base.FocusedRowChangedEventArgs) Try ClassDocGrid.GetDocItems(sender) Catch ex As Exception LOGGER.Warn("Unexpected error in GVDoc_Values_FocusedRowChanged: " & ex.Message) MsgBox("Unexpected error in GVDoc_Values_FocusedRowChanged: " & ex.Message, MsgBoxStyle.Critical) End Try End Sub Public Shared Sub gridView_MasterRowExpanded(sender As GridView, e As DevExpress.XtraGrid.Views.Grid.CustomMasterRowEventArgs) Try ClassDocGrid.GetDocItems(sender) Dim GW As GridView = sender If SELECTED_DOC_ID = 0 Then MsgBox("Sorry no document was selected! Please try again!", MsgBoxStyle.Exclamation) Exit Sub End If Dim detailView As GridView = sender.GetDetailView(e.RowHandle, e.RelationIndex) With detailView.Columns 'Spalten ausblenden .Item("GUID").Visible = False .Item("DocID").Visible = False .Item("CONFIG_ID").Visible = False .Item("LANGUAGE").Visible = False .Item("COLUMN_VIEW").Visible = False .Item("EDITABLE").Visible = False .Item("TYPE_ID").Visible = False .Item("VISIBLE").Visible = False 'Spalten formatieren .Item("CHANGED_WHEN").DisplayFormat.FormatType = FormatType.DateTime .Item("CHANGED_WHEN").DisplayFormat.FormatString = CURRENT_DATE_FORMAT & " HH:MM:ss" If USER_LANGUAGE = "de-DE" Then .Item("HEADER_CAPTION").Caption = "Beschreibung" .Item("VALUE").Caption = "Wert" .Item("CHANGED_WHEN").Caption = "Geändert Wann" .Item("CHANGED_WHO").Caption = "Geändert Wer" Else .Item("HEADER_CAPTION").Caption = "Description" .Item("VALUE").Caption = "Value" .Item("CHANGED_WHEN").Caption = "Changed when" .Item("CHANGED_WHO").Caption = "changed Who" End If End With If Not IsNothing(GW.GridControl.ContextMenuStrip.Name) Then If GW.GridControl.ContextMenuStrip.Name = "cmsResultFilesBasic" Then detailView.OptionsBehavior.Editable = False Else detailView.OptionsBehavior.Editable = True End If End If AddHandler detailView.CustomRowCellEdit, AddressOf detailView_CustomRowCellEdit Catch ex As Exception LOGGER.Warn("Unexpected error in gridView_MasterRowExpanded: " & ex.Message) MsgBox("Unexpected error in gridView_MasterRowExpanded: " & ex.Message, MsgBoxStyle.Critical) End Try 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