/
GridControlCRUDBehavior.vb
162 lines (130 loc) · 6.25 KB
/
GridControlCRUDBehavior.vb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
Imports DevExpress.Mvvm
Imports DevExpress.Mvvm.UI.Interactivity
Imports DevExpress.Xpf.Core
Imports DevExpress.Xpf.Grid
Imports System
Imports System.Windows
Imports System.Windows.Input
Namespace DevExpress.CRUD.View
Public Class GridControlCRUDBehavior
Inherits Behavior(Of TableView)
Public Property OnCreateCommand As ICommand
Get
Return CType(GetValue(OnCreateCommandProperty), ICommand)
End Get
Set(ByVal value As ICommand)
SetValue(OnCreateCommandProperty, value)
End Set
End Property
Public Shared ReadOnly OnCreateCommandProperty As DependencyProperty = DependencyProperty.Register("OnCreateCommand", GetType(ICommand), GetType(GridControlCRUDBehavior), New PropertyMetadata(CType(Nothing, PropertyChangedCallback)))
Public Property OnUpdateCommand As ICommand
Get
Return CType(GetValue(OnUpdateCommandProperty), ICommand)
End Get
Set(ByVal value As ICommand)
SetValue(OnUpdateCommandProperty, value)
End Set
End Property
Public Shared ReadOnly OnUpdateCommandProperty As DependencyProperty = DependencyProperty.Register("OnUpdateCommand", GetType(ICommand), GetType(GridControlCRUDBehavior), New PropertyMetadata(CType(Nothing, PropertyChangedCallback)))
Public Property OnDeleteCommand As ICommand
Get
Return CType(GetValue(OnDeleteCommandProperty), ICommand)
End Get
Set(ByVal value As ICommand)
SetValue(OnDeleteCommandProperty, value)
End Set
End Property
Public Shared ReadOnly OnDeleteCommandProperty As DependencyProperty = DependencyProperty.Register("OnDeleteCommand", GetType(ICommand), GetType(GridControlCRUDBehavior), New PropertyMetadata(CType(Nothing, PropertyChangedCallback)))
Public Property OnRefreshCommand As ICommand
Get
Return CType(GetValue(OnRefreshCommandProperty), ICommand)
End Get
Set(ByVal value As ICommand)
SetValue(OnRefreshCommandProperty, value)
End Set
End Property
Public Shared ReadOnly OnRefreshCommandProperty As DependencyProperty = DependencyProperty.Register("OnRefreshCommand", GetType(ICommand), GetType(GridControlCRUDBehavior), New PropertyMetadata(CType(Nothing, PropertyChangedCallback)))
Public Property NoRecordsErrorMessage As String
Get
Return CStr(GetValue(NoRecordsErrorMessageProperty))
End Get
Set(ByVal value As String)
SetValue(NoRecordsErrorMessageProperty, value)
End Set
End Property
Public Shared ReadOnly NoRecordsErrorMessageProperty As DependencyProperty = DependencyProperty.Register("NoRecordsErrorMessage", GetType(String), GetType(GridControlCRUDBehavior), New PropertyMetadata(Nothing, Sub(d, e) CType(d, GridControlCRUDBehavior).UpdateErrorText()))
Public ReadOnly Property DeleteCommand As ICommand
Public ReadOnly Property RefreshCommand As ICommand
Private ReadOnly Property View As TableView
Get
Return AssociatedObject
End Get
End Property
Public Sub New()
DeleteCommand = New DelegateCommand(AddressOf DoDelete, AddressOf CanDelete)
RefreshCommand = New DelegateCommand(AddressOf DoRefresh, AddressOf CanRefresh)
End Sub
Protected Overrides Sub OnAttached()
MyBase.OnAttached()
AddHandler View.ValidateRow, AddressOf OnValidateRow
AddHandler View.PreviewKeyDown, AddressOf OnPreviewKeyDown
UpdateErrorText()
End Sub
Protected Overrides Sub OnDetaching()
RemoveHandler View.ValidateRow, AddressOf OnValidateRow
RemoveHandler View.PreviewKeyDown, AddressOf OnPreviewKeyDown
UpdateErrorText()
MyBase.OnDetaching()
End Sub
Private Sub UpdateErrorText()
If View Is Nothing Then Return
If Not Equals(NoRecordsErrorMessage, Nothing) Then
View.ShowEmptyText = True
View.RuntimeLocalizationStrings = New GridRuntimeStringCollection() From {New RuntimeStringIdInfo(GridControlRuntimeStringId.NoRecords, NoRecordsErrorMessage)}
Else
View.ShowEmptyText = False
View.RuntimeLocalizationStrings = Nothing
End If
End Sub
Private Sub OnPreviewKeyDown(ByVal sender As Object, ByVal e As KeyEventArgs)
If e.Key = Key.Delete AndAlso CanDelete() Then
DoDelete()
e.Handled = True
End If
If e.Key = Key.F5 AndAlso CanRefresh() Then
DoRefresh()
e.Handled = True
End If
End Sub
Private Sub DoRefresh()
OnRefreshCommand.Execute(Nothing)
End Sub
Private Function CanRefresh() As Boolean
Return OnRefreshCommand IsNot Nothing AndAlso Not IsEditingRowState()
End Function
Private Sub DoDelete()
Dim row = View.Grid.SelectedItem
If row Is Nothing Then Return
If DXMessageBox.Show(View, "Are you sure you want to delete this row?", "Delete Row", MessageBoxButton.OKCancel) = MessageBoxResult.Cancel Then Return
Try
OnDeleteCommand.Execute(row)
View.Commands.DeleteFocusedRow.Execute(Nothing)
Catch ex As Exception
DXMessageBox.Show(ex.Message)
End Try
End Sub
Private Function CanDelete() As Boolean
Return OnDeleteCommand IsNot Nothing AndAlso Not IsEditingRowState()
End Function
Private Function IsEditingRowState() As Boolean
Return View?.AreUpdateRowButtonsShown = True
End Function
Private Sub OnValidateRow(ByVal sender As Object, ByVal e As GridRowValidationEventArgs)
If View.FocusedRowHandle = DataControlBase.NewItemRowHandle Then
OnCreateCommand.Execute(e.Row)
Else
OnUpdateCommand.Execute(e.Row)
End If
End Sub
End Class
End Namespace