Imports DevExpress.XtraGrid.Columns Imports DevExpress.XtraGrid.Views.Grid Imports DevExpress.XtraVerticalGrid.Rows Imports ImporterShared.Documents Imports ImporterShared.DocumentRow Imports DevExpress.XtraEditors.Repository Imports ImporterShared.Winline Public Class frmRowEditor Private ReadOnly _Columns As List(Of String) Private ReadOnly _DataTable As New DataTable Private ReadOnly _Accounts As List(Of Account) Private _DocumentRow As ImporterShared.DocumentRow Private DatePicker As New RepositoryItemDateEdit() Private MultilineEditor As New RepositoryItemMemoEdit() Private AccountPicker As New RepositoryItemSearchLookUpEdit Private Const COL_KEY = "KEY" Private Const COL_VALUE_ORIGINAL = "VALUE_ORIGINAL" Private Const COL_VALUE_EXTERNAL = "VALUE_EXTERNAL" Private Const COL_VALUE_FINAL = "VALUE_FINAL" Public ReadOnly Property DocumentRow As ImporterShared.DocumentRow Get Return _DocumentRow End Get End Property Public Sub New(pColumns As List(Of String), pDocumentRow As ImporterShared.DocumentRow, pAccounts As List(Of Account)) ' Dieser Aufruf ist für den Designer erforderlich. InitializeComponent() ' Fügen Sie Initialisierungen nach dem InitializeComponent()-Aufruf hinzu. _Columns = pColumns _Accounts = pAccounts _DocumentRow = pDocumentRow AccountPicker.DataSource = _Accounts AccountPicker.DisplayMember = "Name" AccountPicker.ValueMember = "Id" End Sub Private Sub frmRowEditor_Load(sender As Object, e As EventArgs) Handles Me.Load Dim oDict = New Dictionary(Of String, FieldValue) For Each oColumn As String In _Columns Dim oField = _DocumentRow.Fields. Where(Function(f) f.Key = oColumn). SingleOrDefault() If oField.Value Is Nothing Then oDict.Add(oColumn, New FieldValue()) Else oDict.Add(oColumn, oField.Value) End If Next _DataTable.Columns.Clear() _DataTable.Columns.Add(COL_KEY) _DataTable.Columns.Add(COL_VALUE_ORIGINAL) _DataTable.Columns.Add(COL_VALUE_EXTERNAL) _DataTable.Columns.Add(COL_VALUE_FINAL) For Each oKV In oDict _DataTable.Rows.Add(oKV.Key, oKV.Value.Original, oKV.Value.External, oKV.Value.Final) Next GridControl1.DataSource = _DataTable End Sub Private Sub btnSave_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles btnSave.ItemClick GridView1.CloseEditor() For Each oRow As DataRow In _DataTable.Rows Dim oField = _DocumentRow.Fields. Where(Function(f) f.Key = oRow.Item(COL_KEY)). SingleOrDefault() If oField.Key Is Nothing Then oField = New KeyValuePair(Of String, FieldValue)(oRow.Item(COL_KEY), New FieldValue()) End If Dim oFieldValue = oField.Value oFieldValue.Final = oRow.Item(COL_VALUE_FINAL) If _DocumentRow.Fields.ContainsKey(oField.Key) Then _DocumentRow.Fields.Item(oField.Key) = oFieldValue Else _DocumentRow.Fields.Add(oField.Key, oFieldValue) End If Next DialogResult = DialogResult.OK Close() End Sub Private Sub btnApplyFromWinline_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles btnApplyFromWinline.ItemClick Dim oSelectedRow As DataRow = GridView1.GetDataRow(GridView1.FocusedRowHandle) If oSelectedRow Is Nothing Then Exit Sub End If oSelectedRow.Item(COL_VALUE_FINAL) = oSelectedRow.Item(COL_VALUE_EXTERNAL) oSelectedRow.AcceptChanges() End Sub Private Sub btnApplyFromOriginal_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles btnApplyFromOriginal.ItemClick Dim oSelectedRow As DataRow = GridView1.GetDataRow(GridView1.FocusedRowHandle) If oSelectedRow Is Nothing Then Exit Sub End If oSelectedRow.Item(COL_VALUE_FINAL) = oSelectedRow.Item(COL_VALUE_ORIGINAL) oSelectedRow.AcceptChanges() End Sub Private Sub GridView1_CustomRowCellEdit(sender As Object, e As CustomRowCellEditEventArgs) Handles GridView1.CustomRowCellEdit Dim oDataRow As DataRow = GridView1.GetDataRow(e.RowHandle) If e.Column.FieldName = COL_VALUE_ORIGINAL Or e.Column.FieldName = COL_VALUE_FINAL Then If oDataRow.Item(COL_KEY) = "Datum_Auftrag-Bestellung" Then e.RepositoryItem = DatePicker ElseIf e.CellValue.ToString.Length > 100 Then e.RepositoryItem = MultilineEditor ElseIf oDataRow.Item(COL_KEY) = "Fakt_Kontonummer" Or oDataRow.Item(COL_KEY) = "Lief_Kontonummer" Then e.RepositoryItem = AccountPicker End If End If End Sub End Class