187 lines
6.1 KiB
VB.net
187 lines
6.1 KiB
VB.net
Imports System.Windows.Forms
|
|
|
|
Public Class NumericUpDownColumnRight
|
|
Inherits DataGridViewColumn
|
|
|
|
Public Sub New()
|
|
MyBase.New(New NumericUpDownRightCell())
|
|
End Sub
|
|
|
|
Public Overrides Property CellTemplate() As DataGridViewCell
|
|
Get
|
|
Return MyBase.CellTemplate
|
|
End Get
|
|
Set(ByVal value As DataGridViewCell)
|
|
|
|
' Ensure that the cell used for the template is a NumericUpDownCell.
|
|
If Not (value Is Nothing) AndAlso Not value.GetType().IsAssignableFrom(GetType(NumericUpDownRightCell)) Then
|
|
Throw New InvalidCastException("Must be a NumericUpDown")
|
|
End If
|
|
MyBase.CellTemplate = value
|
|
|
|
End Set
|
|
End Property
|
|
End Class
|
|
Public Class NumericUpDownRightCell
|
|
Inherits DataGridViewTextBoxCell
|
|
Public Sub New()
|
|
'Me.Style.Format = "#.##"
|
|
End Sub
|
|
|
|
Public Overrides Sub InitializeEditingControl(ByVal rowIndex As Integer, ByVal initialFormattedValue As Object, ByVal dataGridViewCellStyle As DataGridViewCellStyle)
|
|
|
|
' Set the value of the editing control to the current cell value.
|
|
MyBase.InitializeEditingControl(rowIndex, initialFormattedValue, dataGridViewCellStyle)
|
|
|
|
Dim ctl As NumericUpDownRightEditingControl = CType(DataGridView.EditingControl, NumericUpDownRightEditingControl)
|
|
ctl.Minimum = 0
|
|
|
|
Dim CurrentValue As Decimal = 0
|
|
If Not DBNull.Value.Equals(Me.Value) Then
|
|
If Not IsNumeric(Me.Value) Then
|
|
Me.Value = 0
|
|
End If
|
|
If Integer.TryParse(Me.Value.ToString, CurrentValue) Then
|
|
ctl.Value = CurrentValue
|
|
End If
|
|
Else
|
|
ctl.Value = 0
|
|
End If
|
|
|
|
End Sub
|
|
Public Overrides ReadOnly Property EditType() As Type
|
|
Get
|
|
' Return the type of the editing contol that NumericUpDownCell uses.
|
|
Return GetType(NumericUpDownRightEditingControl)
|
|
End Get
|
|
End Property
|
|
Public Overrides ReadOnly Property ValueType() As Type
|
|
Get
|
|
' Return the type of the value that NumericUpDownCell contains.
|
|
Return GetType(Decimal)
|
|
End Get
|
|
End Property
|
|
Public Overrides ReadOnly Property DefaultNewRowValue() As Object
|
|
Get
|
|
' Use as the current default value.
|
|
Return Nothing
|
|
End Get
|
|
End Property
|
|
End Class
|
|
Class NumericUpDownRightEditingControl
|
|
Inherits NumericUpDown
|
|
Implements IDataGridViewEditingControl
|
|
|
|
Private dataGridViewControl As DataGridView
|
|
Private valueIsChanged As Boolean = False
|
|
Private rowIndexNum As Integer
|
|
|
|
Public Sub New()
|
|
Me.DecimalPlaces = 0
|
|
Me.TextAlign = System.Windows.Forms.HorizontalAlignment.Left
|
|
Me.UpDownAlign = System.Windows.Forms.LeftRightAlignment.Right
|
|
End Sub
|
|
|
|
Public Property EditingControlFormattedValue() As Object Implements IDataGridViewEditingControl.EditingControlFormattedValue
|
|
|
|
Get
|
|
Return Me.Value.ToString("#")
|
|
End Get
|
|
|
|
Set(ByVal value As Object)
|
|
If TypeOf value Is Decimal Then
|
|
Me.Value = Decimal.Parse(CStr(value))
|
|
End If
|
|
End Set
|
|
|
|
End Property
|
|
|
|
Public Function GetEditingControlFormattedValue(ByVal context As DataGridViewDataErrorContexts) As Object _
|
|
Implements IDataGridViewEditingControl.GetEditingControlFormattedValue
|
|
|
|
Return Me.Value.ToString() ' Me.Value.ToString("#.##")
|
|
|
|
End Function
|
|
|
|
Public Sub ApplyCellStyleToEditingControl(ByVal dataGridViewCellStyle As DataGridViewCellStyle) _
|
|
Implements IDataGridViewEditingControl.ApplyCellStyleToEditingControl
|
|
|
|
Me.Font = dataGridViewCellStyle.Font
|
|
Me.ForeColor = dataGridViewCellStyle.ForeColor
|
|
Me.BackColor = dataGridViewCellStyle.BackColor
|
|
|
|
End Sub
|
|
|
|
Public Property EditingControlRowIndex() As Integer _
|
|
Implements IDataGridViewEditingControl.EditingControlRowIndex
|
|
|
|
Get
|
|
Return rowIndexNum
|
|
End Get
|
|
Set(ByVal value As Integer)
|
|
rowIndexNum = value
|
|
End Set
|
|
|
|
End Property
|
|
|
|
Public Function EditingControlWantsInputKey(ByVal key As Keys, ByVal dataGridViewWantsInputKey As Boolean) As Boolean Implements IDataGridViewEditingControl.EditingControlWantsInputKey
|
|
|
|
' Let the NumericUpDown handle the keys listed.
|
|
Select Case key And Keys.KeyCode
|
|
Case Keys.Left, Keys.Up, Keys.Down, Keys.Right, Keys.Home, Keys.End, Keys.PageDown, Keys.PageUp
|
|
|
|
Return True
|
|
|
|
Case Else
|
|
Return False
|
|
End Select
|
|
|
|
End Function
|
|
|
|
Public Sub PrepareEditingControlForEdit(ByVal selectAll As Boolean) _
|
|
Implements IDataGridViewEditingControl.PrepareEditingControlForEdit
|
|
|
|
' No preparation needs to be done.
|
|
|
|
End Sub
|
|
Public ReadOnly Property RepositionEditingControlOnValueChange() As Boolean Implements IDataGridViewEditingControl.RepositionEditingControlOnValueChange
|
|
|
|
Get
|
|
Return False
|
|
End Get
|
|
|
|
End Property
|
|
Public Property EditingControlDataGridView() As DataGridView Implements IDataGridViewEditingControl.EditingControlDataGridView
|
|
|
|
Get
|
|
Return dataGridViewControl
|
|
End Get
|
|
Set(ByVal value As DataGridView)
|
|
dataGridViewControl = value
|
|
End Set
|
|
|
|
End Property
|
|
Public Property EditingControlValueChanged() As Boolean Implements IDataGridViewEditingControl.EditingControlValueChanged
|
|
|
|
Get
|
|
Return valueIsChanged
|
|
End Get
|
|
Set(ByVal value As Boolean)
|
|
valueIsChanged = value
|
|
End Set
|
|
|
|
End Property
|
|
Public ReadOnly Property EditingControlCursor() As Cursor Implements IDataGridViewEditingControl.EditingPanelCursor
|
|
Get
|
|
Return MyBase.Cursor
|
|
End Get
|
|
End Property
|
|
Protected Overrides Sub OnValueChanged(ByVal eventargs As EventArgs)
|
|
|
|
' Notify the DataGridView that the contents of the cell have changed.
|
|
valueIsChanged = True
|
|
Me.EditingControlDataGridView.NotifyCurrentCellDirty(True)
|
|
MyBase.OnValueChanged(eventargs)
|
|
|
|
End Sub
|
|
End Class |