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)> <Browsable(False)>
Public Property DataSource As DataTable Public Property DataSource As DataTable
<Browsable(False)> <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 Private Sub btnOpenForm_Click(sender As Object, e As EventArgs) Handles btnOpenForm.Click
Dim frm As New frmLookupGrid() With { 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.GridLookUpEdit, 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.XtraGrid.GridControl, 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 AddNewValues As Boolean
Public Property PreventDuplicates As Boolean Public Property PreventDuplicates As Boolean
Public Property DataSource As DataTable 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 dataColumn As Integer
Private view As GridView Private view As GridView
Private grid As GridControl Private grid As GridControl
@ -19,6 +17,22 @@ Public Class frmLookupGrid
view = viewLookup view = viewLookup
grid = gridLookup 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 ' Datasource setzen
grid.DataSource = DataSource grid.DataSource = DataSource
@ -47,14 +61,10 @@ Public Class frmLookupGrid
view.OptionsView.NewItemRowPosition = NewItemRowPosition.None view.OptionsView.NewItemRowPosition = NewItemRowPosition.None
End If End If
' Wenn Selected Values nicht gesetzt ist, leere Liste anlegen
If SelectedValues Is Nothing Then If SelectedValues Is Nothing Then
SelectedValues = New List(Of Object) SelectedValues = New List(Of String)
End If End If
' Ursprüngliche Werte zwischenspeichern
originalValues = SelectedValues
' Bereits ausgewählte Werte im grid auswählen ' Bereits ausgewählte Werte im grid auswählen
SyncItemsWithView(view) SyncItemsWithView(view)
@ -90,7 +100,7 @@ Public Class frmLookupGrid
view.FindFilterText = String.Empty view.FindFilterText = String.Empty
If MultiSelect Then If MultiSelect Then
Dim oValues As New List(Of Object) Dim oValues As New List(Of String)
For oIndex = 0 To viewLookup.DataRowCount - 1 For oIndex = 0 To viewLookup.DataRowCount - 1
Dim oRow As DataRow = view.GetDataRow(oIndex) Dim oRow As DataRow = view.GetDataRow(oIndex)
@ -111,7 +121,7 @@ Public Class frmLookupGrid
Else Else
Dim oRowHandle As Integer = view.GetSelectedRows().ToList().FirstOrDefault() Dim oRowHandle As Integer = view.GetSelectedRows().ToList().FirstOrDefault()
Dim oRow As DataRow = view.GetDataRow(oRowHandle) 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 If oRow IsNot Nothing Then
Dim oValue = oRow.Item(0) Dim oValue = oRow.Item(0)
@ -120,6 +130,9 @@ Public Class frmLookupGrid
SelectedValues = oValues SelectedValues = oValues
End If End If
DialogResult = DialogResult.OK
Close()
End Sub End Sub
Private Sub btnClear_Click(sender As Object, e As EventArgs) Handles btnClear.Click Private Sub btnClear_Click(sender As Object, e As EventArgs) Handles btnClear.Click
@ -133,7 +146,6 @@ Public Class frmLookupGrid
End Sub End Sub
Private Sub viewLookup_CellValueChanging(sender As Object, e As Views.Base.CellValueChangedEventArgs) Handles viewLookup.CellValueChanging Private Sub viewLookup_CellValueChanging(sender As Object, e As Views.Base.CellValueChangedEventArgs) Handles viewLookup.CellValueChanging
If e.RowHandle = GridControl.NewItemRowHandle Then If e.RowHandle = GridControl.NewItemRowHandle Then
Exit Sub Exit Sub
End If End If
@ -153,4 +165,27 @@ Public Class frmLookupGrid
e.Cancel = True e.Cancel = True
End If End If
End Sub 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 End Class