jj: doubleclick to confirm, fix duplicate SELECTED column, fix list(str)

This commit is contained in:
Jonathan Jenne 2018-10-30 15:07:38 +01:00
parent 73474ade37
commit 7fc347ae05
3 changed files with 50 additions and 14 deletions

View File

@ -11,7 +11,7 @@ Public Class Grid
<Browsable(False)>
Public Property DataSource As DataTable
<Browsable(False)>
Public Property SelectedValues As New List(Of Object)
Public Property SelectedValues As New List(Of String)
Private Sub btnOpenForm_Click(sender As Object, e As EventArgs) Handles btnOpenForm.Click
Dim frm As New frmLookupGrid() With {

View File

@ -1,3 +1,4 @@
DevExpress.XtraEditors.ButtonEdit, DevExpress.XtraEditors.v18.1, Version=18.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
DevExpress.XtraEditors.TextEdit, DevExpress.XtraEditors.v18.1, Version=18.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
DevExpress.XtraEditors.GridLookUpEdit, DevExpress.XtraGrid.v18.1, Version=18.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
DevExpress.XtraGrid.GridControl, DevExpress.XtraGrid.v18.1, Version=18.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
DevExpress.XtraEditors.TextEdit, DevExpress.XtraEditors.v18.1, Version=18.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
DevExpress.XtraEditors.ButtonEdit, DevExpress.XtraEditors.v18.1, Version=18.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a

View File

@ -7,11 +7,9 @@ Public Class frmLookupGrid
Public Property AddNewValues As Boolean
Public Property PreventDuplicates As Boolean
Public Property DataSource As DataTable
Public Property SelectedValues As List(Of Object)
Public Property SelectedValues As List(Of String)
Private originalValues As List(Of Object)
Private dataColumn As Integer
Private view As GridView
Private grid As GridControl
@ -19,6 +17,22 @@ Public Class frmLookupGrid
view = viewLookup
grid = gridLookup
If DataSource Is Nothing Then
Exit Sub
End If
If MultiSelect Then
If Not DataSource.Columns.Contains("SELECTED") Then
Dim selectedColumn = New DataColumn() With {
.ColumnName = "SELECTED",
.DataType = GetType(Boolean),
.DefaultValue = False
}
DataSource.Columns.Add(selectedColumn)
selectedColumn.SetOrdinal(0)
End If
End If
' Datasource setzen
grid.DataSource = DataSource
@ -47,14 +61,10 @@ Public Class frmLookupGrid
view.OptionsView.NewItemRowPosition = NewItemRowPosition.None
End If
' Wenn Selected Values nicht gesetzt ist, leere Liste anlegen
If SelectedValues Is Nothing Then
SelectedValues = New List(Of Object)
SelectedValues = New List(Of String)
End If
' Ursprüngliche Werte zwischenspeichern
originalValues = SelectedValues
' Bereits ausgewählte Werte im grid auswählen
SyncItemsWithView(view)
@ -90,7 +100,7 @@ Public Class frmLookupGrid
view.FindFilterText = String.Empty
If MultiSelect Then
Dim oValues As New List(Of Object)
Dim oValues As New List(Of String)
For oIndex = 0 To viewLookup.DataRowCount - 1
Dim oRow As DataRow = view.GetDataRow(oIndex)
@ -111,7 +121,7 @@ Public Class frmLookupGrid
Else
Dim oRowHandle As Integer = view.GetSelectedRows().ToList().FirstOrDefault()
Dim oRow As DataRow = view.GetDataRow(oRowHandle)
Dim oValues As New List(Of Object)
Dim oValues As New List(Of String)
If oRow IsNot Nothing Then
Dim oValue = oRow.Item(0)
@ -120,6 +130,9 @@ Public Class frmLookupGrid
SelectedValues = oValues
End If
DialogResult = DialogResult.OK
Close()
End Sub
Private Sub btnClear_Click(sender As Object, e As EventArgs) Handles btnClear.Click
@ -133,7 +146,6 @@ Public Class frmLookupGrid
End Sub
Private Sub viewLookup_CellValueChanging(sender As Object, e As Views.Base.CellValueChangedEventArgs) Handles viewLookup.CellValueChanging
If e.RowHandle = GridControl.NewItemRowHandle Then
Exit Sub
End If
@ -153,4 +165,27 @@ Public Class frmLookupGrid
e.Cancel = True
End If
End Sub
Private Sub viewLookup_RowClick(sender As Object, e As RowClickEventArgs) Handles viewLookup.RowClick
' If user double-clicks on a row
If e.Clicks = 2 And e.Button = MouseButtons.Left Then
' And clicked row is a normal row
If e.RowHandle >= 0 Then
' If multiselect is true, check the current row
' If multiselect is false, select the current row and close the window
If MultiSelect = True Then
Dim row As DataRow = view.GetDataRow(e.RowHandle)
row.Item(0) = Not CBool(row.Item(0))
Else
Dim row As DataRow = view.GetDataRow(e.RowHandle)
Dim value = row.Item(0)
SelectedValues = New List(Of String) From {value}
DialogResult = DialogResult.OK
Close()
End If
End If
End If
End Sub
End Class