133 lines
4.5 KiB
VB.net
133 lines
4.5 KiB
VB.net
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
|
|
Public Property DataSource As DataTable
|
|
Public Property SelectedValues As List(Of Object)
|
|
|
|
Private originalValues As List(Of Object)
|
|
|
|
Private Sub frmLookupGrid_Load(sender As Object, e As EventArgs) Handles Me.Load
|
|
Dim view As GridView = gridLookup.DefaultView
|
|
|
|
' Anzeige Eigeschaften setzen
|
|
view.OptionsFind.AlwaysVisible = True
|
|
|
|
If MultiSelect Then
|
|
Text = "Wählen Sie einen oder mehrere Werte:"
|
|
view.OptionsSelection.MultiSelect = True
|
|
view.OptionsSelection.MultiSelectMode = GridMultiSelectMode.CheckBoxRowSelect
|
|
Else
|
|
Text = "Wählen Sie einen Wert:"
|
|
view.OptionsSelection.MultiSelect = False
|
|
view.OptionsSelection.MultiSelectMode = GridMultiSelectMode.RowSelect
|
|
End If
|
|
|
|
' Datasource setzen
|
|
gridLookup.DataSource = DataSource
|
|
|
|
' Wenn Selected Values nicht gesetzt ist, leere Liste anlegen
|
|
If SelectedValues Is Nothing Then
|
|
SelectedValues = New List(Of Object)
|
|
End If
|
|
|
|
' 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)
|
|
|
|
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
|
|
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
|
|
|
|
If MultiSelect Then
|
|
SelectedValues = values
|
|
Else
|
|
SelectedValues = New List(Of Object) From {values.First()}
|
|
End If
|
|
End Sub
|
|
|
|
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 |