jj: Work in Progress: Vector Fields / Lookup Field

This commit is contained in:
Jonathan Jenne 2018-08-07 16:14:14 +02:00
parent c5e59b617e
commit d352487f29
3 changed files with 128 additions and 15 deletions

View File

@ -525,9 +525,13 @@ Public Class frmIndex
table.Columns.RemoveAt(columnCount)
End While
Const LOOKUP_NO_RECORDS As String = "Keine Datensätze ausgewählt"
Const LOOKUP_N_RECORDS As String = "{0} Datensätze ausgewählt"
Const LOOKUP_CONTROL_HEIGHT As Integer = 24
Dim lookupButton As New Button()
lookupButton.Location = New Point(311, y - 1)
lookupButton.Size = New Size(27, 27)
lookupButton.Size = New Size(LOOKUP_CONTROL_HEIGHT, LOOKUP_CONTROL_HEIGHT)
lookupButton.Image = My.Resources.gear_32xSM
pnlIndex.Controls.Add(lookupButton)
@ -536,16 +540,18 @@ Public Class frmIndex
Dim listbox As New ListBox()
Dim gridLookup As New DevExpress.XtraEditors.GridLookUpEdit()
gridLookup.Name = "cmbMulti" & indexname
gridLookup.Font = New Font(gridLookup.Font.FontFamily, 10)
gridLookup.Location = New Point(11, y)
gridLookup.Size = New Size(300, 30)
gridLookup.Size = New Size(300, LOOKUP_CONTROL_HEIGHT)
' TODO: Hier noch die Vorbelegung für Vektor Indexe einfügen
gridLookup.Properties.DataSource = Nothing
gridLookup.Properties.PopupFormSize = New Size(gridLookup.Properties.PopupFormSize.Width, 100)
gridLookup.Properties.NullText = $"Keine Datensätze ausgewählt"
gridLookup.Properties.NullText = LOOKUP_NO_RECORDS
' Da das gridLookup ein Readonly Control sein soll,
' aber sich trotzdem öffnen lassen soll, müssen wir so das setzen eines neuen Werts verhindern
' sich aber trotzdem öffnen lassen soll, müssen wir so das setzen eines neuen Werts verhindern
AddHandler gridLookup.EditValueChanging, Sub(sender As Object, e As ChangingEventArgs)
e.Cancel = True
End Sub
@ -569,7 +575,7 @@ Public Class frmIndex
If result = DialogResult.OK Then
Dim values As List(Of Object) = frm.SelectedValues
gridLookup.Properties.DataSource = values
gridLookup.Properties.NullText = IIf(values.Count = 0, "Keine Datensätze ausgewählt", $"{values.Count} Datensätze ausgewählt")
gridLookup.Properties.NullText = IIf(values.Count = 0, LOOKUP_NO_RECORDS, String.Format(LOOKUP_N_RECORDS, values.Count))
End If
End Sub
@ -577,8 +583,10 @@ Public Class frmIndex
Else
Dim textBox As New TextBox()
textBox.Name = "cmbSingle" & indexname
textBox.Font = New Font(textBox.Font.FontFamily, 9)
textBox.Location = New Point(11, y)
textBox.Size = New Size(300, 27)
textBox.Size = New Size(300, LOOKUP_CONTROL_HEIGHT)
AddHandler lookupButton.Click, Sub()
Dim frm As New frmLookupGrid()
@ -907,7 +915,43 @@ Public Class frmIndex
End If
End If
End If
If ctrl.Name.StartsWith("cmb") Then
If ctrl.Name.StartsWith("cmbMulti") Then
Dim cmbMulti As DevExpress.XtraEditors.LookUpEdit = ctrl
If cmbMulti.Text = "" Then
Dim optional_index As Boolean = ClassDatabase.Execute_Scalar("SELECT OPTIONAL FROM TBDD_INDEX_MAN WHERE DOK_ID = " & dokartid & " AND NAME = '" & Replace(cmbMulti.Name, "cmbMulti", "") & "'", MyConnectionString, True)
If optional_index = False Then
MsgBox("Bitte wählen Sie einen Wert aus der Combobox.", MsgBoxStyle.Exclamation)
cmbMulti.Focus()
Return False
Else
Indexwert_Postprocessing(Replace(cmbMulti.Name, "cmbMulti", ""), "")
result = True
End If
Else
Indexwert_Postprocessing(Replace(cmbMulti.Name, "cmb", ""), cmbMulti.Text)
result = True
End If
ElseIf ctrl.Name.StartsWith("cmbSingle") Then
Dim cmbSingle As TextBox = ctrl
If cmbSingle.Text = "" Then
Dim optional_index As Boolean = ClassDatabase.Execute_Scalar("SELECT OPTIONAL FROM TBDD_INDEX_MAN WHERE DOK_ID = " & dokartid & " AND NAME = '" & Replace(cmbSingle.Name, "cmbMulti", "") & "'", MyConnectionString, True)
If optional_index = False Then
MsgBox("Bitte wählen Sie einen Wert aus der Combobox.", MsgBoxStyle.Exclamation)
cmbSingle.Focus()
Return False
Else
Indexwert_Postprocessing(Replace(cmbSingle.Name, "cmbMulti", ""), "")
result = True
End If
Else
Indexwert_Postprocessing(Replace(cmbSingle.Name, "cmb", ""), cmbSingle.Text)
result = True
End If
ElseIf ctrl.Name.StartsWith("cmb") Then
Dim cmb As ComboBox = ctrl
If cmb.Text = "" Then
Dim optional_index As Boolean = ClassDatabase.Execute_Scalar("SELECT OPTIONAL FROM TBDD_INDEX_MAN WHERE DOK_ID = " & dokartid & " AND NAME = '" & Replace(cmb.Name, "cmb", "") & "'", MyConnectionString, True)

View File

@ -27,6 +27,7 @@ Partial Class frmLookupGrid
Me.Panel1 = New System.Windows.Forms.Panel()
Me.btnClear = New System.Windows.Forms.Button()
Me.btnOK = New System.Windows.Forms.Button()
Me.Button1 = New System.Windows.Forms.Button()
CType(Me.gridLookup, System.ComponentModel.ISupportInitialize).BeginInit()
CType(Me.viewLookup, System.ComponentModel.ISupportInitialize).BeginInit()
Me.Panel1.SuspendLayout()
@ -56,6 +57,7 @@ Partial Class frmLookupGrid
'
'Panel1
'
Me.Panel1.Controls.Add(Me.Button1)
Me.Panel1.Controls.Add(Me.btnClear)
Me.Panel1.Controls.Add(Me.btnOK)
Me.Panel1.Dock = System.Windows.Forms.DockStyle.Bottom
@ -84,6 +86,15 @@ Partial Class frmLookupGrid
Me.btnOK.Text = "OK"
Me.btnOK.UseVisualStyleBackColor = True
'
'Button1
'
Me.Button1.Location = New System.Drawing.Point(100, 3)
Me.Button1.Name = "Button1"
Me.Button1.Size = New System.Drawing.Size(94, 23)
Me.Button1.TabIndex = 1
Me.Button1.Text = "RestoreSelect"
Me.Button1.UseVisualStyleBackColor = True
'
'frmLookupGrid
'
Me.AcceptButton = Me.btnOK
@ -92,6 +103,7 @@ Partial Class frmLookupGrid
Me.ClientSize = New System.Drawing.Size(295, 269)
Me.Controls.Add(Me.gridLookup)
Me.Controls.Add(Me.Panel1)
Me.KeyPreview = True
Me.MaximizeBox = False
Me.MinimizeBox = False
Me.Name = "frmLookupGrid"
@ -109,4 +121,5 @@ Partial Class frmLookupGrid
Friend WithEvents Panel1 As Panel
Friend WithEvents btnOK As Button
Friend WithEvents btnClear As Button
Friend WithEvents Button1 As Button
End Class

View File

@ -1,4 +1,7 @@
Imports DevExpress.XtraGrid.Views.Grid
Imports DevExpress.Data
Imports DevExpress.XtraGrid.Controls
Imports DevExpress.XtraGrid.Views.Base
Imports DevExpress.XtraGrid.Views.Grid
Public Class frmLookupGrid
Public Property MultiSelect As Boolean
@ -34,23 +37,52 @@ Public Class frmLookupGrid
' Ursprüngliche Werte zwischenspeichern
originalValues = SelectedValues
SyncItemsWithView(view)
' Focus auf Find panel setzen
view.ShowFindPanel()
End Sub
Private Sub frmLookupGrid_Shown(sender As Object, e As EventArgs) Handles Me.Shown
Dim findEditor As DevExpress.XtraEditors.MRUEdit = gridLookup.Controls.Find("teFind", True).FirstOrDefault()
If findEditor IsNot Nothing Then
'AddHandler findEditor.KeyUp, AddressOf FindPanel_KeyUp
AddHandler findEditor.EditValueChanged, AddressOf FindPanel_KeyUp
End If
End Sub
Private OldFindPanelValue As String = ""
Private Sub FindPanel_KeyUp(sender As Object, e As EventArgs)
Dim findEditor As DevExpress.XtraEditors.MRUEdit = sender
If findEditor.EditValue.ToString.Count = 0 And OldFindPanelValue.Count > 0 Then
SyncItemsWithView(viewLookup)
End If
OldFindPanelValue = findEditor.EditValue
End Sub
Private Sub SyncItemsWithView(view As GridView)
' Wenn Vorbelegungen existieren
' und Mehrfachauswahl ausgewählt ist, werden diese angehakt
If SelectedValues.Count > 0 And MultiSelect Then
For i = 0 To view.DataRowCount - 1
Dim rowHandle = view.GetRowHandle(i)
Dim rowView As DataRowView = view.GetRow(rowHandle)
Dim row As DataRow = rowView.Row
Dim value = row.Item(0)
If SelectedValues.Contains(value) Then
view.SelectRow(rowHandle)
If rowView IsNot Nothing Then
Dim row As DataRow = rowView.Row
Dim value = row.Item(0)
If SelectedValues.Contains(value) Then
view.SelectRow(rowHandle)
End If
End If
Next
End If
' Focus auf Find panel setzen
view.ShowFindPanel()
End Sub
Private Sub btnOK_Click(sender As Object, e As EventArgs) Handles btnOK.Click
@ -74,4 +106,28 @@ Public Class frmLookupGrid
Private Sub btnClear_Click(sender As Object, e As EventArgs) Handles btnClear.Click
SelectedValues = New List(Of Object)
End Sub
Private Sub frmLookupGrid_KeyDown(sender As Object, e As KeyEventArgs) Handles Me.KeyDown
If e.KeyCode = Keys.Escape Then
Close()
End If
End Sub
Private Sub viewLookup_SelectionChanged(sender As Object, e As DevExpress.Data.SelectionChangedEventArgs) Handles viewLookup.SelectionChanged
If e.Action = System.ComponentModel.CollectionChangeAction.Add Then
Dim row = viewLookup.GetRow(e.ControllerRow)
Dim value As Object = row.item(0)
SelectedValues.Add(value)
ElseIf e.Action = System.ComponentModel.CollectionChangeAction.Remove Then
Dim row = viewLookup.GetRow(e.ControllerRow)
Dim value As Object = row.item(0)
SelectedValues = (From v In SelectedValues
Where v <> value
Select v).ToList()
End If
End Sub
End Class