jj: add preventduplicate values and add new items to lookupGrid
This commit is contained in:
@@ -1,33 +1,48 @@
|
||||
Imports DevExpress.Data
|
||||
Imports DevExpress.XtraGrid.Controls
|
||||
Imports DevExpress.XtraGrid.Views.Base
|
||||
Imports DevExpress.XtraGrid
|
||||
Imports DevExpress.XtraGrid.Views.Grid
|
||||
|
||||
Public Class frmLookupGrid
|
||||
Public Property MultiSelect As Boolean
|
||||
Public Property AddNewValues As Boolean
|
||||
Public Property PreventDuplicates As Boolean
|
||||
Public Property DataSource As DataTable
|
||||
Public Property SelectedValues As List(Of Object)
|
||||
|
||||
Private originalValues As List(Of Object)
|
||||
Private dataColumn As Integer
|
||||
|
||||
Private view As GridView
|
||||
Private grid As GridControl
|
||||
|
||||
Private Sub frmLookupGrid_Load(sender As Object, e As EventArgs) Handles Me.Load
|
||||
Dim view As GridView = gridLookup.DefaultView
|
||||
view = viewLookup
|
||||
grid = gridLookup
|
||||
|
||||
' Datasource setzen
|
||||
grid.DataSource = DataSource
|
||||
|
||||
' Anzeige Eigeschaften setzen
|
||||
view.OptionsFind.AlwaysVisible = True
|
||||
view.OptionsSelection.MultiSelect = False
|
||||
|
||||
If MultiSelect Then
|
||||
' Selected Spalte anpassen
|
||||
view.Columns.Item(0).Caption = " "
|
||||
view.Columns.Item(0).Resize(10)
|
||||
Text = "Wählen Sie einen oder mehrere Werte:"
|
||||
view.OptionsSelection.MultiSelect = True
|
||||
view.OptionsSelection.MultiSelectMode = GridMultiSelectMode.CheckBoxRowSelect
|
||||
dataColumn = 1
|
||||
Else
|
||||
Text = "Wählen Sie einen Wert:"
|
||||
view.OptionsSelection.MultiSelect = False
|
||||
view.OptionsSelection.MultiSelectMode = GridMultiSelectMode.RowSelect
|
||||
dataColumn = 0
|
||||
End If
|
||||
|
||||
' Datasource setzen
|
||||
gridLookup.DataSource = DataSource
|
||||
If AddNewValues Then
|
||||
view.OptionsBehavior.AllowAddRows = DevExpress.Utils.DefaultBoolean.True
|
||||
view.OptionsView.NewItemRowPosition = NewItemRowPosition.Top
|
||||
Else
|
||||
view.OptionsBehavior.AllowAddRows = DevExpress.Utils.DefaultBoolean.False
|
||||
view.OptionsView.NewItemRowPosition = NewItemRowPosition.None
|
||||
End If
|
||||
|
||||
' Wenn Selected Values nicht gesetzt ist, leere Liste anlegen
|
||||
If SelectedValues Is Nothing Then
|
||||
@@ -37,48 +52,31 @@ Public Class frmLookupGrid
|
||||
' Ursprüngliche Werte zwischenspeichern
|
||||
originalValues = SelectedValues
|
||||
|
||||
' Bereits ausgewählte Werte im grid auswählen
|
||||
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
|
||||
' Wenn Vorbelegungen existieren, werden diese angehakt
|
||||
If SelectedValues.Count > 0 Then
|
||||
For i = 0 To view.DataRowCount - 1
|
||||
Dim rowHandle = view.GetRowHandle(i)
|
||||
Dim rowView As DataRowView = view.GetRow(rowHandle)
|
||||
|
||||
If rowView IsNot Nothing Then
|
||||
Dim row As DataRow = rowView.Row
|
||||
Dim value = row.Item(0)
|
||||
Dim value = row.Item(dataColumn)
|
||||
|
||||
If SelectedValues.Contains(value) Then
|
||||
view.SelectRow(rowHandle)
|
||||
If MultiSelect Then
|
||||
row.Item(0) = True
|
||||
Else
|
||||
view.SelectRow(rowHandle)
|
||||
End If
|
||||
End If
|
||||
End If
|
||||
Next
|
||||
@@ -86,48 +84,66 @@ Public Class frmLookupGrid
|
||||
End Sub
|
||||
|
||||
Private Sub btnOK_Click(sender As Object, e As EventArgs) Handles btnOK.Click
|
||||
Dim view As GridView = gridLookup.DefaultView
|
||||
Dim selectedRows = view.GetSelectedRows()
|
||||
|
||||
Dim values As New List(Of Object)
|
||||
|
||||
For Each rowHandle In selectedRows
|
||||
Dim value = view.GetDataRow(rowHandle)
|
||||
values.Add(value.Item(0))
|
||||
Next
|
||||
' Filter vor dem Auslesen entfernen, damit alle Werte erfasst werden
|
||||
view.FindFilterText = String.Empty
|
||||
|
||||
If MultiSelect Then
|
||||
Dim values As New List(Of Object)
|
||||
|
||||
For index = 0 To viewLookup.DataRowCount - 1
|
||||
Dim row As DataRow = view.GetDataRow(index)
|
||||
Dim selected As Boolean = row.Item(0)
|
||||
Dim value As Object = row.Item(1)
|
||||
|
||||
If selected Then
|
||||
values.Add(value)
|
||||
End If
|
||||
Next
|
||||
|
||||
' Doppelte Werte entfernen, wenn konfiguriert
|
||||
If PreventDuplicates Then
|
||||
values = values.Distinct().ToList()
|
||||
End If
|
||||
|
||||
SelectedValues = values
|
||||
Else
|
||||
SelectedValues = New List(Of Object) From {values.First()}
|
||||
Dim rowHandle As Integer = view.GetSelectedRows().ToList().First()
|
||||
Dim row As DataRow = view.GetDataRow(rowHandle)
|
||||
Dim value = row.Item(0)
|
||||
|
||||
SelectedValues = New List(Of Object) From {value}
|
||||
End If
|
||||
End Sub
|
||||
|
||||
Private Sub btnClear_Click(sender As Object, e As EventArgs) Handles btnClear.Click
|
||||
SelectedValues = New List(Of Object)
|
||||
SelectedValues.Clear()
|
||||
End Sub
|
||||
|
||||
Private Sub frmLookupGrid_KeyDown(sender As Object, e As KeyEventArgs) Handles Me.KeyDown
|
||||
Private Sub gridLookup_KeyUp(sender As Object, e As KeyEventArgs) Handles gridLookup.KeyUp
|
||||
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)
|
||||
Private Sub viewLookup_CellValueChanging(sender As Object, e As Views.Base.CellValueChangedEventArgs) Handles viewLookup.CellValueChanging
|
||||
|
||||
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()
|
||||
If e.RowHandle = GridControl.NewItemRowHandle Then
|
||||
Exit Sub
|
||||
End If
|
||||
|
||||
Dim rowHandle = e.RowHandle
|
||||
Dim column = e.Column
|
||||
End Sub
|
||||
|
||||
Private Sub viewLookup_ShowingEditor(sender As Object, e As System.ComponentModel.CancelEventArgs) Handles viewLookup.ShowingEditor
|
||||
Dim rowHandleIsNewItemRow = (view.FocusedRowHandle = GridControl.NewItemRowHandle)
|
||||
Dim columnIsCheckboxColumn = view.FocusedColumn.FieldName = "SELECTED"
|
||||
|
||||
' Prevent editing of Data Column/allow editing for Checkbox Column and NewValue Row
|
||||
If rowHandleIsNewItemRow Or columnIsCheckboxColumn Then
|
||||
e.Cancel = False
|
||||
Else
|
||||
e.Cancel = True
|
||||
End If
|
||||
End Sub
|
||||
End Class
|
||||
Reference in New Issue
Block a user